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