Sha256: 70aaf5291c6dc94b324c189b7778d7288a46f1be5fe3c71aa790f16feea261e2

Contents?: true

Size: 1.18 KB

Versions: 13

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

13 entries across 13 versions & 1 rubygems

Version Path
disposable-0.1.15 lib/disposable/twin/changed.rb
disposable-0.1.14 lib/disposable/twin/changed.rb
disposable-0.1.13 lib/disposable/twin/changed.rb
disposable-0.1.12 lib/disposable/twin/changed.rb
disposable-0.1.11 lib/disposable/twin/changed.rb
disposable-0.1.9 lib/disposable/twin/changed.rb
disposable-0.1.8 lib/disposable/twin/changed.rb
disposable-0.1.7 lib/disposable/twin/changed.rb
disposable-0.1.6 lib/disposable/twin/changed.rb
disposable-0.1.5 lib/disposable/twin/changed.rb
disposable-0.1.4 lib/disposable/twin/changed.rb
disposable-0.1.3 lib/disposable/twin/changed.rb
disposable-0.1.2 lib/disposable/twin/changed.rb