lib/redis/objects/sets.rb in redis-objects-0.7.0 vs lib/redis/objects/sets.rb in redis-objects-0.8.0

- old
+ new

@@ -13,29 +13,31 @@ module ClassMethods # Define a new list. It will function like a regular instance # method, so it can be used alongside ActiveRecord, DataMapper, etc. def set(name, options={}) redis_objects[name.to_sym] = options.merge(:type => :set) - klass_name = '::' + self.name + + mod = Module.new do + define_method(name) do + instance_variable_get("@#{name}") or + instance_variable_set("@#{name}", + Redis::Set.new( + redis_field_key(name), redis, redis_objects[name.to_sym] + ) + ) + end + end + if options[:global] - instance_eval <<-EndMethods - def #{name} - @#{name} ||= Redis::Set.new(redis_field_key(:#{name}), #{klass_name}.redis, #{klass_name}.redis_objects[:#{name}]) - end - EndMethods - class_eval <<-EndMethods - def #{name} - self.class.#{name} - end - EndMethods + extend mod + + # dispatch to class methods + define_method(name) do + self.class.public_send(name) + end else - class_eval <<-EndMethods - def #{name} - @#{name} ||= Redis::Set.new(redis_field_key(:#{name}), #{klass_name}.redis, #{klass_name}.redis_objects[:#{name}]) - end - EndMethods + include mod end - end end # Instance methods that appear in your class when you include Redis::Objects. module InstanceMethods