composite_primary_keys 7.0.1 → 7.0.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 +4 -4
- data/History.rdoc +5 -0
- data/README.rdoc +7 -0
- data/lib/composite_primary_keys.rb +2 -0
- data/lib/composite_primary_keys/active_model/dirty.rb +2 -2
- data/lib/composite_primary_keys/composite_predicates.rb +6 -5
- data/lib/composite_primary_keys/relation.rb +1 -1
- data/lib/composite_primary_keys/relation/predicate_builder.rb +22 -0
- data/lib/composite_primary_keys/version.rb +1 -1
- data/test/fixtures/membership.rb +0 -1
- data/test/test_callbacks.rb +77 -0
- data/test/test_find.rb +6 -0
- data/test/test_predicates.rb +1 -1
- data/test/test_update.rb +3 -3
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a95b00436decb1d0c5da9fc42f706be34aaf6dc
|
4
|
+
data.tar.gz: 08b6d26c4d0e136b577c59394becfc82af3b0a21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e02f25ffa1220a27361433d224c07f584ec130dc7cb2dfbf1f542e903486d80dec239555b62a96a96a3375eec45fa82bf9810374700d40184075aeb7ddd30b0
|
7
|
+
data.tar.gz: a5d9c69b6eccada21cfed579bcd2bd9a4f6ea1987a9bb3cf4c43700c31a4859d24fb0514d8b27d8d46d00cd6ccc79b59dd89e5568bb8646953051810ecd4ef3e
|
data/History.rdoc
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 7.0.2 (2014-06-01)
|
2
|
+
|
3
|
+
* Fix id_was when one of the column names is called id (Adrian Hooper)
|
4
|
+
* Fix queries that use ActiveRecord objects in the where clause (Adrian Hooper)
|
5
|
+
|
1
6
|
== 7.0.1 (2014-05-27)
|
2
7
|
|
3
8
|
* Fix setting of timestamps automatically by Rails (Charlie Savage)
|
data/README.rdoc
CHANGED
@@ -71,6 +71,13 @@ Now we want to be able to find instances using the same syntax we always use for
|
|
71
71
|
|
72
72
|
Notice the use of an array to specify the composite key values.
|
73
73
|
|
74
|
+
NOTE - API CHANGE. CPK Version 6.x and earlier used to allow composite keys to be listed out
|
75
|
+
like this:
|
76
|
+
|
77
|
+
Membership.find(1,1)
|
78
|
+
|
79
|
+
This usage is no longer supported.
|
80
|
+
|
74
81
|
== Databases
|
75
82
|
|
76
83
|
CPK supports the following databases:
|
@@ -64,6 +64,7 @@ require 'active_record/connection_adapters/abstract_adapter'
|
|
64
64
|
require 'active_record/relation/batches'
|
65
65
|
require 'active_record/relation/calculations'
|
66
66
|
require 'active_record/relation/finder_methods'
|
67
|
+
require 'active_record/relation/predicate_builder'
|
67
68
|
require 'active_record/relation/query_methods'
|
68
69
|
|
69
70
|
require 'active_record/validations/uniqueness'
|
@@ -104,6 +105,7 @@ require 'composite_primary_keys/connection_adapters/abstract/connection_specific
|
|
104
105
|
require 'composite_primary_keys/relation/batches'
|
105
106
|
require 'composite_primary_keys/relation/calculations'
|
106
107
|
require 'composite_primary_keys/relation/finder_methods'
|
108
|
+
require 'composite_primary_keys/relation/predicate_builder'
|
107
109
|
require 'composite_primary_keys/relation/query_methods'
|
108
110
|
|
109
111
|
require 'composite_primary_keys/validations/uniqueness'
|
@@ -3,8 +3,8 @@ module ActiveModel
|
|
3
3
|
def attribute_was(attr)
|
4
4
|
# CPK
|
5
5
|
if self.composite? && attr == "id"
|
6
|
-
self.class.primary_keys.map do |
|
7
|
-
attribute_changed?(
|
6
|
+
self.class.primary_keys.map do |key_attr|
|
7
|
+
attribute_changed?(key_attr) ? changed_attributes[key_attr] : self.ids_hash[key_attr]
|
8
8
|
end
|
9
9
|
else
|
10
10
|
attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
|
@@ -9,9 +9,12 @@ module CompositePrimaryKeys
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def cpk_or_predicate(predicates)
|
12
|
-
|
12
|
+
or_predicate = predicates.map do |predicate|
|
13
|
+
::Arel::Nodes::Grouping.new(predicate)
|
14
|
+
end.inject do |memo, node|
|
13
15
|
::Arel::Nodes::Or.new(memo, node)
|
14
|
-
|
16
|
+
end
|
17
|
+
::Arel::Nodes::Grouping.new(or_predicate)
|
15
18
|
end
|
16
19
|
|
17
20
|
def cpk_id_predicate(table, keys, values)
|
@@ -45,6 +48,4 @@ ActiveRecord::Associations::JoinDependency::JoinAssociation.send(:include, Compo
|
|
45
48
|
ActiveRecord::Associations::Preloader::Association.send(:include, CompositePrimaryKeys::Predicates)
|
46
49
|
ActiveRecord::Associations::HasManyThroughAssociation.send(:include, CompositePrimaryKeys::Predicates)
|
47
50
|
ActiveRecord::Relation.send(:include, CompositePrimaryKeys::Predicates)
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
+
ActiveRecord::PredicateBuilder.send(:extend, CompositePrimaryKeys::Predicates)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
class PredicateBuilder
|
3
|
+
def self.expand(klass, table, column, value)
|
4
|
+
queries = []
|
5
|
+
if klass && reflection = klass.reflect_on_association(column.to_sym)
|
6
|
+
if reflection.polymorphic? && base_class = polymorphic_base_class_from_value(value)
|
7
|
+
queries << build(table[reflection.foreign_type], base_class)
|
8
|
+
end
|
9
|
+
|
10
|
+
column = reflection.foreign_key
|
11
|
+
end
|
12
|
+
|
13
|
+
#CPK
|
14
|
+
if Base === value && value.composite?
|
15
|
+
queries << cpk_id_predicate(table, column, value.id)
|
16
|
+
else
|
17
|
+
queries << build(table[column], value)
|
18
|
+
end
|
19
|
+
queries
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/test/fixtures/membership.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
+
|
3
|
+
class TestUpdate < ActiveSupport::TestCase
|
4
|
+
fixtures :suburbs
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@@callbacks = OpenStruct.new
|
8
|
+
end
|
9
|
+
|
10
|
+
Suburb.class_eval do
|
11
|
+
before_create do
|
12
|
+
@@callbacks.before_create = true
|
13
|
+
end
|
14
|
+
|
15
|
+
after_create do
|
16
|
+
@@callbacks.after_create = true
|
17
|
+
end
|
18
|
+
|
19
|
+
around_create do |suburb, block|
|
20
|
+
@@callbacks.around_create = true
|
21
|
+
block.call
|
22
|
+
end
|
23
|
+
|
24
|
+
before_save do
|
25
|
+
@@callbacks.before_save = true
|
26
|
+
end
|
27
|
+
|
28
|
+
after_save do
|
29
|
+
@@callbacks.after_save = true
|
30
|
+
end
|
31
|
+
|
32
|
+
around_save do |suburb, block|
|
33
|
+
@@callbacks.around_save = true
|
34
|
+
block.call
|
35
|
+
end
|
36
|
+
|
37
|
+
before_update do
|
38
|
+
@@callbacks.before_update = true
|
39
|
+
end
|
40
|
+
|
41
|
+
after_update do
|
42
|
+
@@callbacks.after_update = true
|
43
|
+
end
|
44
|
+
|
45
|
+
around_update do |suburb, block|
|
46
|
+
@@callbacks.around_update = true
|
47
|
+
block.call
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_create
|
52
|
+
suburb = Suburb.new(:city_id => 3, :suburb_id => 3, :name => 'created')
|
53
|
+
suburb.save!
|
54
|
+
|
55
|
+
assert(@@callbacks.before_save)
|
56
|
+
assert(@@callbacks.after_save)
|
57
|
+
assert(@@callbacks.around_save)
|
58
|
+
|
59
|
+
assert(@@callbacks.before_create)
|
60
|
+
assert(@@callbacks.after_create)
|
61
|
+
assert(@@callbacks.around_create)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_update
|
65
|
+
suburb = suburbs(:first)
|
66
|
+
suburb.name = 'Updated'
|
67
|
+
suburb.save
|
68
|
+
|
69
|
+
assert(@@callbacks.before_update)
|
70
|
+
assert(@@callbacks.after_update)
|
71
|
+
assert(@@callbacks.around_update)
|
72
|
+
|
73
|
+
assert(@@callbacks.before_save)
|
74
|
+
assert(@@callbacks.after_save)
|
75
|
+
assert(@@callbacks.around_save)
|
76
|
+
end
|
77
|
+
end
|
data/test/test_find.rb
CHANGED
@@ -85,4 +85,10 @@ class TestFind < ActiveSupport::TestCase
|
|
85
85
|
assert_equal(Department.count, batch.size)
|
86
86
|
end
|
87
87
|
end
|
88
|
+
|
89
|
+
def test_expand
|
90
|
+
department = departments(:engineering)
|
91
|
+
employees = Employee.where(:department => department)
|
92
|
+
assert_equal(2, employees.count)
|
93
|
+
end
|
88
94
|
end
|
data/test/test_predicates.rb
CHANGED
@@ -16,7 +16,7 @@ class TestEqual < ActiveSupport::TestCase
|
|
16
16
|
|
17
17
|
connection = ActiveRecord::Base.connection
|
18
18
|
quoted = "#{connection.quote_table_name('departments')}.#{connection.quote_column_name('id')}"
|
19
|
-
expected = "(#{quoted} = 0 OR #{quoted} = 1 OR #{quoted} = 2)"
|
19
|
+
expected = "((#{quoted} = 0) OR (#{quoted} = 1) OR (#{quoted} = 2))"
|
20
20
|
|
21
21
|
pred = cpk_or_predicate(predicates)
|
22
22
|
assert_equal(with_quoted_identifiers(expected), pred.to_sql)
|
data/test/test_update.rb
CHANGED
@@ -62,9 +62,9 @@ class TestUpdate < ActiveSupport::TestCase
|
|
62
62
|
|
63
63
|
def test_update_all
|
64
64
|
assert_nothing_raised do
|
65
|
-
|
66
|
-
primary_key =
|
67
|
-
ReferenceCode.where(primary_key =>
|
65
|
+
reference_code = ReferenceCode.create
|
66
|
+
primary_key = reference_code.class.primary_key
|
67
|
+
ReferenceCode.where(primary_key => reference_code[primary_key]).
|
68
68
|
update_all(description: 'random value')
|
69
69
|
end
|
70
70
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: composite_primary_keys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Savage
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- lib/composite_primary_keys/relation/batches.rb
|
69
69
|
- lib/composite_primary_keys/relation/calculations.rb
|
70
70
|
- lib/composite_primary_keys/relation/finder_methods.rb
|
71
|
+
- lib/composite_primary_keys/relation/predicate_builder.rb
|
71
72
|
- lib/composite_primary_keys/relation/query_methods.rb
|
72
73
|
- lib/composite_primary_keys/sanitization.rb
|
73
74
|
- lib/composite_primary_keys/validations/uniqueness.rb
|
@@ -167,6 +168,7 @@ files:
|
|
167
168
|
- test/test_attribute_methods.rb
|
168
169
|
- test/test_attributes.rb
|
169
170
|
- test/test_calculations.rb
|
171
|
+
- test/test_callbacks.rb
|
170
172
|
- test/test_composite_arrays.rb
|
171
173
|
- test/test_counter_cache.rb
|
172
174
|
- test/test_create.rb
|
@@ -190,7 +192,8 @@ files:
|
|
190
192
|
- test/test_update.rb
|
191
193
|
- test/test_validations.rb
|
192
194
|
homepage: https://github.com/composite-primary-keys/composite_primary_keys
|
193
|
-
licenses:
|
195
|
+
licenses:
|
196
|
+
- MIT
|
194
197
|
metadata: {}
|
195
198
|
post_install_message:
|
196
199
|
rdoc_options: []
|
@@ -207,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
210
|
- !ruby/object:Gem::Version
|
208
211
|
version: '0'
|
209
212
|
requirements: []
|
210
|
-
rubyforge_project:
|
213
|
+
rubyforge_project:
|
211
214
|
rubygems_version: 2.2.2
|
212
215
|
signing_key:
|
213
216
|
specification_version: 4
|
@@ -222,6 +225,7 @@ test_files:
|
|
222
225
|
- test/test_attributes.rb
|
223
226
|
- test/test_attribute_methods.rb
|
224
227
|
- test/test_calculations.rb
|
228
|
+
- test/test_callbacks.rb
|
225
229
|
- test/test_composite_arrays.rb
|
226
230
|
- test/test_counter_cache.rb
|
227
231
|
- test/test_create.rb
|