Class: Redis::Model
- Inherits:
-
Object
- Object
- Redis::Model
- Defined in:
- lib/redis/model.rb
Defined Under Namespace
Modules: Marshal Classes: FieldProxy, ListProxy, SetProxy
Class Attribute Summary collapse
-
.prefix ⇒ Object
Defaults to model_name.dasherize.
Instance Attribute Summary collapse
-
#id ⇒ Object
Returns the value of attribute id.
Class Method Summary collapse
-
.create(values = {}) ⇒ Object
(also: with_next_key)
Creates new model instance with new uniqid NOTE: “sequence:model_name:id” key is used.
-
.field(name, type = :string) ⇒ Object
(also: value)
Defines marshaled rw accessor for redis string value.
-
.fields ⇒ Object
:nodoc:.
-
.list(name, type = :string) ⇒ Object
Defines accessor for redis list.
- .marshal_class_name(name, type) ⇒ Object
-
.redis ⇒ Object
Redefine this to change connection options.
-
.set(name, type = :string) ⇒ Object
Defines accessor for redis set.
Instance Method Summary collapse
-
#delete(name = nil) ⇒ Object
Issues delete commands for all defined fields.
-
#initialize(id) ⇒ Model
constructor
A new instance of Model.
-
#redis ⇒ Object
:nodoc:.
Constructor Details
#initialize(id) ⇒ Model
Returns a new instance of Model.
48 49 50 |
# File 'lib/redis/model.rb', line 48 def initialize(id) self.id = id end |
Class Attribute Details
.prefix ⇒ Object
Defaults to model_name.dasherize
82 83 84 |
# File 'lib/redis/model.rb', line 82 def prefix @prefix end |
Instance Attribute Details
#id ⇒ Object
Returns the value of attribute id.
46 47 48 |
# File 'lib/redis/model.rb', line 46 def id @id end |
Class Method Details
.create(values = {}) ⇒ Object Also known as: with_next_key
Creates new model instance with new uniqid NOTE: “sequence:model_name:id” key is used
87 88 89 |
# File 'lib/redis/model.rb', line 87 def create(values = {}) populate_model(self.new(next_id)) end |
.field(name, type = :string) ⇒ Object Also known as: value
Defines marshaled rw accessor for redis string value
96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/redis/model.rb', line 96 def field(name, type = :string) class_name = marshal_class_name(name, type) fields << {:name => name.to_s, :type => :type} if type == :string class_eval "def #{name}; @#{name} ||= redis[field_key('#{name}')]; end" class_eval "def #{name}=(value); @#{name} = redis[field_key('#{name}')] = value; end" else class_eval "def #{name}; @#{name} ||= Marshal::#{class_name}.load(redis[field_key('#{name}')]); end" class_eval "def #{name}=(value); @#{name} = value; redis[field_key('#{name}')] = Marshal::#{class_name}.dump(value) end" end end |
.fields ⇒ Object
:nodoc:
137 138 139 |
# File 'lib/redis/model.rb', line 137 def fields #:nodoc: @fields ||= [] end |
.list(name, type = :string) ⇒ Object
Defines accessor for redis list
111 112 113 114 115 116 117 |
# File 'lib/redis/model.rb', line 111 def list(name, type = :string) class_name = marshal_class_name(name, type) fields << {:name => name.to_s, :type => :list} class_eval "def #{name}; @#{name} ||= ListProxy.new(self.redis, field_key('#{name}'), Marshal::#{class_name}); end" eval_writer(name) end |
.marshal_class_name(name, type) ⇒ Object
128 129 130 |
# File 'lib/redis/model.rb', line 128 def marshal_class_name(name, type) Marshal::TYPES[type] or raise ArgumentError.new("Unknown type #{type} for field #{name}") end |
.redis ⇒ Object
Redefine this to change connection options
133 134 135 |
# File 'lib/redis/model.rb', line 133 def redis @@redis ||= Redis.new end |
.set(name, type = :string) ⇒ Object
Defines accessor for redis set
120 121 122 123 124 125 126 |
# File 'lib/redis/model.rb', line 120 def set(name, type = :string) class_name = marshal_class_name(name, type) fields << {:name => name.to_s, :type => :set} class_eval "def #{name}; @#{name} ||= SetProxy.new(self.redis, field_key('#{name}'), Marshal::#{class_name}); end" eval_writer(name) end |
Instance Method Details
#delete(name = nil) ⇒ Object
Issues delete commands for all defined fields
57 58 59 60 61 62 63 64 65 |
# File 'lib/redis/model.rb', line 57 def delete(name = nil) if name redis.delete field_key(name.to_s) else self.class.fields.each do |field| redis.delete field_key(field[:name]) end end end |
#redis ⇒ Object
:nodoc:
52 53 54 |
# File 'lib/redis/model.rb', line 52 def redis #:nodoc: self.class.redis end |