Module: ActiveRecord::Acts::Versioned::ActMethods::ClassMethods
- Defined in:
- lib/plugins/acts_as_versioned/lib/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 = nil) ⇒ 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
489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 489 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, :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 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
524 525 526 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 524 def drop_versioned_table self.connection.drop_table versioned_table_name end |
#find_version(id, version = nil) ⇒ Object
Finds a specific version of a specific row of this model
457 458 459 460 461 462 463 464 465 466 467 468 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 457 def find_version(id, version = nil) return find(id) unless version conditions = ["#{versioned_foreign_key} = ? AND version = ?", id, version] = { :conditions => conditions, :limit => 1 } if result = find_versions(id, ).first result else raise RecordNotFound, "Couldn't find #{name} with ID=#{id} and VERSION=#{version}" end end |
#find_versions(id, options = {}) ⇒ Object
Finds versions of a specific model. Takes an options hash like
find
471 472 473 474 475 476 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 471 def find_versions(id, = {}) versioned_class. where([:conditions] || {versioned_foreign_key => id}). limit([:limit]). order('version') end |
#versioned_class ⇒ Object
Returns an instance of the dynamic versioned model
484 485 486 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 484 def versioned_class const_get versioned_class_name end |
#versioned_columns ⇒ Object
Returns an array of columns that are versioned. See non_versioned_columns
479 480 481 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 479 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
556 557 558 559 560 561 562 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 556 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
534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 |
# File 'lib/plugins/acts_as_versioned/lib/acts_as_versioned.rb', line 534 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 |