composite_primary_keys 12.0.9 → 14.0.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.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +894 -877
  3. data/README.rdoc +182 -180
  4. data/Rakefile +37 -37
  5. data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -19
  6. data/lib/composite_primary_keys/arel/sqlserver.rb +37 -37
  7. data/lib/composite_primary_keys/arel/to_sql.rb +18 -18
  8. data/lib/composite_primary_keys/associations/association.rb +23 -23
  9. data/lib/composite_primary_keys/associations/association_scope.rb +66 -68
  10. data/lib/composite_primary_keys/associations/collection_association.rb +31 -31
  11. data/lib/composite_primary_keys/associations/foreign_association.rb +15 -15
  12. data/lib/composite_primary_keys/associations/has_many_association.rb +35 -35
  13. data/lib/composite_primary_keys/associations/join_dependency.rb +137 -103
  14. data/lib/composite_primary_keys/associations/preloader/association.rb +68 -53
  15. data/lib/composite_primary_keys/associations/through_association.rb +25 -25
  16. data/lib/composite_primary_keys/attribute_methods/primary_key.rb +0 -2
  17. data/lib/composite_primary_keys/attribute_methods/read.rb +30 -30
  18. data/lib/composite_primary_keys/attribute_methods/write.rb +35 -35
  19. data/lib/composite_primary_keys/attribute_methods.rb +21 -9
  20. data/lib/composite_primary_keys/autosave_association.rb +60 -60
  21. data/lib/composite_primary_keys/base.rb +141 -141
  22. data/lib/composite_primary_keys/composite_arrays.rb +86 -86
  23. data/lib/composite_primary_keys/composite_predicates.rb +71 -69
  24. data/lib/composite_primary_keys/composite_relation.rb +29 -29
  25. data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +37 -37
  26. data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +10 -10
  27. data/lib/composite_primary_keys/connection_adapters/postgresql/database_statements.rb +26 -26
  28. data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +44 -44
  29. data/lib/composite_primary_keys/core.rb +48 -48
  30. data/lib/composite_primary_keys/counter_cache.rb +15 -15
  31. data/lib/composite_primary_keys/fixtures.rb +21 -21
  32. data/lib/composite_primary_keys/nested_attributes.rb +1 -1
  33. data/lib/composite_primary_keys/persistence.rb +96 -81
  34. data/lib/composite_primary_keys/reflection.rb +91 -29
  35. data/lib/composite_primary_keys/relation/batches.rb +15 -7
  36. data/lib/composite_primary_keys/relation/calculations.rb +110 -81
  37. data/lib/composite_primary_keys/relation/finder_methods.rb +235 -235
  38. data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +39 -20
  39. data/lib/composite_primary_keys/relation/query_methods.rb +42 -42
  40. data/lib/composite_primary_keys/relation/where_clause.rb +18 -23
  41. data/lib/composite_primary_keys/relation.rb +197 -193
  42. data/lib/composite_primary_keys/sanitization.rb +42 -42
  43. data/lib/composite_primary_keys/table_metadata.rb +11 -0
  44. data/lib/composite_primary_keys/transactions.rb +34 -34
  45. data/lib/composite_primary_keys/validations/uniqueness.rb +31 -31
  46. data/lib/composite_primary_keys/version.rb +8 -8
  47. data/lib/composite_primary_keys.rb +119 -117
  48. data/scripts/console.rb +48 -48
  49. data/scripts/txt2html +76 -76
  50. data/scripts/txt2js +65 -65
  51. data/tasks/databases/mysql.rake +40 -40
  52. data/tasks/databases/oracle.rake +41 -41
  53. data/tasks/databases/postgresql.rake +38 -38
  54. data/tasks/databases/sqlite.rake +25 -25
  55. data/tasks/databases/sqlserver.rake +43 -43
  56. data/tasks/website.rake +18 -18
  57. data/test/README_tests.rdoc +56 -56
  58. data/test/abstract_unit.rb +118 -114
  59. data/test/connections/connection_spec.rb +27 -27
  60. data/test/connections/databases.ci.yml +22 -22
  61. data/test/connections/databases.example.yml +40 -40
  62. data/test/connections/databases.yml +40 -39
  63. data/test/fixtures/article.rb +10 -10
  64. data/test/fixtures/articles.yml +7 -7
  65. data/test/fixtures/capitol.rb +3 -3
  66. data/test/fixtures/capitols.yml +16 -16
  67. data/test/fixtures/comment.rb +5 -5
  68. data/test/fixtures/comments.yml +17 -17
  69. data/test/fixtures/db_definitions/db2-create-tables.sql +112 -112
  70. data/test/fixtures/db_definitions/db2-drop-tables.sql +16 -16
  71. data/test/fixtures/db_definitions/mysql.sql +180 -180
  72. data/test/fixtures/db_definitions/oracle.drop.sql +41 -41
  73. data/test/fixtures/db_definitions/oracle.sql +199 -199
  74. data/test/fixtures/db_definitions/postgresql.sql +182 -182
  75. data/test/fixtures/db_definitions/sqlite.sql +169 -169
  76. data/test/fixtures/db_definitions/sqlserver.sql +176 -176
  77. data/test/fixtures/department.rb +16 -16
  78. data/test/fixtures/departments.yml +19 -15
  79. data/test/fixtures/dorm.rb +2 -2
  80. data/test/fixtures/dorms.yml +4 -4
  81. data/test/fixtures/employee.rb +5 -5
  82. data/test/fixtures/employees.yml +33 -28
  83. data/test/fixtures/group.rb +2 -2
  84. data/test/fixtures/groups.yml +6 -6
  85. data/test/fixtures/membership.rb +8 -6
  86. data/test/fixtures/membership_status.rb +2 -2
  87. data/test/fixtures/membership_statuses.yml +16 -16
  88. data/test/fixtures/memberships.yml +10 -10
  89. data/test/fixtures/product.rb +9 -9
  90. data/test/fixtures/product_tariff.rb +5 -5
  91. data/test/fixtures/product_tariffs.yml +14 -14
  92. data/test/fixtures/products.yml +11 -11
  93. data/test/fixtures/reading.rb +4 -4
  94. data/test/fixtures/readings.yml +10 -10
  95. data/test/fixtures/reference_code.rb +7 -7
  96. data/test/fixtures/reference_codes.yml +28 -28
  97. data/test/fixtures/reference_type.rb +12 -12
  98. data/test/fixtures/reference_types.yml +9 -9
  99. data/test/fixtures/restaurant.rb +9 -9
  100. data/test/fixtures/restaurants.yml +14 -14
  101. data/test/fixtures/restaurants_suburb.rb +2 -2
  102. data/test/fixtures/restaurants_suburbs.yml +10 -10
  103. data/test/fixtures/room.rb +11 -11
  104. data/test/fixtures/room_assignment.rb +13 -13
  105. data/test/fixtures/room_assignments.yml +24 -24
  106. data/test/fixtures/room_attribute.rb +2 -2
  107. data/test/fixtures/room_attribute_assignment.rb +4 -4
  108. data/test/fixtures/room_attribute_assignments.yml +4 -4
  109. data/test/fixtures/room_attributes.yml +2 -2
  110. data/test/fixtures/rooms.yml +12 -12
  111. data/test/fixtures/street.rb +2 -2
  112. data/test/fixtures/streets.yml +16 -16
  113. data/test/fixtures/student.rb +3 -3
  114. data/test/fixtures/students.yml +15 -15
  115. data/test/fixtures/suburb.rb +5 -5
  116. data/test/fixtures/suburbs.yml +14 -14
  117. data/test/fixtures/tariff.rb +5 -5
  118. data/test/fixtures/tariffs.yml +14 -14
  119. data/test/fixtures/topic_sources.yml +3 -3
  120. data/test/fixtures/topics.yml +8 -8
  121. data/test/fixtures/user.rb +11 -11
  122. data/test/fixtures/users.yml +10 -10
  123. data/test/plugins/pagination.rb +405 -405
  124. data/test/plugins/pagination_helper.rb +135 -135
  125. data/test/test_associations.rb +372 -358
  126. data/test/test_attribute_methods.rb +63 -63
  127. data/test/test_attributes.rb +75 -60
  128. data/test/test_calculations.rb +49 -42
  129. data/test/test_callbacks.rb +99 -99
  130. data/test/test_composite_arrays.rb +38 -38
  131. data/test/test_counter_cache.rb +30 -30
  132. data/test/test_create.rb +218 -206
  133. data/test/test_delete.rb +188 -179
  134. data/test/test_dumpable.rb +15 -15
  135. data/test/test_dup.rb +37 -37
  136. data/test/test_equal.rb +26 -26
  137. data/test/test_exists.rb +39 -39
  138. data/test/test_find.rb +170 -164
  139. data/test/test_habtm.rb +141 -141
  140. data/test/test_ids.rb +112 -112
  141. data/test/test_miscellaneous.rb +32 -32
  142. data/test/test_nested_attributes.rb +67 -67
  143. data/test/test_optimistic.rb +18 -18
  144. data/test/test_pagination.rb +35 -35
  145. data/test/test_polymorphic.rb +43 -43
  146. data/test/test_predicates.rb +59 -59
  147. data/test/test_preload.rb +102 -102
  148. data/test/test_santiago.rb +23 -23
  149. data/test/test_touch.rb +23 -23
  150. data/test/test_tutorial_example.rb +25 -25
  151. data/test/test_update.rb +102 -96
  152. data/test/test_validations.rb +13 -13
  153. metadata +7 -6
