Syntax Opinions

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:

  1. Enclose the methods in a block with the same name as the HTTP method.
    get do
    def post
    @post = …
    end
    end

  2. 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:

  1. Enclose the methods in a block with the same name as the HTTP method.
    get do
    def post
    @post = …
    end
    end

verbose

  1. 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:

  1. 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]: