Setter scoping issue

So, I had this really cool idea for a syntax.

class Options
attr_accessor :something, :something_else
end

class Post
@@options ||= Options.new
def self.options(&block)
@@options.instance_eval &block if block_given?
@@options
end
end

Post.options.something = “something”
assert_equal “something”, Post.options.something

Post.options do
something = “something”
something_else = "something_else
end
assert_equal “something”, Post.options.something
assert_equal “something_else”, Post.options.something_else

That’s the idea anyway. A shorthand for scoping setters. If you want
to set one option, you call the whole method chain. If you want to set
multiple options, you use a block.

Unfortunately, the setters don’t seem to work in the block without an
explicit self.

Post.options do
self.something = “something”
self.something_else = "something_else
end

…which defeats the entire purpose of the shorthand.

Anybody have any ideas?

On Oct 13, 2007, at 4:04 PM, James Golick wrote:

@@options

assert_equal “something”, Post.options.something
Post.options do
self.something = “something”
self.something_else = "something_else
end

…which defeats the entire purpose of the shorthand.

Anybody have any ideas?

Posted via http://www.ruby-forum.com/.

cfp:~ > ruby a.rb
cfp:~ > ruby a.rb
cfp:~ > cat a.rb
require ‘attributes’ ### gem install attributes

class Options
attributes :something, :something_else
end

class Post
@@options ||= Options.new

def self.options &block
@@options.instance_eval &block if block_given?
@@options
end
end

Post.options.something = “something”
abort unless “something” == Post.options.something

Post.options do
something “something”
something_else “something_else”
end
abort unless “something” == Post.options.something
abort unless “something_else” == Post.options.something_else

p :success

cfp:~ > ruby a.rb
:success

a @ http://codeforpeople.com/

ara.t.howard wrote:

On Oct 13, 2007, at 4:04 PM, James Golick wrote:

@@options

assert_equal “something”, Post.options.something
Post.options do
self.something = “something”
self.something_else = "something_else
end

…which defeats the entire purpose of the shorthand.

Anybody have any ideas?

Posted via http://www.ruby-forum.com/.
require ‘attributes’ ### gem install attributes
Post.options do
something “something”
something_else “something_else”
end

Thanks a lot. That’s really nice. We lose the equals sign though.
I’ll gladly keep this, if need be, but I’d really like to keep the
equals sign.

Is it possible?

On Oct 13, 2007, at 4:37 PM, James Golick wrote:

Thanks a lot. That’s really nice. We lose the equals sign though.
I’ll gladly keep this, if need be, but I’d really like to keep the
equals sign.

Is it possible?

nope. not without self too. trust me, the open syntax grows on you too

widget.configure {
width 42
height 42.0
color ‘blue’
}

looks very nice in a config file or class parameterization.

regards.

a @ http://codeforpeople.com/