Method: Jinx::Inversible#set_inversible_noncollection_attribute
- Defined in:
- lib/jinx/resource/inversible.rb
#set_inversible_noncollection_attribute(newval, accessors, inverse_writer) ⇒ Object
Sets a non-collection attribute value in a way which enforces inverse integrity.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/jinx/resource/inversible.rb', line 24 def set_inversible_noncollection_attribute(newval, accessors, inverse_writer) rdr, wtr = accessors # the previous value oldval = send(rdr) # bail if no change return newval if newval.equal?(oldval) # clear the previous inverse logger.debug { "Moving #{qp} from #{oldval.qp} to #{newval.qp}..." } if oldval and newval if oldval then clr_wtr = self.class === oldval && oldval.send(rdr).equal?(self) ? wtr : inverse_writer oldval.send(clr_wtr, nil) end # call the writer send(wtr, newval) # call the inverse writer on self if newval then newval.send(inverse_writer, self) logger.debug { "Moved #{qp} from #{oldval.qp} to #{newval.qp}." } if oldval end newval end |