Sha256: bf086cfedbe54a234969980cd84d332f22fc3dc65207043afcb16d0c8c601e7a

Contents?: true

Size: 982 Bytes

Versions: 2

Compression:

Stored size: 982 Bytes

Contents

class InitialVersionBuilder < Revision

  attr_reader :versionable, :version
  def initialize(versionable)
    @versionable = versionable
    @version = build_version_type
    build_initial_version
  end

  private
  def build_version_type
    if is_a_nested_association?
      parent.initial_version.version_children.build(versionable: versionable)
    else
      versionable.versions.build(initial: true)
    end
  end

  def build_initial_version
    build_version_attributes
    version.save
  end

  def build_version_attributes
    versionable_attributes.each do |attr|
      attr = AttributeEncapsulator.new(attr)
      build_attribute(attr)
    end
  end

  def build_attribute(attr)
    version_attributes.build(
      name: attr.key,
      new_value: attr.value)
  end

  def is_a_nested_association?
    versionable.is_a_nested_association?
  end

  def nested_within
    versionable.nested_within
  end

  def parent
    versionable.public_send(nested_within)
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
controlled_versioning-0.6.1 lib/controlled_versioning/initial_version_builder.rb
controlled_versioning-0.6 lib/controlled_versioning/initial_version_builder.rb