@@ -1,63 +1,63 @@
1
- require File.expand_path('../abstract_unit', __FILE__)
2
-
3
- class TestAttributeMethods < ActiveSupport::TestCase
4
- fixtures :reference_types, :reference_codes
5
-
6
- def test_read_attribute_with_single_key
7
- rt = ReferenceType.find(1)
8
- assert_equal(1, rt.reference_type_id)
9
- assert_equal('NAME_PREFIX', rt.type_label)
10
- assert_equal('Name Prefix', rt.abbreviation)
11
- end
12
-
13
- def test_read_attribute_with_composite_keys
14
- ref_code = ReferenceCode.find([1, 1])
15
- assert_equal(1, ref_code.id.first)
16
- assert_equal(1, ref_code.id.last)
17
- assert_equal('Mr', ref_code.abbreviation)
18
- end
19
-
20
- # to_key returns array even for single key
21
- def test_to_key_with_single_key
22
- rt = ReferenceType.find(1)
23
- assert_equal([1], rt.to_key)
24
- end
25
-
26
- def test_to_key_with_composite_keys
27
- ref_code = ReferenceCode.find([1, 1])
28
- assert_equal(1, ref_code.to_key.first)
29
- assert_equal(1, ref_code.to_key.last)
30
- end
31
-
32
- def test_to_key_with_single_key_unsaved
33
- rt = ReferenceType.new
34
- assert_nil(rt.to_key)
35
- end
36
-
37
- def test_to_key_with_composite_keys_unsaved
38
- ref_code = ReferenceCode.new
39
- assert_nil(ref_code.to_key)
40
- end
41
-
42
- def test_to_key_with_single_key_destroyed
43
- rt = ReferenceType.find(1)
44
- rt.destroy
45
- assert_equal([1], rt.to_key)
46
- end
47
-
48
- def test_to_key_with_composite_key_destroyed
49
- ref_code = ReferenceCode.find([1, 1])
50
- ref_code.destroy
51
- assert_equal([1,1], ref_code.to_key)
52
- end
53
-
54
- def test_id_was
55
- rt = ReferenceType.find(1)
56
- rt.id = 2
57
- assert_equal 1, rt.id_was
58
-
59
- ref_code = ReferenceCode.find([1, 1])
60
- ref_code.id = [1,2]
61
- assert_equal [1,1], ref_code.id_was
62
- end
63
- end
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TestAttributeMethods < ActiveSupport::TestCase
4
+ fixtures :reference_types, :reference_codes
5
+
6
+ def test_read_attribute_with_single_key
7
+ rt = ReferenceType.find(1)
8
+ assert_equal(1, rt.reference_type_id)
9
+ assert_equal('NAME_PREFIX', rt.type_label)
10
+ assert_equal('Name Prefix', rt.abbreviation)
11
+ end
12
+
13
+ def test_read_attribute_with_composite_keys
14
+ ref_code = ReferenceCode.find([1, 1])
15
+ assert_equal(1, ref_code.id.first)
16
+ assert_equal(1, ref_code.id.last)
17
+ assert_equal('Mr', ref_code.abbreviation)
18
+ end
19
+
20
+ # to_key returns array even for single key
21
+ def test_to_key_with_single_key
22
+ rt = ReferenceType.find(1)
23
+ assert_equal([1], rt.to_key)
24
+ end
25
+
26
+ def test_to_key_with_composite_keys
27
+ ref_code = ReferenceCode.find([1, 1])
28
+ assert_equal(1, ref_code.to_key.first)
29
+ assert_equal(1, ref_code.to_key.last)
30
+ end
31
+
32
+ def test_to_key_with_single_key_unsaved
33
+ rt = ReferenceType.new
34
+ assert_nil(rt.to_key)
35
+ end
36
+
37
+ def test_to_key_with_composite_keys_unsaved
38
+ ref_code = ReferenceCode.new
39
+ assert_nil(ref_code.to_key)
40
+ end
41
+
42
+ def test_to_key_with_single_key_destroyed
43
+ rt = ReferenceType.find(1)
44
+ rt.destroy
45
+ assert_equal([1], rt.to_key)
46
+ end
47
+
48
+ def test_to_key_with_composite_key_destroyed
49
+ ref_code = ReferenceCode.find([1, 1])
50
+ ref_code.destroy
51
+ assert_equal([1,1], ref_code.to_key)
52
+ end
53
+
54
+ def test_id_was
55
+ rt = ReferenceType.find(1)
56
+ rt.id = 2
57
+ assert_equal 1, rt.id_was
58
+
59
+ ref_code = ReferenceCode.find([1, 1])
60
+ ref_code.id = [1,2]
61
+ assert_equal [1,1], ref_code.id_was
62
+ end
63
+ end
@@ -1,61 +1,76 @@
1
- require File.expand_path('../abstract_unit', __FILE__)
2
-
3
- class TestAttributes < ActiveSupport::TestCase
4
- fixtures :reference_types, :reference_codes, :products, :tariffs, :product_tariffs
5
-
6
- CLASSES = {
7
- :single => {
8
- :class => ReferenceType,
9
- :primary_keys => :reference_type_id,
10
- },
11
- :dual => {
12
- :class => ReferenceCode,
13
- :primary_keys => [:reference_type_id, :reference_code],
14
- },
15
- }
16
-
17
- def setup
18
- self.class.classes = CLASSES
19
- end
20
-
21
- def test_brackets
22
- testing_with do
23
- @first.attributes.each_pair do |attr_name, value|
24
- assert_equal value, @first[attr_name]
25
- end
26
- end
27
- end
28
-
29
- def test_brackets_primary_key
30
- testing_with do
31
- assert_equal(@first.id, @first[@primary_keys])
32
- assert_equal(@first.id, @first[@first.class.primary_key])
33
- end
34
- end
35
-
36
- def test_brackets_assignment
37
- testing_with do
38
- @first.attributes.each_pair do |attr_name, value|
39
- next if attr_name == @first.class.primary_key
40
- @first[attr_name]= !value.nil? ? value * 2 : '1'
41
- assert_equal !value.nil? ? value * 2 : '1', @first[attr_name]
42
- end
43
- end
44
- end
45
-
46
- def test_brackets_foreign_key_assignment
47
- tarrif = tariffs(:flat)
48
- product_tariff = product_tariffs(:first_flat)
49
- compare_indexes(tarrif, tarrif.class.primary_key, product_tariff, [:tariff_id, :tariff_start_date])
50
- end
51
-
52
- private
53
-
54
- def compare_indexes(obj1, indexes1, obj2, indexes2)
55
- indexes1.length.times do |key_index|
56
- key1 = indexes1[key_index]
57
- key2 = indexes2[key_index]
58
- assert_equal(obj1[key1], obj2[key2])
59
- end
60
- end
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TestAttributes < ActiveSupport::TestCase
4
+ fixtures :reference_types, :reference_codes, :products, :tariffs, :product_tariffs
5
+
6
+ CLASSES = {
7
+ :single => {
8
+ :class => ReferenceType,
9
+ :primary_keys => :reference_type_id,
10
+ },
11
+ :dual => {
12
+ :class => ReferenceCode,
13
+ :primary_keys => [:reference_type_id, :reference_code],
14
+ },
15
+ }
16
+
17
+ def setup
18
+ self.class.classes = CLASSES
19
+ end
20
+
21
+ def test_brackets
22
+ tested_at_least_on_attribute = false
23
+ testing_with do
24
+ @first.attributes.each_pair do |attr_name, value|
25
+ next if value.nil?
26
+ assert_equal value, @first[attr_name]
27
+ tested_at_least_on_attribute = true
28
+ end
29
+ end
30
+ assert tested_at_least_on_attribute
31
+ end
32
+
33
+ def test_brackets_primary_key
34
+ testing_with do
35
+ assert_equal(@first.id, @first[@primary_keys])
36
+ assert_equal(@first.id, @first[@first.class.primary_key])
37
+ end
38
+ end
39
+
40
+ def test_brackets_assignment
41
+ testing_with do
42
+ @first.attributes.each_pair do |attr_name, value|
43
+ next if attr_name == @first.class.primary_key
44
+ @first[attr_name]= !value.nil? ? value * 2 : '1'
45
+ assert_equal !value.nil? ? value * 2 : '1', @first[attr_name]
46
+ end
47
+ end
48
+ end
49
+
50
+ def test_brackets_foreign_key_assignment
51
+ tarrif = tariffs(:flat)
52
+ product_tariff = product_tariffs(:first_flat)
53
+ compare_indexes(tarrif, tarrif.class.primary_key, product_tariff, [:tariff_id, :tariff_start_date])
54
+ end
55
+
56
+ def test_has_attribute
57
+ tariff = tariffs(:flat)
58
+ assert(tariff.has_attribute?([:tariff_id, :start_date]))
59
+ assert(tariff.has_attribute?(['tariff_id', 'start_date']))
60
+ end
61
+
62
+ def test_has__attribute
63
+ tariff = tariffs(:flat)
64
+ assert(tariff._has_attribute?(['tariff_id', 'start_date']))
65
+ end
66
+
67
+ private
68
+
69
+ def compare_indexes(obj1, indexes1, obj2, indexes2)
70
+ indexes1.length.times do |key_index|
71
+ key1 = indexes1[key_index]
72
+ key2 = indexes2[key_index]
73
+ assert_equal(obj1[key1], obj2[key2])
74
+ end
75
+ end
61
76
  end
