Module: ActiveRecord::Acts::Versioned::ActMethods::ClassMethods
- Defined in:
- lib/junebug/ext/acts_as_versioned.rb
Instance Method Summary collapse
-
#create_versioned_table(create_table_options = {}) ⇒ Object
Rake migration task to create the versioned table using options passed to acts_as_versioned.
-
#drop_versioned_table ⇒ Object
Rake migration task to drop the versioned table.
-
#find_version(id, version) ⇒ Object
Finds a specific version of a specific row of this model.
-
#find_versions(id, options = {}) ⇒ Object
Finds versions of a specific model.
-
#versioned_class ⇒ Object
Returns an instance of the dynamic versioned model.
-
#versioned_columns ⇒ Object
Returns an array of columns that are versioned.
-
#without_locking(&block) ⇒ Object
Turns off optimistic locking for the duration of the block.
-
#without_revision(&block) ⇒ Object
Executes the block with the versioning callbacks disabled.
Instance Method Details
#create_versioned_table(create_table_options = {}) ⇒ Object
Rake migration task to create the versioned table using options passed to acts_as_versioned
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 434 def create_versioned_table( = {}) # create version column in main table if it does not exist if !self.content_columns.find { |c| %w(version lock_version).include? c.name } self.connection.add_column table_name, :version, :integer end self.connection.create_table(versioned_table_name, ) do |t| t.column versioned_foreign_key, :integer t.column :version, :integer end updated_col = nil self.versioned_columns.each do |col| updated_col = col if !updated_col && %(updated_at updated_on).include?(col.name) self.connection.add_column versioned_table_name, col.name, col.type, :limit => col.limit, :default => col.default 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 end if updated_col.nil? self.connection.add_column versioned_table_name, :updated_at, :timestamp end end |
#drop_versioned_table ⇒ Object
Rake migration task to drop the versioned table
465 466 467 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 465 def drop_versioned_table self.connection.drop_table versioned_table_name end |
#find_version(id, version) ⇒ Object
Finds a specific version of a specific row of this model
410 411 412 413 414 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 410 def find_version(id, version) find_versions(id, :conditions => ["#{versioned_foreign_key} = ? AND version = ?", id, version], :limit => 1).first end |
#find_versions(id, options = {}) ⇒ Object
Finds versions of a specific model. Takes an options hash like find
417 418 419 420 421 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 417 def find_versions(id, = {}) versioned_class.find :all, { :conditions => ["#{versioned_foreign_key} = ?", id], :order => 'version' }.merge() end |
#versioned_class ⇒ Object
Returns an instance of the dynamic versioned model
429 430 431 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 429 def versioned_class const_get versioned_class_name end |
#versioned_columns ⇒ Object
Returns an array of columns that are versioned. See non_versioned_columns
424 425 426 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 424 def versioned_columns self.columns.select { |c| !non_versioned_columns.include?(c.name) } end |
#without_locking(&block) ⇒ Object
Turns off optimistic locking for the duration of the block
Foo.without_locking do
@foo.save
end
496 497 498 499 500 501 502 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 496 def without_locking(&block) current = ActiveRecord::Base.lock_optimistically ActiveRecord::Base.lock_optimistically = false if current result = block.call ActiveRecord::Base.lock_optimistically = true if current result end |
#without_revision(&block) ⇒ Object
Executes the block with the versioning callbacks disabled.
Foo.without_revision do
@foo.save
end
475 476 477 478 479 480 481 482 483 484 485 486 487 488 |
# File 'lib/junebug/ext/acts_as_versioned.rb', line 475 def without_revision(&block) class_eval do CALLBACKS.each do |attr_name| alias_method attr_name, :empty_callback end end result = block.call class_eval do CALLBACKS.each do |attr_name| alias_method attr_name, "orig_#{attr_name}".to_sym end end result end |