versioned_record 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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