composite_primary_keys 7.0.1 → 7.0.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: 67949f62c5795509a482f74ac109193f0d6e294a
4
- data.tar.gz: 1705dca290c512bd57401db0d61cc58e2c13d6d1
3
+ metadata.gz: 1a95b00436decb1d0c5da9fc42f706be34aaf6dc
4
+ data.tar.gz: 08b6d26c4d0e136b577c59394becfc82af3b0a21
5
5
  SHA512:
6
- metadata.gz: ebead783540875cd89cfefce57b3113b85d76295753d4029f54c5b866598a6a5961d1f0bb247fff7279716b1e9989bea4607c1be247e884b662ec934adcd08ef
7
- data.tar.gz: 563cf8163a7526483b14018b4438134c7ca4cbac0b1868003d864d7f55348f61e686c472afed787db5ef8aed0377ee886a09d7167caf3a8623025ef21b106532
6
+ metadata.gz: 1e02f25ffa1220a27361433d224c07f584ec130dc7cb2dfbf1f542e903486d80dec239555b62a96a96a3375eec45fa82bf9810374700d40184075aeb7ddd30b0
7
+ data.tar.gz: a5d9c69b6eccada21cfed579bcd2bd9a4f6ea1987a9bb3cf4c43700c31a4859d24fb0514d8b27d8d46d00cd6ccc79b59dd89e5568bb8646953051810ecd4ef3e
@@ -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)
@@ -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 |attr|
7
- attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
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
- ::Arel::Nodes::Grouping.new(predicates.inject { |memo,node|
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)
@@ -81,7 +81,7 @@ module ActiveRecord
81
81
  end
82
82
  end
83
83
 
84
- def update_record(values, id, id_was) # :nodoc:
84
+ def update_record(values, id, id_was)
85
85
  substitutes, binds = substitute_values values
86
86
 
87
87
  # CPK
@@ -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
@@ -2,7 +2,7 @@ module CompositePrimaryKeys
2
2
  module VERSION
3
3
  MAJOR = 7
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
  STRING = [MAJOR, MINOR, TINY].join('.')
7
7
  end
8
8
  end
@@ -1,5 +1,4 @@
1
1
  class Membership < ActiveRecord::Base
2
- # self.primary_keys = *keys - turns on composite key functionality
3
2
  self.primary_keys = :user_id, :group_id
4
3
  belongs_to :user
5
4
  belongs_to :group
@@ -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
@@ -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
@@ -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)
@@ -62,9 +62,9 @@ class TestUpdate < ActiveSupport::TestCase
62
62
 
63
63
  def test_update_all
64
64
  assert_nothing_raised do
65
- refrence_code = ReferenceCode.create
66
- primary_key = refrence_code.class.primary_key
67
- ReferenceCode.where(primary_key => refrence_code[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.1
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-05-27 00:00:00.000000000 Z
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: compositekeys
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