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/acts_as_versioned/lib/acts_as_versioned.rb, line 415 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/acts_as_versioned/lib/acts_as_versioned.rb, line 449 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/acts_as_versioned/lib/acts_as_versioned.rb, line 410 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/acts_as_versioned/lib/acts_as_versioned.rb, line 405 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/acts_as_versioned/lib/acts_as_versioned.rb, line 481 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/acts_as_versioned/lib/acts_as_versioned.rb, line 459 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