versioned_record 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +20 -7
- data/lib/versioned_record/active_record_versioning.rb +13 -0
- data/lib/versioned_record/attribute_builder.rb +1 -1
- data/lib/versioned_record/attribute_methods/write.rb +18 -0
- data/lib/versioned_record/class_methods.rb +4 -0
- data/lib/versioned_record/composite_predicates.rb +22 -1
- data/lib/versioned_record/version.rb +1 -1
- data/lib/versioned_record.rb +12 -3
- data/spec/composite_belongs_to.rb +31 -0
- data/spec/composite_onesided_habtm_spec.rb +15 -0
- data/spec/has_one_through_spec.rb +65 -0
- data/spec/simple_belongs_to_spec.rb +31 -0
- data/spec/simple_onesided_habtm_spec.rb +15 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/comment.rb +3 -0
- data/spec/support/company.rb +3 -0
- data/spec/support/database.rb +42 -0
- data/spec/support/installation.rb +4 -0
- data/spec/support/office.rb +4 -0
- data/spec/support/package.rb +6 -0
- data/spec/support/sale.rb +7 -0
- data/spec/support/tag.rb +3 -0
- data/spec/support/versioned_product.rb +27 -0
- data/spec/versions_spec.rb +22 -8
- data/versioned_record.gemspec +1 -1
- metadata +30 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 485621958b932f0a1c13be6a89eeb6b915434363
|
4
|
+
data.tar.gz: c5ffe378f6cb1d2685a4fa8db6e65028c3baf157
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fea26e33efb1a2f4dd5f458faa26f6b74dfb19aebe1288119c4a1a90f84d2635c8d276675d82682ec19429d9958c52a6ed2637959cd89c8fb8172a8bbef29ae5
|
7
|
+
data.tar.gz: c4d33837fd8d60858131fdecda9268a9911f565eb86adf8d7455cfc5aeb0a1bb81731c8fefdff55c67be9fb134f05f842786581f482f01cc0882e3cc9ef7dc4d
|
data/README.md
CHANGED
@@ -72,21 +72,33 @@ Also, the `is_current_version` flag is unset for the old version and set for the
|
|
72
72
|
|
73
73
|
## Associations
|
74
74
|
|
75
|
-
###
|
75
|
+
### Simple Belongs Too
|
76
76
|
|
77
|
-
|
77
|
+
`belongs_to` A versioned model, but references the latest version (general case)
|
78
78
|
|
79
|
-
|
79
|
+
A simple `belongs_to` will work as normal but will always refer to the latest version of its parent.
|
80
80
|
|
81
|
-
|
81
|
+
### Composite Belongs To
|
82
|
+
|
83
|
+
`belongs_to` A versioned model but references a specific version
|
84
|
+
|
85
|
+
`belongs_to` must specify the `foreign_key` and primary key settings. You should set autosave to false on the `belongs_to` for these types
|
86
|
+
of associations.
|
82
87
|
|
83
88
|
class Contract < ActiveRecord::Base
|
84
89
|
include VersionedRecord
|
85
|
-
has_many :apprentices,
|
90
|
+
has_many :apprentices, {
|
91
|
+
foreign_key: [:contract_id, :contract_version],
|
92
|
+
primary_key: [:id, :version ]
|
93
|
+
}
|
86
94
|
end
|
87
95
|
|
88
96
|
class Apprentice < ActiveRecord::Base
|
89
|
-
belongs_to :contract,
|
97
|
+
belongs_to :contract, {
|
98
|
+
foreign_key: [:contract_id, :contract_version],
|
99
|
+
primary_key: [ :id, version ],
|
100
|
+
autosave: false
|
101
|
+
}
|
90
102
|
end
|
91
103
|
|
92
104
|
### `belongs_to` a non-versioned model
|
@@ -105,7 +117,8 @@ Right now, only PostgreSQL has been tested. MySQL may or may not work but if you
|
|
105
117
|
## Limitations
|
106
118
|
|
107
119
|
* Does not currently work with ActiveRecord 4.1+
|
108
|
-
*
|
120
|
+
* Polymorphic belongs to does not work on versioned records
|
121
|
+
* HABTM where models on _both_ sides are versioned have not been tested
|
109
122
|
|
110
123
|
|
111
124
|
## Author
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module AttributeMethods
|
3
|
+
module Write
|
4
|
+
alias_method :write_attribute_original, :write_attribute
|
5
|
+
|
6
|
+
def write_attribute(attr_name, value)
|
7
|
+
#byebug if attr_name == 'contract_id' && Apprenticeship === self
|
8
|
+
# We only have a single value to set, but an array was provided
|
9
|
+
if !attr_name.kind_of?(Array) && value.kind_of?(Array)
|
10
|
+
# Use just the ID and ignore the version
|
11
|
+
write_attribute_original(attr_name, value[0])
|
12
|
+
else
|
13
|
+
write_attribute_original(attr_name, value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -30,7 +30,28 @@ module VersionedRecord
|
|
30
30
|
association_fields = Array(association_key).map { |key| association_table[key] }
|
31
31
|
|
32
32
|
if fields.size == 1
|
33
|
-
eq_predicates = [ association_fields[0].eq(fields[0])
|
33
|
+
eq_predicates = [ association_fields[0].eq(fields[0]) ]
|
34
|
+
case association.reflection.macro
|
35
|
+
when :belongs_to
|
36
|
+
# We don't handle Polymorphic associations at this stage
|
37
|
+
if !association.options[:polymorphic]
|
38
|
+
if association.reflection.klass.versioned?
|
39
|
+
eq_predicates << association_table[:is_current_version].eq(true)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
when :has_and_belongs_to_many
|
43
|
+
if association.reflection.klass.versioned?
|
44
|
+
if association.reflection.klass.table_name == association_table.name
|
45
|
+
eq_predicates << association_table[:is_current_version].eq(true)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
when :has_many, :has_one
|
49
|
+
if association.reflection.klass.versioned?
|
50
|
+
if association.reflection.klass.table_name == association_table.name
|
51
|
+
eq_predicates << association_table[:is_current_version].eq(true)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
34
55
|
cpk_and_predicate(eq_predicates)
|
35
56
|
else
|
36
57
|
super
|
data/lib/versioned_record.rb
CHANGED
@@ -6,8 +6,10 @@ require 'composite_primary_keys'
|
|
6
6
|
require 'versioned_record/attribute_builder'
|
7
7
|
require 'versioned_record/class_methods'
|
8
8
|
require 'versioned_record/connection_adapters/postgresql'
|
9
|
+
require 'versioned_record/attribute_methods/write'
|
9
10
|
require 'versioned_record/version'
|
10
11
|
require 'versioned_record/composite_predicates'
|
12
|
+
require 'versioned_record/active_record_versioning'
|
11
13
|
|
12
14
|
ActiveRecord::Associations::AssociationScope.include(VersionedRecord::CompositePredicates)
|
13
15
|
|
@@ -15,14 +17,14 @@ module VersionedRecord
|
|
15
17
|
def self.included(model_class)
|
16
18
|
model_class.primary_keys = :id, :version
|
17
19
|
model_class.after_save :ensure_version_deprecation!, on: :create
|
18
|
-
model_class.send :alias_method, :id_with_version, :id
|
19
20
|
model_class.extend ClassMethods
|
20
21
|
model_class.include InstanceMethods
|
21
22
|
end
|
22
23
|
|
23
24
|
module InstanceMethods
|
24
|
-
|
25
|
-
|
25
|
+
# @return just the ID integer value (not the composite id, version key)
|
26
|
+
def _id
|
27
|
+
id[0]
|
26
28
|
end
|
27
29
|
|
28
30
|
# Create a new version of the existing record
|
@@ -82,6 +84,13 @@ module VersionedRecord
|
|
82
84
|
self.class.where(id: self.id)
|
83
85
|
end
|
84
86
|
|
87
|
+
# Retrieve the current version of an object
|
88
|
+
# (May be itself)
|
89
|
+
#
|
90
|
+
def current_version
|
91
|
+
versions.current_versions.first
|
92
|
+
end
|
93
|
+
|
85
94
|
# Ensure that old versions are deprecated when we save
|
86
95
|
# (only applies on create)
|
87
96
|
def deprecate_old_versions_after_create!
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sale do
|
4
|
+
let!(:versioned_product) { VersionedProduct.create(name: 'iPad', price: 100) }
|
5
|
+
let!(:versioned_product_revision) { versioned_product.create_version!(name: 'iPad 2') }
|
6
|
+
|
7
|
+
describe 'creation via association' do
|
8
|
+
subject(:sale) { versioned_product.sales.create(purchaser: 'Dan Draper') }
|
9
|
+
|
10
|
+
specify 'that the sale belongs to the specific version' do
|
11
|
+
expect(subject.versioned_product(true)).to eq(versioned_product)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'create directly' do
|
16
|
+
let!(:sale) { Sale.create(purchaser: 'Dan Draper', versioned_product: versioned_product_revision) }
|
17
|
+
|
18
|
+
specify 'that the comment belongs to the specific version' do
|
19
|
+
expect(sale.versioned_product(true)).to eq(versioned_product_revision)
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'create another version of the parent' do
|
23
|
+
let!(:vp3) { versioned_product_revision.create_version!(name: 'iPad 3') }
|
24
|
+
|
25
|
+
specify 'that the comment STILL belongs to the specific version' do
|
26
|
+
expect(sale.versioned_product(true)).to eq(versioned_product_revision)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Package do
|
4
|
+
let!(:versioned_product) { VersionedProduct.create(name: 'iPad', price: 100) }
|
5
|
+
let!(:versioned_product_revision) { versioned_product.create_version!(name: 'iPad 2') }
|
6
|
+
|
7
|
+
describe 'creation via association' do
|
8
|
+
subject(:package) { versioned_product.packages.create!(dimensions: '100x100') }
|
9
|
+
|
10
|
+
specify 'that the package belongs to the specific version' do
|
11
|
+
expect(subject.versioned_products(true).to_a).to eq([versioned_product])
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe VersionedProduct do
|
4
|
+
let!(:versioned_product) { VersionedProduct.create(name: 'iPad', price: 100) }
|
5
|
+
let!(:versioned_product_revision) { versioned_product.create_version!(name: 'iPad 2') }
|
6
|
+
|
7
|
+
# TODO: This maybe should go into a different spec
|
8
|
+
describe 'installation' do
|
9
|
+
describe 'creation via association' do
|
10
|
+
let!(:installation) { versioned_product.create_installation!(installed_by: 'Roger Moore') }
|
11
|
+
|
12
|
+
specify 'that the installation belongs to the latest version' do
|
13
|
+
expect(installation.versioned_product).to eq(versioned_product_revision)
|
14
|
+
end
|
15
|
+
|
16
|
+
specify 'that the latest version of the product has the installation set after reload' do
|
17
|
+
expect(versioned_product_revision.reload.installation).to eq(installation)
|
18
|
+
end
|
19
|
+
|
20
|
+
specify 'that the previous version of the product has the installation set after reload' do
|
21
|
+
expect(versioned_product.reload.installation).to eq(installation)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'direct creation' do
|
26
|
+
let(:installation) { Installation.new(installed_by: 'Sean Connery') }
|
27
|
+
subject { VersionedProduct.create(name: 'iPad', price: 100, installation: installation) }
|
28
|
+
|
29
|
+
specify 'that the installation is set and persisted' do
|
30
|
+
expect(subject.reload.installation).to eq(installation)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'simple test' do
|
35
|
+
let(:installation) { Installation.new(installed_by: 'Sean Connery') }
|
36
|
+
subject { Office.create(address: 'CQ Sydney', installation: installation) }
|
37
|
+
|
38
|
+
specify 'that the installation is set and persisted' do
|
39
|
+
expect(subject.reload.installation).to eq(installation)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'office' do
|
46
|
+
describe 'creation via association' do
|
47
|
+
let!(:office) { Office.create!(address: 'Circular Quay, Sydney') }
|
48
|
+
|
49
|
+
before { versioned_product.office = office }
|
50
|
+
|
51
|
+
specify "that the office's versioned product is the latest version" do
|
52
|
+
expect(office.reload.versioned_product).to eq(versioned_product_revision)
|
53
|
+
end
|
54
|
+
|
55
|
+
specify 'that the previous version of the product has the office set after reload' do
|
56
|
+
expect(versioned_product.reload.office).to eq(office)
|
57
|
+
end
|
58
|
+
|
59
|
+
specify 'that the latest version of the product has the office set after reload' do
|
60
|
+
expect(versioned_product_revision.reload.office).to eq(office)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Comment do
|
4
|
+
let!(:versioned_product) { VersionedProduct.create(name: 'iPad', price: 100) }
|
5
|
+
let!(:versioned_product_revision) { versioned_product.create_version!(name: 'iPad 2') }
|
6
|
+
|
7
|
+
describe 'creation via association' do
|
8
|
+
subject(:comment) { versioned_product.comments.create(content: 'Awesome') }
|
9
|
+
|
10
|
+
specify 'that the comment belongs to the latest version' do
|
11
|
+
expect(subject.versioned_product).to eq(versioned_product_revision)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'create directly' do
|
16
|
+
let!(:comment) { Comment.create(content: 'Awesome', versioned_product: versioned_product) }
|
17
|
+
|
18
|
+
specify 'that the comment belongs to the latest version' do
|
19
|
+
expect(comment.versioned_product(true)).to eq(versioned_product_revision)
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'create another version of the parent' do
|
23
|
+
let!(:vp3) { versioned_product_revision.create_version!(name: 'iPad 3') }
|
24
|
+
|
25
|
+
specify 'that the comment STILL belongs to the latest version' do
|
26
|
+
expect(comment.versioned_product(true)).to eq(vp3)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Tag do
|
4
|
+
let!(:versioned_product) { VersionedProduct.create(name: 'iPad', price: 100) }
|
5
|
+
let!(:versioned_product_revision) { versioned_product.create_version!(name: 'iPad 2') }
|
6
|
+
|
7
|
+
describe 'add a tag' do
|
8
|
+
let!(:tag_a) { versioned_product.tags.create(name: 'Electronics') }
|
9
|
+
let!(:tag_b) { versioned_product.tags.create(name: 'Consumer') }
|
10
|
+
|
11
|
+
specify { expect(versioned_product_revision).to have(2).tags }
|
12
|
+
specify { expect(tag_a.versioned_products.to_a).to eq([versioned_product_revision]) }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,6 +9,8 @@ require 'byebug'
|
|
9
9
|
|
10
10
|
Dir[("./spec/support/**/*.rb")].each {|f| require f}
|
11
11
|
|
12
|
+
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
13
|
+
|
12
14
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
13
15
|
RSpec.configure do |config|
|
14
16
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
data/spec/support/database.rb
CHANGED
@@ -4,8 +4,50 @@ ActiveRecord::Base.establish_connection(dbconfig[env]['postgresql'])
|
|
4
4
|
|
5
5
|
ActiveRecord::Schema.define :version => 0 do
|
6
6
|
|
7
|
+
create_table :companies, force: true do |t|
|
8
|
+
t.string :name
|
9
|
+
end
|
10
|
+
|
7
11
|
create_table :versioned_products, versioned: true, force: true do |t|
|
12
|
+
t.references :company
|
8
13
|
t.string :name
|
9
14
|
t.decimal :price
|
10
15
|
end
|
16
|
+
|
17
|
+
create_table :comments, force: true do |t|
|
18
|
+
t.references :versioned_product
|
19
|
+
t.string :content
|
20
|
+
end
|
21
|
+
|
22
|
+
create_table :sales, force: true do |t|
|
23
|
+
t.references :versioned_product
|
24
|
+
t.integer :versioned_product_version
|
25
|
+
t.string :purchaser
|
26
|
+
end
|
27
|
+
|
28
|
+
create_table :tags, force: true do |t|
|
29
|
+
t.string :name
|
30
|
+
end
|
31
|
+
|
32
|
+
create_table :tags_versioned_products, force: true, id: false do |t|
|
33
|
+
t.references :versioned_product, :tag
|
34
|
+
end
|
35
|
+
|
36
|
+
create_table :packages, force: true do |t|
|
37
|
+
t.string :dimensions
|
38
|
+
end
|
39
|
+
|
40
|
+
create_table :packages_versioned_products, force: true, id: false do |t|
|
41
|
+
t.references :versioned_product, :package
|
42
|
+
t.integer :versioned_product_version
|
43
|
+
end
|
44
|
+
|
45
|
+
create_table :installations, force: true do |t|
|
46
|
+
t.references :versioned_product, :office
|
47
|
+
t.string :installed_by
|
48
|
+
end
|
49
|
+
|
50
|
+
create_table :offices, force: true do |t|
|
51
|
+
t.string :address
|
52
|
+
end
|
11
53
|
end
|
data/spec/support/tag.rb
ADDED
@@ -2,4 +2,31 @@ class VersionedProduct < ActiveRecord::Base
|
|
2
2
|
include VersionedRecord
|
3
3
|
validates :name, presence: true
|
4
4
|
validates :name, length: { minimum: 2 }
|
5
|
+
|
6
|
+
belongs_to :company
|
7
|
+
|
8
|
+
# Simple Belongs To
|
9
|
+
has_many :comments
|
10
|
+
|
11
|
+
# Composite Belongs To
|
12
|
+
has_many :sales, {
|
13
|
+
foreign_key: [:versioned_product_id, :versioned_product_version],
|
14
|
+
primary_key: [:id, :version ]
|
15
|
+
}
|
16
|
+
|
17
|
+
# Simple HABTM
|
18
|
+
has_and_belongs_to_many :tags
|
19
|
+
|
20
|
+
# Composite HABTM
|
21
|
+
has_and_belongs_to_many :packages, {
|
22
|
+
foreign_key: [:versioned_product_id, :versioned_product_version],
|
23
|
+
association_foreign_key: :package_id
|
24
|
+
}
|
25
|
+
|
26
|
+
# Composite Mutual HABTM
|
27
|
+
# TODO location?
|
28
|
+
|
29
|
+
# Has one and has one through
|
30
|
+
has_one :installation
|
31
|
+
has_one :office, through: :installation
|
5
32
|
end
|
data/spec/versions_spec.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe VersionedProduct do
|
4
|
-
let
|
4
|
+
let(:company) { Company.create(name: 'Acme Corp') }
|
5
|
+
let!(:first_version) { VersionedProduct.create(name: 'iPad', price: 100, company: company) }
|
5
6
|
|
6
7
|
shared_examples 'successful version creation' do
|
7
8
|
it 'creates a new version' do
|
@@ -10,17 +11,30 @@ describe VersionedProduct do
|
|
10
11
|
|
11
12
|
it 'unsets current version on first version' do
|
12
13
|
perform
|
13
|
-
expect(VersionedProduct.find(first_version.
|
14
|
+
expect(VersionedProduct.find(first_version._id, 0)).to_not be_is_current_version
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#current_version' do
|
18
|
+
let!(:old_version) { VersionedProduct.find(first_version._id, 0) }
|
19
|
+
let!(:new_version) { perform }
|
20
|
+
specify { expect(old_version.current_version).to eq(new_version) }
|
14
21
|
end
|
15
22
|
|
16
23
|
describe 'the new version' do
|
17
24
|
subject { perform.reload }
|
18
|
-
|
19
|
-
specify
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
25
|
+
|
26
|
+
specify do
|
27
|
+
expect(subject).to be_is_current_version
|
28
|
+
expect(subject).to be_valid
|
29
|
+
expect(subject).to be_persisted
|
30
|
+
end
|
31
|
+
|
32
|
+
specify do
|
33
|
+
expect(subject.version).to eq(1)
|
34
|
+
expect(subject.name).to eq('iPad 2')
|
35
|
+
expect(subject.price).to eq(100)
|
36
|
+
expect(subject.company).to eq(company)
|
37
|
+
end
|
24
38
|
end
|
25
39
|
end
|
26
40
|
|
data/versioned_record.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.required_ruby_version = '>= 2.0.0'
|
22
22
|
|
23
23
|
spec.add_runtime_dependency "activerecord", "~> 4.0.0"
|
24
|
-
spec.add_runtime_dependency 'composite_primary_keys', '>= 6.0.
|
24
|
+
spec.add_runtime_dependency 'composite_primary_keys', '>= 6.0.5'
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.3"
|
27
27
|
spec.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: versioned_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Draper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 6.0.
|
33
|
+
version: 6.0.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 6.0.
|
40
|
+
version: 6.0.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -167,14 +167,28 @@ files:
|
|
167
167
|
- README.md
|
168
168
|
- Rakefile
|
169
169
|
- lib/versioned_record.rb
|
170
|
+
- lib/versioned_record/active_record_versioning.rb
|
170
171
|
- lib/versioned_record/attribute_builder.rb
|
172
|
+
- lib/versioned_record/attribute_methods/write.rb
|
171
173
|
- lib/versioned_record/class_methods.rb
|
172
174
|
- lib/versioned_record/composite_predicates.rb
|
173
175
|
- lib/versioned_record/connection_adapters/postgresql.rb
|
174
176
|
- lib/versioned_record/version.rb
|
177
|
+
- spec/composite_belongs_to.rb
|
178
|
+
- spec/composite_onesided_habtm_spec.rb
|
179
|
+
- spec/has_one_through_spec.rb
|
180
|
+
- spec/simple_belongs_to_spec.rb
|
181
|
+
- spec/simple_onesided_habtm_spec.rb
|
175
182
|
- spec/spec_helper.rb
|
183
|
+
- spec/support/comment.rb
|
184
|
+
- spec/support/company.rb
|
176
185
|
- spec/support/database.rb
|
177
186
|
- spec/support/database.yml
|
187
|
+
- spec/support/installation.rb
|
188
|
+
- spec/support/office.rb
|
189
|
+
- spec/support/package.rb
|
190
|
+
- spec/support/sale.rb
|
191
|
+
- spec/support/tag.rb
|
178
192
|
- spec/support/versioned_product.rb
|
179
193
|
- spec/version_class_methods_spec.rb
|
180
194
|
- spec/versions_spec.rb
|
@@ -204,9 +218,21 @@ signing_key:
|
|
204
218
|
specification_version: 4
|
205
219
|
summary: Version ActiveRecord models using composite primary keys
|
206
220
|
test_files:
|
221
|
+
- spec/composite_belongs_to.rb
|
222
|
+
- spec/composite_onesided_habtm_spec.rb
|
223
|
+
- spec/has_one_through_spec.rb
|
224
|
+
- spec/simple_belongs_to_spec.rb
|
225
|
+
- spec/simple_onesided_habtm_spec.rb
|
207
226
|
- spec/spec_helper.rb
|
227
|
+
- spec/support/comment.rb
|
228
|
+
- spec/support/company.rb
|
208
229
|
- spec/support/database.rb
|
209
230
|
- spec/support/database.yml
|
231
|
+
- spec/support/installation.rb
|
232
|
+
- spec/support/office.rb
|
233
|
+
- spec/support/package.rb
|
234
|
+
- spec/support/sale.rb
|
235
|
+
- spec/support/tag.rb
|
210
236
|
- spec/support/versioned_product.rb
|
211
237
|
- spec/version_class_methods_spec.rb
|
212
238
|
- spec/versions_spec.rb
|