Module: NRSER::Meta::Props::ClassMethods
- Defined in:
- lib/nrser/meta/props.rb
Overview
Methods added to the including class via ‘extend`.
Instance Method Summary collapse
-
#from_data(data) ⇒ self
Instantiate from a data hash.
-
#prop(name, **opts) ⇒ NRSER::Meta::Props::Prop
Define a property.
-
#props(only_own: false, only_primary: false) ⇒ Hash{ Symbol => NRSER::Meta::Props::Prop }
Get a map of property names to property instances.
Instance Method Details
#from_data(data) ⇒ self
TODO:
This needs to be extended to handle prop’d classes nested in arrays and hashes… but for the moment, it is what it is.
Instantiate from a data hash.
178 179 180 |
# File 'lib/nrser/meta/props.rb', line 178 def from_data data self.new data.symbolize_keys end |
#prop(name, **opts) ⇒ NRSER::Meta::Props::Prop
Define a property.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/nrser/meta/props.rb', line 136 def prop name, **opts ref = NRSER::Meta::Props.get_props_ref self t.sym.check name if ref.key? name raise ArgumentError.new NRSER.squish <<-END Prop #{ name.inspect } already set for #{ self }: #{ ref[name].inspect } END end prop = Prop.new self, name, **opts ref[name] = prop unless prop.source? class_eval do define_method(name) do prop.get self end # protected # define_method("#{ name }=") do |value| # prop.set self, value # end end end prop end |
#props(only_own: false, only_primary: false) ⇒ Hash{ Symbol => NRSER::Meta::Props::Prop }
Get a map of property names to property instances.
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/nrser/meta/props.rb', line 101 def props only_own: false, only_primary: false result = if !only_own && superclass.respond_to?(:props) superclass.props only_own: only_own, only_primary: only_primary else {} end own_props = NRSER::Meta::Props.get_props_ref self if only_primary own_props.each {|name, prop| if prop.primary? result[name] = prop end } else result.merge! own_props end result end |