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

- old
+ new

@@ -13,27 +13,30 @@ module ClassMethods # Define a new hash key. It will function like a regular instance # method, so it can be used alongside ActiveRecord, DataMapper, etc. def hash_key(name, options={}) redis_objects[name.to_sym] = options.merge(:type => :dict) - klass_name = '::' + self.name + + mod = Module.new do + define_method(name) do + instance_variable_get("@#{name}") or + instance_variable_set("@#{name}", + Redis::HashKey.new( + redis_field_key(name), redis, redis_objects[name.to_sym] + ) + ) + end + end + if options[:global] - instance_eval <<-EndMethods - def #{name} - @#{name} ||= Redis::HashKey.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::HashKey.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.