module ActiveRecord::Acts::Versioned::Behaviors::ClassMethods

Public Instance Methods

create_versioned_table(create_table_options = {}) click to toggle source

Rake migration task to create the versioned table using options passed to acts_as_versioned

# File lib/erp_tech_svcs/extensions/active_record/acts_as_versioned.rb, line 412
def create_versioned_table(create_table_options = {})
  # create version column in main table if it does not exist
  if !self.content_columns.find { |c| [version_column.to_s, 'lock_version'].include? c.name }
    self.connection.add_column table_name, version_column, :integer
    self.reset_column_information
  end

  return if connection.table_exists?(versioned_table_name)

  self.connection.create_table(versioned_table_name, create_table_options) do |t|
    t.column versioned_foreign_key, :integer
    t.column version_column, :integer
  end

  self.versioned_columns.each do |col|
    self.connection.add_column versioned_table_name, col.name, col.type,
                               :limit     => col.limit,
                               :default   => col.default,
                               :scale     => col.scale,
                               :precision => col.precision
  end

  if type_col = self.columns_hash[inheritance_column]
    self.connection.add_column versioned_table_name, versioned_inheritance_column, type_col.type,
                               :limit     => type_col.limit,
                               :default   => type_col.default,
                               :scale     => type_col.scale,
                               :precision => type_col.precision
  end

  self.connection.add_index versioned_table_name, versioned_foreign_key
end
drop_versioned_table() click to toggle source

Rake migration task to drop the versioned table

# File lib/erp_tech_svcs/extensions/active_record/acts_as_versioned.rb, line 446
def drop_versioned_table
  self.connection.drop_table versioned_table_name
end
versioned_class() click to toggle source

Returns an instance of the dynamic versioned model

# File lib/erp_tech_svcs/extensions/active_record/acts_as_versioned.rb, line 407
def versioned_class
  const_get versioned_class_name
end
versioned_columns() click to toggle source

Returns an array of columns that are versioned. See non_versioned_columns

# File lib/erp_tech_svcs/extensions/active_record/acts_as_versioned.rb, line 402
def versioned_columns
  @versioned_columns ||= columns.select { |c| !non_versioned_columns.include?(c.name) }
end
without_locking(&block) click to toggle source

Turns off optimistic locking for the duration of the block

Foo.without_locking do
  @foo.save
end
# File lib/erp_tech_svcs/extensions/active_record/acts_as_versioned.rb, line 478
def without_locking(&block)
  current = ActiveRecord::Base.lock_optimistically
  ActiveRecord::Base.lock_optimistically = false if current
  begin
    block.call
  ensure
    ActiveRecord::Base.lock_optimistically = true if current
  end
end
without_revision(&block) click to toggle source

Executes the block with the versioning callbacks disabled.

Foo.without_revision do
  @foo.save
end
# File lib/erp_tech_svcs/extensions/active_record/acts_as_versioned.rb, line 456
def without_revision(&block)
  class_eval do
    CALLBACKS.each do |attr_name|
      alias_method "orig_#{attr_name}".to_sym, attr_name
      alias_method attr_name, :empty_callback
    end
  end
  block.call
ensure
  class_eval do
    CALLBACKS.each do |attr_name|
      alias_method attr_name, "orig_#{attr_name}".to_sym
    end
  end
end