Proposed API change for respond_to
Josh Susser
josh at hasmanythrough.com
Thu Sep 20 14:28:37 EDT 2007
That's kind of interesting. I agree that actions seem more like
objects than methods sometimes, but here you have them done up as
classes, not objects. I think the number of classes involved in this
approach might be a bit much. Gets me thinking though. I'll see if
I can apply some gray matter to the problem in the next day or two...
On Sep 20, 2007, at 11:13 AM, ry dahl wrote:
> For example,
>
> module Controllers::Products
> class Index < GetAction
> def initialize(params)
> @products = Product.paginate(params[:page] || 1)
> end
>
> def response_json
> @products.to_json
> end
>
> def response_html
> render 'products/index.erb'
> end
> end
>
> class Show < GetAction
> extra_route ':id'
>
> def initialize(params)
> @products = Product.find(params[:id])
> end
>
> def response_html
> render 'products/show.erb'
> end
> end
> end
>
> <%= link_to 'Products', Controllers::Products::Index.url %>
>
>
> On 9/20/07, ry dahl <ry at tinyclouds.org> wrote:
>> Sometimes it seems like actions deserve to be their own objects: we
>> map routes to them, we'd like to know what parameters they expect, we
>> want to say which http methods they accept, we assign them
>> before/after filters, and we even hold collections of them
>> (Controller.callable_actions). This responds_to issue is another
>> example of how we'd like to treat actions as objects. We would like
>> for the controller to look at the request, determine which format to
>> send, and then simply call my_action.render_json or
>> my_action.render_html. Simultaneously, our controllers are not very
>> class like. They are basically instantiate them only to call the
>> action. Changing the Controller class into a module would not be so
>> hard in the current Merb - they are (more or less) just containers
>> for
>> actions.
>>
>> Has anyone else been having these thoughts?
>>
>> ry
>
--
Josh Susser
http://blog.hasmanythrough.com
More information about the Merb-devel
mailing list