Class: Rubernate::Peer
- Inherits:
-
Hash
- Object
- Hash
- Rubernate::Peer
- Defined in:
- lib/rubernate/peer.rb
Overview
Represent objects peer - properties holder.
Defined Under Namespace
Modules: Container
Instance Method Summary collapse
- #[]=(key, value) ⇒ Object
-
#change_track ⇒ Object
Retrus change track of attribute modifications Hash => :inserted, :.
-
#dirty=(f_dirty) ⇒ Object
Sets peers dirty flag to specified value.
-
#dirty? {|name, old_value, value| ... } ⇒ Boolean
If peers dirty flag set to true returns it immediately else iterate over all properties and returns true if dirty property apperas.
- #old_set ⇒ Object
- #set(key, value) {|key, old_value, value| ... } ⇒ Object
Instance Method Details
#[]=(key, value) ⇒ Object
50 51 52 |
# File 'lib/rubernate/peer.rb', line 50 def []= key, value set key, value end |
#change_track ⇒ Object
Retrus change track of attribute modifications
Hash {p_name => :inserted, :}
8 9 10 11 12 13 14 15 16 |
# File 'lib/rubernate/peer.rb', line 8 def change_track @change_track ||= Hash.new each do |name, value| if value.is_a? Container and not @change_track.has_key? name @change_track[name] = :modified if value.recall end end @change_track end |
#dirty=(f_dirty) ⇒ Object
Sets peers dirty flag to specified value. And resets dirty flag for all properites which stored in this peer.
20 21 22 23 24 25 26 |
# File 'lib/rubernate/peer.rb', line 20 def dirty= f_dirty @dirty = f_dirty @change_track = nil unless f_dirty for value in values value.memorize! if value.is_a? Container end end |
#dirty? {|name, old_value, value| ... } ⇒ Boolean
If peers dirty flag set to true returns it immediately else iterate over all properties and returns true if dirty property apperas. on_modify
callback invoked if dirty is true
.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/rubernate/peer.rb', line 31 def dirty? return true if @dirty f_dirty, name, value, old_value = false each do |name, value| if value.is_a? Container old_value = value.recall if old_value f_dirty = dirty = true update_track name, :modified break end end end yield name, old_value, value if block_given? and f_dirty f_dirty end |
#old_set ⇒ Object
48 |
# File 'lib/rubernate/peer.rb', line 48 alias old_set []= |
#set(key, value) {|key, old_value, value| ... } ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/rubernate/peer.rb', line 54 def set key, value, &on_change old_value = self[key] return if old_value == value @dirty = true if value.is_a? Array or value.is_a? Hash value.extend Container end if value old_set key, value else delete key end update_track key, change_type(old_value, value) yield key, old_value, value if block_given? end |