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.
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/nrser/meta/props.rb', line 218 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.
176 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 |
# File 'lib/nrser/meta/props.rb', line 176 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.
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/nrser/meta/props.rb', line 141 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 |