module ActiveVersioning::Model::Versioned

Public Class Methods

included(base) click to toggle source
# File lib/active_versioning/model/versioned.rb, line 4
def self.included(base)
  base.class_eval do
    has_many :versions, -> { newest_first }, as: :versionable, dependent: :destroy

    after_create :create_version!

    attr_accessor :version_author
  end
end

Public Instance Methods

create_draft_from_version(version_id) click to toggle source
# File lib/active_versioning/model/versioned.rb, line 47
def create_draft_from_version(version_id)
  version_manager.create_draft_from_version(version_id) and current_draft(true)
end
current_draft(force_reload = false) click to toggle source
# File lib/active_versioning/model/versioned.rb, line 22
def current_draft(force_reload = false)
  unless persisted?
    raise ActiveVersioning::Errors::RecordNotPersisted.new("#{self} must be persisted to create a draft version")
  end

  @current_draft = nil if force_reload

  @current_draft ||= VersionProxy.new(versions.draft.first_or_create(
    object: versioned_attributes,
    event:  'draft'
  ))
end
current_draft?() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 35
def current_draft?
  versions.draft.present?
end
destroy_draft() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 39
def destroy_draft
  versions.draft.destroy_all
end
live?() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 14
def live?
  true
end
version?() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 18
def version?
  false
end
version_manager() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 43
def version_manager
  @version_manager ||= VersionManager.new(self)
end
versioned_attribute_names() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 57
def versioned_attribute_names
  attribute_names - VersionManager::BLACKLISTED_ATTRIBUTES
end
versioned_attributes() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 51
def versioned_attributes
  versioned_attribute_names.reduce(Hash.new) do |attrs, name|
    attrs.merge(name => send(name))
  end
end

Private Instance Methods

create_version!() click to toggle source
# File lib/active_versioning/model/versioned.rb, line 63
def create_version!
  versions.create!(
    event:        ActiveVersioning::Events::CREATE,
    committer:    version_author,
    committed_at: Time.current,
    object:       versioned_attributes
  )
end