module VersionedRecord
Constants
- VERSION
Public Class Methods
included(model_class)
click to toggle source
# File lib/versioned_record.rb, line 17 def self.included(model_class) model_class.primary_keys = :id, :version model_class.after_save :ensure_version_deprecation!, on: :create model_class.extend ClassMethods model_class.include InstanceMethods end
Public Instance Methods
deprecate_old_versions_after_create?()
click to toggle source
# File lib/versioned_record.rb, line 119 def deprecate_old_versions_after_create? @deprecate_old_versions_after_create end
ensure_version_deprecation!()
click to toggle source
# File lib/versioned_record.rb, line 123 def ensure_version_deprecation! if deprecate_old_versions_after_create? deprecate_old_versions(self) end end
preserve_has_one_associations_to(new_version)
click to toggle source
This is required because a new version which has not been persisted to the database breaks the normal ActiveRecord
paradigm. Because normally when a record has not yet been persisted it can have no persisted has_one associations because there is no foriegn key. In our case we have a foreign key because it was determined from the previous version.
This doesn't apply to composite has_one associations because they will use a different foreign key to the parent version.
# File lib/versioned_record.rb, line 139 def preserve_has_one_associations_to(new_version) # Preserve simple has_one reflections self.class.reflections.select { |_, reflection| reflection.macro == :has_one }.each do |key, reflection| if !reflection.foreign_key.kind_of?(Array) new_version.send("#{key}=", self.send(key)) end end end