versioned_record 0.3.1 → 0.3.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 922578eddd43ab7241f9508f1e2b69df72348a78
4
- data.tar.gz: b6016c21345c767d7ad00c5a8ff56655ec69af9e
3
+ metadata.gz: 60698c47669db53300faa0ac76472e2f2c6bf165
4
+ data.tar.gz: 2999d4a36edb3075cb52c7a87fc69362cbe8fbb6
5
5
  SHA512:
6
- metadata.gz: 5f45e23784fb7e5924a0baedcf5b2efdd18eb8a5eaabeb4b8c5455c77c5f434e1ebd3706125978e78276af607b37fe75cfc726c17c4db7d5c2e5ce9097d09428
7
- data.tar.gz: c1558526c1ba918b7741279b90cb60b5e4312f3585a53f8e8f9c84e64abef9695dd6d2907068ce3e42f43a021dd6fd26a6956583eec80f0fe9750b97a793b7c9
6
+ metadata.gz: 7d0636a118bfaef0caf890cbedadde46555b6e3da3fe1bc3c07f6cb2337db387c2ec46632e3cb904da4fd2bf7bb8c13283140eb8c9e8317f0f51e425c424b0bb
7
+ data.tar.gz: 2875b2175b8419f973562920f2b85f06a425b1eb73f4731e3a9c7b113c9a6b8ec45b104387e92bdcaf362f3fa307abf46c46e5552e50f69490063f93297a7334
@@ -56,7 +56,7 @@ module VersionedRecord
56
56
  # other_versions = person.versions.exclude(person)
57
57
  #
58
58
  def exclude(record)
59
- where(id: record.id).where('version != ?', record.version)
59
+ where(id: record._id).where.not(version: record.version)
60
60
  end
61
61
  end
62
62
  end
@@ -1,3 +1,3 @@
1
1
  module VersionedRecord
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -82,7 +82,7 @@ module VersionedRecord
82
82
  # person.versions.order(:version)
83
83
  #
84
84
  def versions
85
- self.class.where(id: self.id)
85
+ self.class.where(id: self._id)
86
86
  end
87
87
 
88
88
  # Retrieve the current version of an object
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Catalog do
4
+ describe 'chained versioning' do
5
+ let(:catalog) { Catalog.create(name: 'Products 2013') }
6
+ let(:product) { VersionedProduct.create(name: 'Headphones', price: '200', catalog: catalog) }
7
+
8
+ let(:new_product) { product.build_version }
9
+ let(:new_catalog) { new_product.catalog.build_version }
10
+
11
+ before do
12
+ new_catalog.name = 'Products 2014'
13
+ new_product.association(:catalog).writer(new_catalog)
14
+ new_product.save!
15
+ end
16
+
17
+ specify do
18
+ expect(new_product).to be_persisted
19
+ expect(new_product).to have(2).versions
20
+ expect(new_product.catalog).to eq(new_catalog)
21
+ end
22
+ end
23
+ end
24
+
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Sale do
3
+ describe VersionedProduct do
4
4
  let!(:versioned_product) { VersionedProduct.create(name: 'iPad', price: 100) }
5
5
  let!(:versioned_product_revision) { versioned_product.create_version!(name: 'iPad 2') }
6
6
 
@@ -0,0 +1,7 @@
1
+ class Catalog < ActiveRecord::Base
2
+ include VersionedRecord
3
+
4
+ has_many :version_products, {
5
+ foreign_key: [:catalog_id, :catalog_version]
6
+ }
7
+ end
@@ -10,6 +10,8 @@ ActiveRecord::Schema.define :version => 0 do
10
10
 
11
11
  create_table :versioned_products, versioned: true, force: true do |t|
12
12
  t.references :company
13
+ t.references :catalog
14
+ t.integer :catalog_version
13
15
  t.string :name
14
16
  t.decimal :price
15
17
  end
@@ -56,4 +58,8 @@ ActiveRecord::Schema.define :version => 0 do
56
58
  t.integer :versioned_product_version
57
59
  t.string :name
58
60
  end
61
+
62
+ create_table :catalogs, force: true, versioned: true do |t|
63
+ t.string :name
64
+ end
59
65
  end
@@ -8,6 +8,11 @@ class VersionedProduct < ActiveRecord::Base
8
8
  # Simple Belongs To
9
9
  has_many :comments
10
10
 
