Sha256: 7cec3c5b502ad75edb750f1f934215d7795ea3beedb5382199f3ee8336c00bbb

Contents?: true

Size: 1.18 KB

Versions: 25

Compression:

Stored size: 1.18 KB

Contents

module Disposable::Twin::Changed
  class Changes < Hash
    def changed?(name=nil)
      return true if name.nil? and values.find { |val| val == true } # TODO: this could be speed-improved, of course.

      !! self[name.to_s]
    end
  end


  def changed?(*args) # not recommended for external use?
    changed.changed?(*args)
  end

# FIXME: can we make #changed the only public concept? so we don't need to find twice?

  # this is usually called only once in Sync::SkipUnchanged, per twin.
  def changed
    _find_changed_twins!(@_changes)

    @_changes
  end

private
  def initialize(model, *args)
    super         # Setup#initialize.
    @_changes = Changes.new # override changed from initialize.
  end

  def _changed
    @_changes ||= Changes.new # FIXME: why do we need to re-initialize here?
  end

  def write_property(name, value, dfn)
    old_value = field_read(name)

    super.tap do
      _changed[name.to_s] = old_value != value
    end
  end

  def _find_changed_twins!(changes) # FIXME: this will change soon. don't touch.
    schema.each(twin: true) do |dfn|
      next unless twin = send(dfn.getter)
      next unless twin.changed?

      changes[dfn[:name]] = true
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
disposable-0.6.3 lib/disposable/twin/changed.rb
disposable-0.6.2 lib/disposable/twin/changed.rb
disposable-0.6.1 lib/disposable/twin/changed.rb
disposable-0.6.0 lib/disposable/twin/changed.rb
disposable-0.5.0 lib/disposable/twin/changed.rb
disposable-0.4.7 lib/disposable/twin/changed.rb
disposable-0.4.6 lib/disposable/twin/changed.rb
disposable-0.4.5 lib/disposable/twin/changed.rb
disposable-0.4.4 lib/disposable/twin/changed.rb
disposable-0.4.3 lib/disposable/twin/changed.rb
disposable-0.4.2 lib/disposable/twin/changed.rb
disposable-0.4.1 lib/disposable/twin/changed.rb
disposable-0.4.0 lib/disposable/twin/changed.rb
disposable-0.3.2 lib/disposable/twin/changed.rb
disposable-0.3.1 lib/disposable/twin/changed.rb
disposable-0.3.0 lib/disposable/twin/changed.rb
disposable-0.2.6 lib/disposable/twin/changed.rb
disposable-0.2.5 lib/disposable/twin/changed.rb
disposable-0.2.4 lib/disposable/twin/changed.rb
disposable-0.2.3 lib/disposable/twin/changed.rb