Syntax Opinions

  • Thread starter Michael Boutros
  • Start date
M

Michael Boutros

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?
 
G

gabriele renzi

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

2) 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:
class C
def self.post
def self.method_added(name)
POST<< name
end
end
def self.get # meta-meta left as exercise for the reader ;)
def self.method_added(name)
GET<< name
end
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]
 
D

Daniel DeLorme

Michael said:
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?

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.
 
G

Gaspard Bucher

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,070
Latest member
BiogenixGummies

Latest Threads

Top