Sha256: f6d21ff03cae9cee3a0fadabe7df2674f24f681e6d169012428161ea1b1c2eab

Contents?: true

Size: 785 Bytes

Versions: 1

Compression:

Stored size: 785 Bytes

Contents

class ChangeTracker < Version

  attr_reader :version
  def initialize(version)
    @version = version
  end

  def get_changes
    changed_attributes.merge(marked_for_removal).merge(changed_children)
  end

  private
  def changed_attributes
    version_attributes.each_with_object({}) do |v, h|
      h[v.name] = { new_value: v.new_value, old_value: v.old_value }
    end
  end

  def marked_for_removal
    version.marked_for_removal? ? { marked_for_removal: true } : {}
  end

  def changed_children
    version_children.each_with_object({}) do |v, h|
      if h[v.association_name].present?
        h[v.association_name] += [{ id: v.versionable_id}.merge(v.changes)]
      else
        h[v.association_name] = [{ id: v.versionable_id}.merge(v.changes)]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
controlled_versioning-0.8.0 lib/controlled_versioning/change_tracker.rb