Module: Bogo::Lazy::InstanceMethods
- Defined in:
- lib/bogo/lazy.rb
Overview
Instance methods for laziness
Instance Method Summary collapse
-
#attributes ⇒ Smash
Current data state.
-
#data ⇒ Smash
Argument hash.
-
#dirty ⇒ Smash
Updated data.
-
#dirty?(attr = nil) ⇒ TrueClass, FalseClass
Model is dirty or specific attribute is dirty.
- #inspect ⇒ String
-
#load_data(args = {}) ⇒ self
Create new instance.
- #to_s ⇒ String
-
#valid_state ⇒ self
Identifies valid state and automatically merges dirty attributes into data, clears dirty attributes.
Instance Method Details
#attributes ⇒ Smash
Returns current data state.
34 35 36 |
# File 'lib/bogo/lazy.rb', line 34 def attributes data.merge(dirty) end |
#data ⇒ Smash
Returns argument hash.
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/bogo/lazy.rb', line 13 def data unless(@data) @data = Smash.new self.class.attributes.each do |key, value| if(value.has_key?('default')) @data[key] = value['default'] end end end @data end |
#dirty ⇒ Smash
Returns updated data.
26 27 28 29 30 31 |
# File 'lib/bogo/lazy.rb', line 26 def dirty unless(@dirty) @dirty = Smash.new end @dirty end |
#dirty?(attr = nil) ⇒ TrueClass, FalseClass
Model is dirty or specific attribute is dirty
78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/bogo/lazy.rb', line 78 def dirty?(attr=nil) if(attr) dirty.has_key?(attr) else if(@_checksum) !dirty.empty? || @_checksum != Digest::SHA256.hexdigest(MultiJson.dump(data)) else true end end end |
#inspect ⇒ String
97 98 99 |
# File 'lib/bogo/lazy.rb', line 97 def inspect "<#{self.class.name}:#{object_id} [#{data.inspect}]>" end |
#load_data(args = {}) ⇒ self
Create new instance
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/bogo/lazy.rb', line 42 def load_data(args={}) args = args.to_smash @data = Smash.new self.class.attributes.each do |name, | val = args[name] if([:required] && !args.has_key?(name) && !.has_key?(:default)) raise ArgumentError.new("Missing required option: `#{name}`") end if(val.nil? && !args.has_key?(name) && [:default]) if([:default]) val = [:default].respond_to?(:call) ? [:default].call : [:default] end end if(args.has_key?(name) || val) self.send("#{name}=", val) end end self end |
#to_s ⇒ String
92 93 94 |
# File 'lib/bogo/lazy.rb', line 92 def to_s "<#{self.class.name}:#{object_id}>" end |
#valid_state ⇒ self
Identifies valid state and automatically merges dirty attributes into data, clears dirty attributes
67 68 69 70 71 72 |
# File 'lib/bogo/lazy.rb', line 67 def valid_state data.merge!(dirty) dirty.clear @_checksum = Digest::SHA256.hexdigest(MultiJson.dump(data)) self end |