Module: Figure::Store
Instance Method Summary collapse
- #[]=(k, v) ⇒ Object
- #complete_defaults ⇒ Object
- #default(k = nil) ⇒ Object
- #figures ⇒ Object
- #has_key?(key) ⇒ Boolean
- #merge!(h) ⇒ Object
Instance Method Details
#[]=(k, v) ⇒ Object
5 6 7 8 |
# File 'lib/figure/store.rb', line 5 def []=(k, v) self.class.send :define_method, k, -> { custom_fetch k } unless respond_to? k super end |
#complete_defaults ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/figure/store.rb', line 38 def complete_defaults if default_store && default_store.can_forward? && (default_store.forward! rescue false) default_store.forward!.figures.reject { |l| respond_to?(l) }.each do |l| self.class.send :define_method, l, -> { default_store.forward![l] } end end end |
#default(k = nil) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/figure/store.rb', line 10 def default(k=nil) if k && !default_store.has_key?(k) && can_forward? self[:default] elsif default_store && k default_store[k] elsif has_key? :default self[:default] end end |
#figures ⇒ Object
50 51 52 |
# File 'lib/figure/store.rb', line 50 def figures keys.tap { |f| f.concat default_store.figures if default_store }.uniq end |
#has_key?(key) ⇒ Boolean
46 47 48 |
# File 'lib/figure/store.rb', line 46 def has_key?(key) [key.to_s, key.to_sym].detect { |k| super(k) } end |
#merge!(h) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/figure/store.rb', line 22 def merge!(h) h.each do |k, v| self[k] = if v.is_a? Hash new_store k, v, self.class elsif v.is_a? Array v.map do |i| i.is_a?(Hash) ? new_store(k, i, self.class) : i end else v end end end |