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.
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/nrser/meta/props.rb', line 219 def from_data data values = {} props = self.props data.each { |data_key, data_value| prop_key = case data_key when Symbol data_key when String data_key.to_sym end if prop_key && prop = props[prop_key] values[prop_key] = prop.value_from_data data_value end } self.new values end |
#prop(name, **opts) ⇒ NRSER::Meta::Props::Prop
Define a property.
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/nrser/meta/props.rb', line 177 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 " Prop \#{ name.inspect } already set for \#{ self }:\n \#{ ref[name].inspect }\n END\n end\n \n prop = Prop.new self, name, **opts\n ref[name] = prop\n \n unless prop.source?\n class_eval do\n define_method(name) do\n prop.get self\n end\n \n # protected\n # define_method(\"\#{ name }=\") do |value|\n # prop.set self, value\n # end\n end\n end\n \n prop\nend\n" |
#props(only_own: false, only_primary: false) ⇒ Hash{ Symbol => NRSER::Meta::Props::Prop }
Get a map of property names to property instances.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/nrser/meta/props.rb', line 142 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 |