From: "ara.t.howard" Date: 2007-10-14T07:26:25+09:00 Subject: Re: Setter scoping issue On Oct 13, 2007, at 4:04 PM, James Golick wrote: > 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? > -- > 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/ -- share your knowledge. it's a way to achieve immortality. h.h. the 14th dalai lama