Module: ModelPack::ClassMethods
- Defined in:
- lib/model_pack/class_methods.rb
Instance Method Summary collapse
- #array(name, default: nil, serialize: nil, writer: nil, class_name: nil) ⇒ Object
- #attribute(name, writer: lambda { |v| v }, default: nil, as: nil, serialize: nil, predicate: nil) ⇒ Object
- #attribute_reader(name, default: nil, as: nil, serialize: nil, predicate: nil) ⇒ Object
- #attribute_writer(name, writer: lambda { |v| v }) ⇒ Object
- #dictionary(name, class_name: nil, default: nil, serialize: nil, writer: nil) ⇒ Object
- #object(name, class_name: nil, default: nil, as: nil, serialize: nil, predicate: nil) ⇒ Object
Instance Method Details
#array(name, default: nil, serialize: nil, writer: nil, class_name: nil) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/model_pack/class_methods.rb', line 45 def array(name, default: nil, serialize: nil, writer: nil, class_name: nil) attribute(name, default: default, serialize: serialize, as: Array, writer: writer || lambda { |array| array.is_a?(Array) ? (array.collect { |v| v.is_a?(Hash) && class_name ? class_name.new(v) : v }) : [] }) end |
#attribute(name, writer: lambda { |v| v }, default: nil, as: nil, serialize: nil, predicate: nil) ⇒ Object
4 5 6 7 8 |
# File 'lib/model_pack/class_methods.rb', line 4 def attribute(name, writer: lambda { |v| v }, default: nil, as: nil, serialize: nil, predicate: nil) register_attribute(name) attribute_reader(name, default: default, as: as, serialize: serialize, predicate: predicate) attribute_writer(name, writer: writer) end |
#attribute_reader(name, default: nil, as: nil, serialize: nil, predicate: nil) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/model_pack/class_methods.rb', line 16 def attribute_reader(name, default: nil, as: nil, serialize: nil, predicate: nil) dv = default.dup rescue default define_method name do instance_variable_defined?("@#{name}") ? instance_variable_get("@#{name}") : instance_variable_set("@#{name}", (as ? as.new : (dv.is_a?(Proc) ? dv.call : dv ))) end # define predicate method if required define_method "#{name}?" do value = (instance_variable_defined?("@#{name}") ? instance_variable_get("@#{name}") : instance_variable_set("@#{name}", (as ? as.new : (dv.is_a?(Proc) ? dv.call : dv )))) predicate.is_a?(Proc) ? predicate.call(value) : !!value # false for nil or false end if predicate define_method "#{name}_hash" do instance_exec(send(name), &serialize) end if serialize end |
#attribute_writer(name, writer: lambda { |v| v }) ⇒ Object
10 11 12 13 14 |
# File 'lib/model_pack/class_methods.rb', line 10 def attribute_writer(name, writer: lambda { |v| v }) define_method "#{name}=" do |value| instance_variable_set("@#{name}", instance_exec(value, &writer)) end end |
#dictionary(name, class_name: nil, default: nil, serialize: nil, writer: nil) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/model_pack/class_methods.rb', line 53 def dictionary(name, class_name: nil, default: nil, serialize: nil, writer: nil) attribute(name, default: default, serialize: serialize, writer: writer || lambda { |dictionary| Hash[dictionary.map { |k,v| [k, v.is_a?(Hash) && class_name ? class_name.new(v) : v]}] }, as: Hash) end |
#object(name, class_name: nil, default: nil, as: nil, serialize: nil, predicate: nil) ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/model_pack/class_methods.rb', line 36 def object(name, class_name: nil, default: nil, as: nil, serialize: nil, predicate: nil) attribute(name, default: default, serialize: serialize, predicate: predicate, as: as, writer: lambda { |v| v.is_a?(Hash) && class_name ? class_name.new(v) : v }) end |