Hello,
I am working on a “framework glue”, as in this framework won’t make you
lose weight or cure the common cold, it’ll just combine the power of
MVC, Sinatra, and DM. However, I’m stuck on what syntax to use for
defining methods in the controller. Since each method will have an HTTP
method, there has to be some way to choose this. Below are my two
options:
-
Enclose the methods in a block with the same name as the HTTP method.
get do
def post
@post = …
end
end
-
My personal favourite which needs no explanation…
def @get.post
@post = …
end
What do you guys think?
On Fri, 08 Feb 2008 15:30:52 -0500, Michael B. wrote:
- Enclose the methods in a block with the same name as the HTTP method.
get do
def post
@post = …
end
end
verbose
- My personal favourite which needs no explanation…
def @get.post
@post = …
end
What do you guys think?
Seems better, but why not
def get.post ?
@post…
end
You just need to provide self.get (and self.post/put/delete) as an
accessor on the base class, which is also useful for setting up the
value
conditionally. But probably you meant this.
There is also one more option, which is more hackish (and not thread
safe) which would be:
class C
get
def foo… end
def bar… end
post
def foo… end
def quux … end
end
Which IMO is way better than the rest, easily allows you to avoid
specifying anything on the default GET, but suggests grouping of
similar
HTTP versbs. Dummy implementation:
end
POST=[]
GET=[]
end
=> []
class D < C
get
def foo() ‘foo’ end
def bar() ‘bar’ end
post
def quux() ‘quux’ end
def foo() ‘foo post’ end
end
=> nil
D::POST
=> [:quux, :foo]
D::GET
=> [:foo, :bar]
Michael B. wrote:
- Enclose the methods in a block with the same name as the HTTP method.
What do you guys think?
Everyone has their own conventions that fit their brain best. Mine is
def edit;end #get
def edit!;end #post
So it’s not so important which convention you choose (i.e. there is no
objectively “best” one), just that you be comfortable with it and stick
with it for the lifetime of the project.
Why not simply write
def post_book
create
end
def get_book
read
end
def put_book
update
end
Or use a macro like:
get(:book) do
end
put(:book) do
end
2008/2/10, Daniel DeLorme [email protected]: