composite_primary_keys 3.1.0 → 3.1.1

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.
@@ -1,3 +1,11 @@
1
+ == 3.1.1 2010-02-07
2
+ * Implement id_before_type_cast (Jason Lewis)
3
+ * Add in tests for Model.includes(:other_model)
4
+ * Fix object comparison with nil in composite primary keys (StackNG)
5
+ * Make it easier to run tests with different database adapters (Toby Cabot)
6
+ * Fix AssociationReflection#primary_key_name for polymorphic relationships (Dave Doan)
7
+
8
+
1
9
  == 3.1.0 2010-12-17
2
10
  * Add back in rake test tasks (Toby Cabot)
3
11
  * Add support for multiple string composite keys (wouter)
data/README.txt CHANGED
@@ -32,7 +32,7 @@ http://compositekeys.rubyforge.org
32
32
 
33
33
  == Questions, Discussion and Contributions
34
34
 
35
- http://groups.google.com/compositekeys
35
+ http://groups.google.com/group/compositekeys
36
36
 
37
37
  == Author
38
38
 
data/Rakefile CHANGED
@@ -21,11 +21,16 @@ Dir.glob('tasks/**/*.rake').each do |rake_file|
21
21
  load File.join(File.dirname(__FILE__), rake_file)
22
22
  end
23
23
 
24
- # Set up test tasks
25
- for adapter in %w( mysql sqlite oracle oracle_enhanced postgresql ibm_db )
26
- Rake::TestTask.new("test_#{adapter}") do |t|
27
- t.libs << "test" << "test/connections/native_#{adapter}"
28
- t.pattern = "test/test_*.rb"
29
- t.verbose = true
24
+ # Set up test tasks for each supported connection adapter
25
+ %w(mysql sqlite oracle oracle_enhanced postgresql ibm_db).each do |adapter|
26
+ namespace adapter do
27
+ desc "Run tests using the #{adapter} adapter"
28
+ task "test" do
29
+ ENV["ADAPTER"] = adapter
30
+ Rake::TestTask.new("subtest_#{adapter}") do |t|
31
+ t.libs << "test"
32
+ end
33
+ Rake::Task["subtest_#{adapter}"].invoke
34
+ end
30
35
  end
31
36
  end
@@ -116,8 +116,10 @@ module ActiveRecord
116
116
  end
117
117
  end
118
118
 
119
- def id_before_type_cast #:nodoc:
120
- raise CompositeKeyError, CompositePrimaryKeys::ActiveRecord::Base::NOT_IMPLEMENTED_YET
119
+ def id_before_type_cast
120
+ self.class.primary_keys.map do |key|
121
+ self.send("#{key.to_s}_before_type_cast")
122
+ end
121
123
  end
122
124
 
123
125
  def quoted_id #:nodoc:
@@ -138,6 +140,10 @@ module ActiveRecord
138
140
  id
139
141
  end
140
142
 
143
+ def ==(comparison_object)
144
+ ids.is_a?(Array) ? super(comparison_object) && ids.all? {|id| id.present?} : super(comparison_object)
145
+ end
146
+
141
147
  # Cloned objects have no id assigned and are treated as new records. Note that this is a "shallow" clone
142
148
  # as it copies the object's attributes only, not its associations. The extent of a "deep" clone is
143
149
  # application specific and is therefore left to the application to implement according to its need.
@@ -188,4 +194,4 @@ module ActiveRecord
188
194
  end
189
195
  end
190
196
  end
191
- end
197
+ end
@@ -9,7 +9,7 @@ module ActiveRecord
9
9
  #"#{name}_id"
10
10
  class_name.foreign_key
11
11
  elsif options[:as]
12
- options[:as]
12
+ "#{options[:as]}_id"
13
13
  else
14
14
  active_record.name.foreign_key
15
15
  end
@@ -2,7 +2,7 @@ module CompositePrimaryKeys
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 1
5
- TINY = 0
5
+ TINY = 1
6
6
  STRING = [MAJOR, MINOR, TINY].join('.')
7
7
  end
8
8
  end
@@ -7,17 +7,29 @@ There are tests available for the following adapters:
7
7
  * ibmdb
8
8
  * mysql
9
9
  * oracle
10
+ * oracle_enhanced
10
11
  * postgresql
11
12
  * sqlite
12
13
 
13
- To run the tests for on of the adapters follow these steps (using mysql in the example):
14
+ To run the tests for one of the adapters follow these steps (using mysql in the example):
14
15
 
15
- * rake -T | grep mysql
16
+ * rake -T mysql
16
17
 
17
18
  rake mysql:build_databases # Build the MySQL test databases
18
19
  rake mysql:drop_databases # Drop the MySQL test databases
19
20
  rake mysql:rebuild_databases # Rebuild the MySQL test databases
20
- rake test_mysql # Run tests for test_mysql
21
+ rake mysql:test # Run tests using the mysql adapter
21
22
 
22
23
  * rake mysql:build_databases