11
+ # Composite Belongs To where the related record is also versioned
12
+ belongs_to :catalog, {
13
+ foreign_key: [:catalog_id, :catalog_version]
14
+ }
15
+
11
16
  # Composite has many
12
17
  has_many :sales, {
13
18
  foreign_key: [:versioned_product_id, :versioned_product_version]
@@ -34,12 +34,15 @@ describe VersionedProduct do
34
34
  end
35
35
 
36
36
  describe 'scopes' do
37
- let!(:first_version) { VersionedProduct.create(name: 'Macbook Pro') }
38
- let!(:second_version) { first_version.create_version!(name: 'Macbook Retina') }
37
+ let!(:a_v0) { VersionedProduct.create(name: 'Macbook Pro') }
38
+ let!(:a_v1) { a_v0.create_version!(name: 'Macbook Retina') }
39
+ let!(:a_v2) { a_v1.create_version!(name: 'Macbook Retina Sick') }
40
+ let!(:b_v0) { VersionedProduct.create(name: 'Macbook Air') }
41
+ let!(:b_v1) { b_v0.create_version!(name: 'Macbook Air 2') }
39
42
 
40
43
  describe '::find_current' do
41
44
  it 'finds the latest version' do
42
- expect(VersionedProduct.find_current(first_version.id)).to eq(second_version)
45
+ expect(VersionedProduct.find_current(a_v0.id)).to eq(a_v2)
43
46
  end
44
47
 
45
48
  context 'where no matching record exists' do
@@ -51,19 +54,19 @@ describe VersionedProduct do
51
54
 
52
55
  describe '::current_versions' do
53
56
  it 'returns only the current version' do
54
- expect(VersionedProduct.current_versions).to eq([second_version])
57
+ expect(VersionedProduct.current_versions).to eq([a_v2, b_v1])
55
58
  end
56
59
  end
57
60
 
58
61
  describe '::exclude_current' do
59
62
  it 'returns only the current version' do
60
- expect(VersionedProduct.exclude_current).to eq([first_version])
63
+ expect(VersionedProduct.exclude_current.order(:id, :version)).to eq([a_v0, a_v1, b_v0])
61
64
  end
62
65
  end
63
66
 
64
67
  describe '::exclude' do
65
68
  it 'returns everything but the excluded record' do
66
- expect(VersionedProduct.exclude(first_version)).to eq([second_version])
69
+ expect(b_v1.versions.exclude(b_v1)).to eq([b_v0])
67
70
  end
68
71
  end
69
72
  end
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.3.1
4
+ version: 0.3.2
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-05-30 00:00:00.000000000 Z
11
+ date: 2014-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -175,13 +175,15 @@ files:
175
175
  - lib/versioned_record/connection_adapters/postgresql.rb
176
176
  - lib/versioned_record/version.rb
177
177
  - spec/association_preservation_spec.rb
178
- - spec/composite_belongs_to.rb
178
+ - spec/composite_belongs_to_spec.rb
179
+ - spec/composite_has_many_spec.rb
179
180
  - spec/composite_onesided_habtm_spec.rb
180
181
  - spec/has_one_spec.rb
181
182
  - spec/has_one_through_spec.rb
182
183
  - spec/simple_belongs_to_spec.rb
183
184
  - spec/simple_onesided_habtm_spec.rb
184
185
  - spec/spec_helper.rb
186
+ - spec/support/catalog.rb
185
187
  - spec/support/comment.rb
186
188
  - spec/support/company.rb
187
189
  - spec/support/container.rb
@@ -222,13 +224,15 @@ specification_version: 4
222
224
  summary: Version ActiveRecord models using composite primary keys
223
225
  test_files:
224
226
  - spec/association_preservation_spec.rb
225
- - spec/composite_belongs_to.rb
227
+ - spec/composite_belongs_to_spec.rb
228
+ - spec/composite_has_many_spec.rb
226
229
  - spec/composite_onesided_habtm_spec.rb
227
230
  - spec/has_one_spec.rb
228
231
  - spec/has_one_through_spec.rb
229
232
  - spec/simple_belongs_to_spec.rb
230
233
  - spec/simple_onesided_habtm_spec.rb
231
234
  - spec/spec_helper.rb
235
+ - spec/support/catalog.rb
232
236
  - spec/support/comment.rb
233
237
  - spec/support/company.rb
234
238
  - spec/support/container.rb