@@ -1,42 +1,49 @@
1
- require File.expand_path('../abstract_unit', __FILE__)
2
-
3
- class TestCalculations < ActiveSupport::TestCase
4
- fixtures :articles, :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants,
5
- :dorms, :rooms, :room_attributes, :room_attribute_assignments, :students, :room_assignments, :users, :readings,
6
- :departments, :employees, :memberships, :membership_statuses
7
-
8
- def test_count
9
- assert_equal(3, Product.includes(:product_tariffs).count)
10
- assert_equal(3, Tariff.includes(:product_tariffs).count)
11
-
12
- expected = {Date.today => 2,
13
- Date.today.next => 1}
14
-
15
- assert_equal(expected, Tariff.group(:start_date).count)
16
- end
17
-
18
- def test_count_distinct
19
- product = products(:first_product)
20
- assert_equal(1, product.product_tariffs.select('tariff_start_date').distinct.count)
21
- end
22
-
23
- def test_count_not_distinct
24
- product = products(:first_product)
25
- assert_equal(2, product.product_tariffs.select('tariff_start_date').count)
26
- end
27
-
28
- def test_count_includes
29
- count = Dorm.where("rooms.room_id = ?", 2).includes(:rooms).references(:rooms).count
30
- assert_equal(1, count)
31
- end
32
-
33
- def test_count_includes_dup_columns
34
- count = Tariff.includes(:product_tariffs).references(:product_tariffs).where("product_tariffs.tariff_id = ?", 2).count
35
- assert_equal(1, count)
36
- end
37
-
38
- def test_average
39
- average = Tariff.average(:amount)
40
- assert_equal(50, average)
41
- end
42
- end
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TestCalculations < ActiveSupport::TestCase
4
+ fixtures :articles, :products, :tariffs, :product_tariffs, :suburbs, :streets, :restaurants,
5
+ :dorms, :rooms, :room_attributes, :room_attribute_assignments, :students, :room_assignments, :users, :readings,
6
+ :departments, :employees, :memberships, :membership_statuses, :reference_codes, :reference_types
7
+
8
+ def test_count
9
+ assert_equal(3, Product.includes(:product_tariffs).count)
10
+ assert_equal(3, Tariff.includes(:product_tariffs).count)
11
+
12
+ expected = {Date.today => 2,
13
+ Date.today.next => 1}
14
+
15
+ assert_equal(expected, Tariff.group(:start_date).count)
16
+ end
17
+
18
+ def test_count_distinct
19
+ product = products(:first_product)
20
+ assert_equal(1, product.product_tariffs.select('tariff_start_date').distinct.count)
21
+ end
22
+
23
+ def test_count_on_joined_relations_that_have_column_names_in_common
24
+ count_without_includes = ReferenceCode.count
25
+ count_with_includes = ReferenceCode.includes(:reference_type).references(:reference_type).count
26
+ assert_equal(count_without_includes, count_with_includes)
27
+ assert_equal(5, count_with_includes)
28
+ end
29
+
30
+ def test_count_not_distinct
31
+ product = products(:first_product)
32
+ assert_equal(2, product.product_tariffs.select('tariff_start_date').count)
33
+ end
34
+
35
+ def test_count_includes
36
+ count = Dorm.where("rooms.room_id = ?", 2).includes(:rooms).references(:rooms).count
37
+ assert_equal(1, count)
38
+ end
39
+
40
+ def test_count_includes_dup_columns
41
+ count = Tariff.includes(:product_tariffs).references(:product_tariffs).where("product_tariffs.tariff_id = ?", 2).count
42
+ assert_equal(1, count)
43
+ end
44
+
45
+ def test_average
46
+ average = Tariff.average(:amount)
47
+ assert_equal(50, average)
48
+ end
49
+ end
@@ -1,99 +1,99 @@
1
- require File.expand_path('../abstract_unit', __FILE__)
2
-
3
- class TestCallbacks < ActiveSupport::TestCase
4
- fixtures :suburbs
5
-
6
- def setup
7
- @@callbacks = OpenStruct.new
8
-
9
- Suburb.class_eval do
10
- before_create do
11
- @@callbacks.before_create = true
12
- end
13
-
14
- after_create do
15
- @@callbacks.after_create = true
16
- end
17
-
18
- around_create do |suburb, block|
19
- @@callbacks.around_create = true
20
- block.call
21
- end
22
-
23
- before_save do
24
- @@callbacks.before_save = true
25
- end
26
-
27
- after_save do
28
- @@callbacks.after_save = true
29
- end
30
-
31
- around_save do |suburb, block|
32
- @@callbacks.around_save = true
33
- block.call
34
- end
35
-
36
- before_update do
37
- @@callbacks.before_update = true
38
- end
39
-
40
- after_update do
41
- @@callbacks.after_update = true
42
- end
43
-
44
- around_update do |suburb, block|
45
- @@callbacks.around_update = true
46
- block.call
47
- end
48
- end
49
- end
50
-
51
- def teardown
52
- Suburb.reset_callbacks(:create)
53
- Suburb.reset_callbacks(:save)
54
- Suburb.reset_callbacks(:update)
55
- end
56
-
57
- def test_create
58
- refute(@@callbacks.before_save)
59
- refute(@@callbacks.after_save)
60
- refute(@@callbacks.around_save)
61
-
62
- refute(@@callbacks.before_create)
63
- refute(@@callbacks.after_create)
64
- refute(@@callbacks.around_create)
65
-
66
- suburb = Suburb.new(:city_id => 3, :suburb_id => 3, :name => 'created')
67
- suburb.save!
68
-
69
- assert(@@callbacks.before_save)
70
- assert(@@callbacks.after_save)
71
- assert(@@callbacks.around_save)
72
-
73
- assert(@@callbacks.before_create)
74
- assert(@@callbacks.after_create)
75
- assert(@@callbacks.around_create)
76
- end
77
-
78
- def test_update
79
- refute(@@callbacks.before_save)
80
- refute(@@callbacks.after_save)
81
- refute(@@callbacks.around_save)
82
-
83
- refute(@@callbacks.before_create)
84
- refute(@@callbacks.after_create)
85
- refute(@@callbacks.around_create)
86
-
87
- suburb = suburbs(:first)
88
- suburb.name = 'Updated'
89
- suburb.save
90
-
91
- assert(@@callbacks.before_update)
92
- assert(@@callbacks.after_update)
93
- assert(@@callbacks.around_update)
94
-
95
- assert(@@callbacks.before_save)
96
- assert(@@callbacks.after_save)
97
- assert(@@callbacks.around_save)
98
- end
99
- end
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class TestCallbacks < ActiveSupport::TestCase
4
+ fixtures :suburbs
5
+
6
+ def setup
7
+ @@callbacks = OpenStruct.new
8
+
9
+ Suburb.class_eval do
10
+ before_create do
11
+ @@callbacks.before_create = true
12
+ end
13
+
14
+ after_create do
15
+ @@callbacks.after_create = true
16
+ end
17
+
18
+ around_create do |suburb, block|
19
+ @@callbacks.around_create = true
20
+ block.call
21
+ end
22
+
23
+ before_save do
24
+ @@callbacks.before_save = true
25
+ end
26
+
27
+ after_save do
28
+ @@callbacks.after_save = true
29
+ end
30
+
31
+ around_save do |suburb, block|
32
+ @@callbacks.around_save = true
33
+ block.call
34
+ end
35
+
36
+ before_update do
37
+ @@callbacks.before_update = true
38
+ end
39
+
40
+ after_update do
41
+ @@callbacks.after_update = true
42
+ end
43
+
44
+ around_update do |suburb, block|
45
+ @@callbacks.around_update = true
46
+ block.call
47
+ end
48
+ end
49
+ end
50
+
51
+ def teardown
52
+ Suburb.reset_callbacks(:create)
53
+ Suburb.reset_callbacks(:save)
54
+ Suburb.reset_callbacks(:update)
55
+ end
56
+
57
+ def test_create
58
+ refute(@@callbacks.before_save)
59
+ refute(@@callbacks.after_save)
60
+ refute(@@callbacks.around_save)
61
+
62
+ refute(@@callbacks.before_create)
63
+ refute(@@callbacks.after_create)
64
+ refute(@@callbacks.around_create)
65
+
66
+ suburb = Suburb.new(:city_id => 3, :suburb_id => 3, :name => 'created')
67
+ suburb.save!
68
+
69
+ assert(@@callbacks.before_save)
70
+ assert(@@callbacks.after_save)
71
+ assert(@@callbacks.around_save)
72
+
73
+ assert(@@callbacks.before_create)
74
+ assert(@@callbacks.after_create)
75
+ assert(@@callbacks.around_create)
76
+ end
77
+
78
+ def test_update
79
+ refute(@@callbacks.before_save)
80
+ refute(@@callbacks.after_save)
81
+ refute(@@callbacks.around_save)
82
+
83
+ refute(@@callbacks.before_create)
84
+ refute(@@callbacks.after_create)
85
+ refute(@@callbacks.around_create)
86
+
87
+ suburb = suburbs(:first)
88
+ suburb.name = 'Updated'
89
+ suburb.save
90
+
91
+ assert(@@callbacks.before_update)
92
+ assert(@@callbacks.after_update)
93
+ assert(@@callbacks.around_update)
94
+
95
+ assert(@@callbacks.before_save)
96
+ assert(@@callbacks.after_save)
97
+ assert(@@callbacks.around_save)
98
+ end
99
+ end
@@ -1,38 +1,38 @@
1
- require File.expand_path('../abstract_unit', __FILE__)
2
-
3
- class CompositeArraysTest < ActiveSupport::TestCase
4
-
5
- def test_new_primary_keys
6
- keys = CompositePrimaryKeys::CompositeKeys.new
7
- assert_not_nil keys
8
- assert_equal '', keys.to_s
9
- assert_equal '', "#{keys}"
10
- end
11
-
12
- def test_initialize_primary_keys
13
- keys = CompositePrimaryKeys::CompositeKeys.new([1,2,3])
14
- assert_not_nil keys
15
- assert_equal '1,2,3', keys.to_s
16
- assert_equal '1,2,3', "#{keys}"
17
- end
18
-
19
- def test_to_composite_keys
20
- keys = [1,2,3].to_composite_keys
21
- assert_equal CompositePrimaryKeys::CompositeKeys, keys.class
22
- assert_equal '1,2,3', keys.to_s
23
- end
24
-
25
- def test_parse
26
- assert_equal ['1', '2'], CompositePrimaryKeys::CompositeKeys.parse('1,2')
27
- assert_equal ['The USA', '^Washington, D.C.'],
28
- CompositePrimaryKeys::CompositeKeys.parse('The USA,^5EWashington^2C D.C.')
29
- assert_equal ['The USA', '^Washington, D.C.'],
30
- CompositePrimaryKeys::CompositeKeys.parse(['The USA', '^Washington, D.C.'])
31
- end
32
-
33
- def test_to_s
34
- assert_equal '1,2', CompositePrimaryKeys::CompositeKeys.new([1, 2]).to_s
35
- assert_equal 'The USA,^5EWashington^2C D.C.',
36
- CompositePrimaryKeys::CompositeKeys.new(['The USA', '^Washington, D.C.']).to_s
37
- end
38
- end
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class CompositeArraysTest < ActiveSupport::TestCase
4
+
5
+ def test_new_primary_keys
6
+ keys = CompositePrimaryKeys::CompositeKeys.new
7
+ assert_not_nil keys
8
+ assert_equal '', keys.to_s
9
+ assert_equal '', "#{keys}"
10
+ end
11
+
12
+ def test_initialize_primary_keys
13
+ keys = CompositePrimaryKeys::CompositeKeys.new([1,2,3])
14
+ assert_not_nil keys
15
+ assert_equal '1,2,3', keys.to_s
16
+ assert_equal '1,2,3', "#{keys}"
17
+ end
18
+
19
+ def test_to_composite_keys
20
+ keys = [1,2,3].to_composite_keys
21
+ assert_equal CompositePrimaryKeys::CompositeKeys, keys.class
22
+ assert_equal '1,2,3', keys.to_s
23
+ end
24
+
25
+ def test_parse
26
+ assert_equal ['1', '2'], CompositePrimaryKeys::CompositeKeys.parse('1,2')
27
+ assert_equal ['The USA', '^Washington, D.C.'],
28
+ CompositePrimaryKeys::CompositeKeys.parse('The USA,^5EWashington^2C D.C.')
29
+ assert_equal ['The USA', '^Washington, D.C.'],
30
+ CompositePrimaryKeys::CompositeKeys.parse(['The USA', '^Washington, D.C.'])
31
+ end
32
+
33
+ def test_to_s
34
+ assert_equal '1,2', CompositePrimaryKeys::CompositeKeys.new([1, 2]).to_s
35
+ assert_equal 'The USA,^5EWashington^2C D.C.',
36
+ CompositePrimaryKeys::CompositeKeys.new(['The USA', '^Washington, D.C.']).to_s
37
+ end
38
+ end