23
- * rake test_mysql
24
+ * rake mysql:test
25
+
26
+ == Running tests individually
27
+
28
+ You can specify which test you'd like to run on the command line:
29
+
30
+ * rake mysql:test TEST=test/test_equal.rb
31
+
32
+ If you want to run closer to the metal you can cd into the test/
33
+ directory and run the tests like so:
34
+
35
+ * ADAPTER=mysql ruby test_equal.rb
@@ -1,7 +1,7 @@
1
1
  dir = File.dirname(__FILE__)
2
2
  PROJECT_ROOT = File.expand_path(File.join(dir, '..'))
3
3
 
4
- adapter = 'postgresql'
4
+ adapter = ENV["ADAPTER"] || 'postgresql'
5
5
 
6
6
  require 'pp'
7
7
  require 'test/unit'
@@ -7,7 +7,6 @@ require File.join(PROJECT_ROOT, 'lib', 'composite_primary_keys', 'connection_ada
7
7
  def connection_string
8
8
  options = Hash.new
9
9
  options['U'] = SPEC['username'] if SPEC['username']
10
- options['p'] = SPEC['password'] if SPEC['password']
11
10
  options.map { |key, value| "-#{key} #{value}" }.join(" ")
12
11
  end
13
12
 
@@ -56,31 +56,59 @@ class TestAssociations < ActiveSupport::TestCase
56
56
 
57
57
  # Its not generating the instances of associated classes from the rows
58
58
  def test_find_includes_products
59
+ # Old style
59
60
  assert @products = Product.find(:all, :include => :product_tariffs)
60
61
  assert_equal 2, @products.length
61
62
  assert_not_nil @products.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array'
62
63
  assert_equal 3, @products.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length},
63
64
  "Incorrect number of product_tariffs returned"
65
+
66
+ # New style
67
+ assert @products = Product.includes(:product_tariffs)
68
+ assert_equal 2, @products.length
69
+ assert_not_nil @products.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array'
70
+ assert_equal 3, @products.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length},
71
+ "Incorrect number of product_tariffs returned"
64
72
  end
65
73
 
66
74
  def test_find_includes_tariffs
75
+ # Old style
67
76
  assert @tariffs = Tariff.find(:all, :include => :product_tariffs)
68
77
  assert_equal 3, @tariffs.length
69
78
  assert_not_nil @tariffs.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array'
70
79
  assert_equal 3, @tariffs.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length},
71
80
  "Incorrect number of product_tariffs returnedturned"
81
+
82
+ # New style
83
+ assert @tariffs = Tariff.includes(:product_tariffs)
84
+ assert_equal 3, @tariffs.length
85
+ assert_not_nil @tariffs.first.instance_variable_get('@product_tariffs'), '@product_tariffs not set; should be array'
86
+ assert_equal 3, @tariffs.inject(0) {|sum, tariff| sum + tariff.instance_variable_get('@product_tariffs').length},
87
+ "Incorrect number of product_tariffs returnedturned"
72
88
  end
73
89
 
74
- def test_find_includes_product
90
+ def test_find_includes_product_tariffs
91
+ # Old style
75
92
  assert @product_tariffs = ProductTariff.find(:all, :include => :product)
76
93
  assert_equal 3, @product_tariffs.length
77
94
  assert_not_nil @product_tariffs.first.instance_variable_get('@product'), '@product not set'
95
+
96
+ # New style
97
+ assert @product_tariffs = ProductTariff.includes(:product)
98
+ assert_equal 3, @product_tariffs.length
99
+ assert_not_nil @product_tariffs.first.instance_variable_get('@product'), '@product not set'
78
100
  end
79
101
 
80
102
  def test_find_includes_comp_belongs_to_tariff
103
+ # Old style
81
104
  assert @product_tariffs = ProductTariff.find(:all, :include => :tariff)
82
105
  assert_equal 3, @product_tariffs.length
83
106
  assert_not_nil @product_tariffs.first.instance_variable_get('@tariff'), '@tariff not set'
107
+
108
+ # New style
109
+ assert @product_tariffs = ProductTariff.includes(:tariff)
110
+ assert_equal 3, @product_tariffs.length
111
+ assert_not_nil @product_tariffs.first.instance_variable_get('@tariff'), '@tariff not set'
84
112
  end
85
113
 
86
114
  def test_find_includes_extended
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: composite_primary_keys
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
5
- prerelease: false
4
+ hash: 1
5
+ prerelease:
6
6
  segments:
7
7
  - 3
8
8
  - 1
9
- - 0
10
- version: 3.1.0
9
+ - 1
10
+ version: 3.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dr Nic Williams
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-12-17 00:00:00 -07:00
19
+ date: 2011-02-05 00:00:00 -08:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -232,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
232
232
  requirements: []
233
233
 
234
234
  rubyforge_project: compositekeys
235
- rubygems_version: 1.3.7
235
+ rubygems_version: 1.5.0
236
236
  signing_key:
237
237
  specification_version: 3
238
238
  summary: Composite key support for ActiveRecord