Mat, Did you try method(:foo) ? Method objects respond to :call.
Sean Cribbs <[email protected]> Developer Advocate Basho Technologies, Inc. http://basho.com/ On Feb 10, 2011, at 8:29 AM, Mat Ellis wrote: > For anyone else trying to do this, I couldn't find any docs on how to do > dynamic default values. > > Objective: add an auto-generated UUID field to a Click model using Twitter's > simple_uuid gem. > > Class Click > include Ripple::Document > include SimpleUUID > > property :uuid, String, :default => foo > key on :uuid > > def foo > UUID.new.to_guid > end > end > > This just gave me "foo" every time: > > Changing default to UUID.new.to_guid gave me a nice uuid value but the same > one each time. > > I had to make the default property lambda { UUID.new.to_guid } for it to work. > > Many other gems/plugins have a convention that if your value in these cases > is a symbol it treats it as a local function. This would mean changing the > default function in the Ripple gem to something like (untested and untried!): > > def default > default = options[:default] > > return nil if default.nil? > if default.is_a? :symbol > type_cast(self.respond_to?(:default) ? self.default : nil) > else > type_cast(default.respond_to?(:call) ? default.call : default) > end > end > > M. > > > > _______________________________________________ > riak-users mailing list > [email protected] > http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com _______________________________________________ riak-users mailing list [email protected] http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
