Skip to content

Commit

Permalink
Added :versioned_columns options
Browse files Browse the repository at this point in the history
  • Loading branch information
thibaudgg committed Apr 3, 2009
1 parent 7b7d7b4 commit d86c363
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions lib/acts_as_versioned.rb
Expand Up @@ -170,17 +170,19 @@ def acts_as_versioned(options = {}, &extension)

cattr_accessor :versioned_class_name, :versioned_foreign_key, :versioned_table_name, :versioned_inheritance_column,
:version_column, :max_version_limit, :track_altered_attributes, :version_condition, :version_sequence_name, :non_versioned_columns,
:version_association_options, :version_if_changed
:version_association_options, :version_if_changed,
:versioned_columns_names

self.versioned_class_name = options[:class_name] || "Version"
self.versioned_foreign_key = options[:foreign_key] || self.to_s.foreign_key
self.versioned_table_name = options[:table_name] || "#{table_name_prefix}#{base_class.name.underscore.gsub(/\//, '_')}_versions#{table_name_suffix}"
self.versioned_table_name = options[:table_name] || "#{table_name_prefix}#{base_class.name.demodulize.underscore}_versions#{table_name_suffix}"
self.versioned_inheritance_column = options[:inheritance_column] || "versioned_#{inheritance_column}"
self.version_column = options[:version_column] || 'version'
self.version_sequence_name = options[:sequence_name]
self.max_version_limit = options[:limit].to_i
self.version_condition = options[:if] || true
self.non_versioned_columns = [self.primary_key, inheritance_column, self.version_column, 'lock_version', versioned_inheritance_column] + options[:non_versioned_columns].to_a.map(&:to_s)
self.non_versioned_columns = [self.primary_key, inheritance_column, self.version_column, 'lock_version', versioned_inheritance_column] + Array(options[:non_versioned_columns]).map(&:to_s)
self.versioned_columns_names = Array(options[:versioned_columns]).map(&:to_s)
self.version_association_options = {
:class_name => "#{self.to_s}::#{versioned_class_name}",
:foreign_key => versioned_foreign_key,
Expand Down Expand Up @@ -394,7 +396,7 @@ def next_version
module ClassMethods
# Returns an array of columns that are versioned. See non_versioned_columns
def versioned_columns
@versioned_columns ||= columns.select { |c| !non_versioned_columns.include?(c.name) }
@versioned_columns ||= columns.select { |c| (versioned_columns_names.empty? || versioned_columns_names.include?(c.name)) && !non_versioned_columns.include?(c.name) }
end

# Returns an instance of the dynamic versioned model
Expand Down Expand Up @@ -484,4 +486,4 @@ def without_locking(&block)
end
end

ActiveRecord::Base.send :include, ActiveRecord::Acts::Versioned
ActiveRecord::Base.send :include, ActiveRecord::Acts::Versioned

1 comment on commit d86c363

@drothlis
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't it determine which columns to version, based on the #{model}_versions table?

The documentation for ActiveRecord::Acts::Versioned::ClassMethods#acts_as_versioned says:

The _versions table should contain all the fields you want versioned

but this is clearly not the case (with version 0.5.2). I get

undefined method `attribute='

for any attributes missing in the _versions table.

Please sign in to comment.