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