Module: Conflow::Redis::Model::ClassMethods
- Defined in:
- lib/conflow/redis/model.rb
Overview
Methods for defining fields on model
Constant Summary collapse
- ALLOWED_TYPES =
Maps types (option for #field) to specific type field
{ hash: Conflow::Redis::HashField, array: Conflow::Redis::ArrayField, value: Conflow::Redis::ValueField, sorted_set: Conflow::Redis::SortedSetField, set: Conflow::Redis::SetField }.freeze
Instance Method Summary collapse
-
#field(name, type) ⇒ Object
Defines Redis field accessors.
-
#fields ⇒ Array<Symbol>
Fields defined on this class.
-
#has_many(name, klass, field_name: "#{name.to_s.chop}_ids") ⇒ Object
Convienience method for defining relation-like accessor.
-
#inherited(subclass) ⇒ Object
Copies field and relations information.
-
#relations ⇒ Array<Symbol>
Relations defined on this class.
Instance Method Details
#field(name, type) ⇒ Object
Defines Redis field accessors.
68 69 70 71 72 73 74 |
# File 'lib/conflow/redis/model.rb', line 68 def field(name, type) type_class = ALLOWED_TYPES[type] raise ArgumentError, "Unknown type: #{type}. Should be one of: #{ALLOWED_TYPES.keys.inspect}" unless type_class fields << name FieldBuilder.new(name, type_class).call(self) end |
#fields ⇒ Array<Symbol>
Returns fields defined on this class.
86 87 88 |
# File 'lib/conflow/redis/model.rb', line 86 def fields @fields ||= [] end |
#has_many(name, klass, field_name: "#{name.to_s.chop}_ids") ⇒ Object
Convienience method for defining relation-like accessor.
79 80 81 82 83 |
# File 'lib/conflow/redis/model.rb', line 79 def has_many(name, klass, field_name: "#{name.to_s.chop}_ids") field(field_name, :array) relations << name define_method(name) { send(field_name).map { |id| klass.new(id) } } end |
#inherited(subclass) ⇒ Object
Copies field and relations information
48 49 50 51 |
# File 'lib/conflow/redis/model.rb', line 48 def inherited(subclass) subclass.instance_variable_set("@fields", fields.dup) subclass.instance_variable_set("@relations", relations.dup) end |
#relations ⇒ Array<Symbol>
Returns relations defined on this class.
91 92 93 |
# File 'lib/conflow/redis/model.rb', line 91 def relations @relations ||= [] end |