composite_primary_keys 13.0.1 → 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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +8 -2
  3. data/README.rdoc +1 -0
  4. data/Rakefile +37 -37
  5. data/lib/composite_primary_keys/arel/sqlserver.rb +37 -37
  6. data/lib/composite_primary_keys/arel/to_sql.rb +18 -18
  7. data/lib/composite_primary_keys/associations/association.rb +23 -23
  8. data/lib/composite_primary_keys/associations/collection_association.rb +31 -31
  9. data/lib/composite_primary_keys/associations/foreign_association.rb +15 -15
  10. data/lib/composite_primary_keys/associations/has_many_association.rb +35 -35
  11. data/lib/composite_primary_keys/associations/preloader/association.rb +68 -53
  12. data/lib/composite_primary_keys/associations/through_association.rb +25 -25
  13. data/lib/composite_primary_keys/autosave_association.rb +60 -60
  14. data/lib/composite_primary_keys/composite_arrays.rb +86 -86
  15. data/lib/composite_primary_keys/composite_predicates.rb +71 -70
  16. data/lib/composite_primary_keys/composite_relation.rb +29 -29
  17. data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +10 -10
  18. data/lib/composite_primary_keys/connection_adapters/postgresql/database_statements.rb +26 -26
  19. data/lib/composite_primary_keys/counter_cache.rb +15 -15
  20. data/lib/composite_primary_keys/fixtures.rb +21 -21
  21. data/lib/composite_primary_keys/persistence.rb +21 -7
  22. data/lib/composite_primary_keys/relation/calculations.rb +7 -1
  23. data/lib/composite_primary_keys/sanitization.rb +42 -42
  24. data/lib/composite_primary_keys/transactions.rb +34 -34
  25. data/lib/composite_primary_keys/validations/uniqueness.rb +31 -31
  26. data/lib/composite_primary_keys/version.rb +1 -1
  27. data/lib/composite_primary_keys.rb +1 -1
  28. data/scripts/console.rb +48 -48
  29. data/scripts/txt2html +76 -76
  30. data/scripts/txt2js +65 -65
  31. data/tasks/databases/mysql.rake +40 -40
  32. data/tasks/databases/oracle.rake +41 -41
  33. data/tasks/databases/postgresql.rake +38 -38
  34. data/tasks/databases/sqlite.rake +25 -25
  35. data/tasks/databases/sqlserver.rake +43 -43
  36. data/tasks/website.rake +18 -18
  37. data/test/README_tests.rdoc +56 -56
  38. data/test/abstract_unit.rb +5 -1
  39. data/test/connections/connection_spec.rb +27 -27
  40. data/test/connections/databases.example.yml +40 -40
  41. data/test/connections/databases.yml +40 -39
  42. data/test/fixtures/article.rb +10 -10
  43. data/test/fixtures/articles.yml +7 -7
  44. data/test/fixtures/capitol.rb +3 -3
  45. data/test/fixtures/capitols.yml +16 -16
  46. data/test/fixtures/comment.rb +5 -5
  47. data/test/fixtures/comments.yml +17 -17
  48. data/test/fixtures/dorm.rb +2 -2
  49. data/test/fixtures/dorms.yml +4 -4
  50. data/test/fixtures/employee.rb +5 -5
  51. data/test/fixtures/group.rb +2 -2
  52. data/test/fixtures/groups.yml +6 -6
  53. data/test/fixtures/membership_status.rb +2 -2
  54. data/test/fixtures/membership_statuses.yml +16 -16
  55. data/test/fixtures/memberships.yml +10 -10
  56. data/test/fixtures/product.rb +9 -9
  57. data/test/fixtures/product_tariff.rb +5 -5
  58. data/test/fixtures/product_tariffs.yml +14 -14
  59. data/test/fixtures/products.yml +11 -11
  60. data/test/fixtures/reading.rb +4 -4
  61. data/test/fixtures/readings.yml +10 -10
  62. data/test/fixtures/reference_code.rb +7 -7
  63. data/test/fixtures/reference_codes.yml +28 -28
  64. data/test/fixtures/reference_type.rb +12 -12
  65. data/test/fixtures/reference_types.yml +9 -9
  66. data/test/fixtures/restaurant.rb +9 -9
  67. data/test/fixtures/restaurants.yml +14 -14
  68. data/test/fixtures/restaurants_suburb.rb +2 -2
  69. data/test/fixtures/room.rb +11 -11
  70. data/test/fixtures/room_assignment.rb +13 -13
  71. data/test/fixtures/room_assignments.yml +24 -24
  72. data/test/fixtures/room_attribute.rb +2 -2
  73. data/test/fixtures/room_attribute_assignment.rb +4 -4
  74. data/test/fixtures/room_attribute_assignments.yml +4 -4
  75. data/test/fixtures/room_attributes.yml +2 -2
  76. data/test/fixtures/rooms.yml +12 -12
  77. data/test/fixtures/street.rb +2 -2
  78. data/test/fixtures/student.rb +3 -3
  79. data/test/fixtures/students.yml +15 -15
  80. data/test/fixtures/suburb.rb +5 -5
  81. data/test/fixtures/tariff.rb +5 -5
  82. data/test/fixtures/tariffs.yml +14 -14
  83. data/test/fixtures/topic_sources.yml +3 -3
  84. data/test/fixtures/topics.yml +8 -8
  85. data/test/fixtures/users.yml +10 -10
  86. data/test/plugins/pagination.rb +405 -405
  87. data/test/plugins/pagination_helper.rb +135 -135
  88. data/test/test_attribute_methods.rb +63 -63
  89. data/test/test_callbacks.rb +99 -99
  90. data/test/test_composite_arrays.rb +38 -38
  91. data/test/test_counter_cache.rb +30 -30
  92. data/test/test_dumpable.rb +15 -15
  93. data/test/test_dup.rb +37 -37
  94. data/test/test_equal.rb +26 -26
  95. data/test/test_habtm.rb +141 -141
  96. data/test/test_miscellaneous.rb +32 -32
  97. data/test/test_optimistic.rb +18 -18
  98. data/test/test_pagination.rb +35 -35
  99. data/test/test_polymorphic.rb +43 -43
  100. data/test/test_predicates.rb +59 -59
  101. data/test/test_preload.rb +102 -102
  102. data/test/test_santiago.rb +23 -23
  103. data/test/test_touch.rb +23 -23
  104. data/test/test_tutorial_example.rb +25 -25
  105. data/test/test_validations.rb +13 -13
  106. metadata +6 -6
@@ -1,135 +1,135 @@
1
- module ActionView
2
- module Helpers
3
- # Provides methods for linking to ActionController::Pagination objects using a simple generator API. You can optionally
4
- # also build your links manually using ActionView::Helpers::AssetHelper#link_to like so:
5
- #
6
- # <%= link_to "Previous page", { :page => paginator.current.previous } if paginator.current.previous %>
7
- # <%= link_to "Next page", { :page => paginator.current.next } if paginator.current.next %>
8
- module PaginationHelper
9
- unless const_defined?(:DEFAULT_OPTIONS)
10
- DEFAULT_OPTIONS = {
11
- :name => :page,
12
- :window_size => 2,
13
- :always_show_anchors => true,
14
- :link_to_current_page => false,
15
- :params => {}
16
- }
17
- end
18
-
19
- # Creates a basic HTML link bar for the given +paginator+. Links will be created
20
- # for the next and/or previous page and for a number of other pages around the current
21
- # pages position. The +html_options+ hash is passed to +link_to+ when the links are created.
22
- #
23
- # ==== Options
24
- # <tt>:name</tt>:: the routing name for this paginator
25
- # (defaults to +page+)
26
- # <tt>:prefix</tt>:: prefix for pagination links
27
- # (i.e. Older Pages: 1 2 3 4)
28
- # <tt>:suffix</tt>:: suffix for pagination links
29
- # (i.e. 1 2 3 4 <- Older Pages)
30
- # <tt>:window_size</tt>:: the number of pages to show around
31
- # the current page (defaults to <tt>2</tt>)
32
- # <tt>:always_show_anchors</tt>:: whether or not the first and last
33
- # pages should always be shown
34
- # (defaults to +true+)
35
- # <tt>:link_to_current_page</tt>:: whether or not the current page
36
- # should be linked to (defaults to
37
- # +false+)
38
- # <tt>:params</tt>:: any additional routing parameters
39
- # for page URLs
40
- #
41
- # ==== Examples
42
- # # We'll assume we have a paginator setup in @person_pages...
43
- #
44
- # pagination_links(@person_pages)
45
- # # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a>
46
- #
47
- # pagination_links(@person_pages, :link_to_current_page => true)
48
- # # => <a href="/?page=1/">1</a> <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a>
49
- #
50
- # pagination_links(@person_pages, :always_show_anchors => false)
51
- # # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a>
52
- #
53
- # pagination_links(@person_pages, :window_size => 1)
54
- # # => 1 <a href="/?page=2/">2</a> ... <a href="/?page=10/">10</a>
55
- #
56
- # pagination_links(@person_pages, :params => { :viewer => "flash" })
57
- # # => 1 <a href="/?page=2&amp;viewer=flash/">2</a> <a href="/?page=3&amp;viewer=flash/">3</a> ...
58
- # # <a href="/?page=10&amp;viewer=flash/">10</a>
59
- def pagination_links(paginator, options={}, html_options={})
60
- name = options[:name] || DEFAULT_OPTIONS[:name]
61
- params = (options[:params] || DEFAULT_OPTIONS[:params]).clone
62
-
63
- prefix = options[:prefix] || ''
64
- suffix = options[:suffix] || ''
65
-
66
- pagination_links_each(paginator, options, prefix, suffix) do |n|
67
- params[name] = n
68
- link_to(n.to_s, params, html_options)
69
- end
70
- end
71
-
72
- # Iterate through the pages of a given +paginator+, invoking a
73
- # block for each page number that needs to be rendered as a link.
74
- #
75
- # ==== Options
76
- # <tt>:window_size</tt>:: the number of pages to show around
77
- # the current page (defaults to +2+)
78
- # <tt>:always_show_anchors</tt>:: whether or not the first and last
79
- # pages should always be shown
80
- # (defaults to +true+)
81
- # <tt>:link_to_current_page</tt>:: whether or not the current page
82
- # should be linked to (defaults to
83
- # +false+)
84
- #
85
- # ==== Example
86
- # # Turn paginated links into an Ajax call
87
- # pagination_links_each(paginator, page_options) do |link|
88
- # options = { :url => {:action => 'list'}, :update => 'results' }
89
- # html_options = { :href => url_for(:action => 'list') }
90
- #
91
- # link_to_remote(link.to_s, options, html_options)
92
- # end
93
- def pagination_links_each(paginator, options, prefix = nil, suffix = nil)
94
- options = DEFAULT_OPTIONS.merge(options)
95
- link_to_current_page = options[:link_to_current_page]
96
- always_show_anchors = options[:always_show_anchors]
97
-
98
- current_page = paginator.current_page
99
- window_pages = current_page.window(options[:window_size]).pages
100
- return if window_pages.length <= 1 unless link_to_current_page
101
-
102
- first, last = paginator.first, paginator.last
103
-
104
- html = ''
105
-
106
- html << prefix if prefix
107
-
108
- if always_show_anchors and not (wp_first = window_pages[0]).first?
109
- html << yield(first.number)
110
- html << ' ... ' if wp_first.number - first.number > 1
111
- html << ' '
112
- end
113
-
114
- window_pages.each do |page|
115
- if current_page == page && !link_to_current_page
116
- html << page.number.to_s
117
- else
118
- html << yield(page.number)
119
- end
120
- html << ' '
121
- end
122
-
123
- if always_show_anchors and not (wp_last = window_pages[-1]).last?
124
- html << ' ... ' if last.number - wp_last.number > 1
125
- html << yield(last.number)
126
- end
127
-
128
- html << suffix if suffix
129
-
130
- html
131
- end
132
-
133
- end # PaginationHelper
134
- end # Helpers
135
- end # ActionView
1
+ module ActionView
2
+ module Helpers
3
+ # Provides methods for linking to ActionController::Pagination objects using a simple generator API. You can optionally
4
+ # also build your links manually using ActionView::Helpers::AssetHelper#link_to like so:
5
+ #
6
+ # <%= link_to "Previous page", { :page => paginator.current.previous } if paginator.current.previous %>
7
+ # <%= link_to "Next page", { :page => paginator.current.next } if paginator.current.next %>
8
+ module PaginationHelper
9
+ unless const_defined?(:DEFAULT_OPTIONS)
10
+ DEFAULT_OPTIONS = {
11
+ :name => :page,
12
+ :window_size => 2,
13
+ :always_show_anchors => true,
14
+ :link_to_current_page => false,
15
+ :params => {}
16
+ }
17
+ end
18
+
19
+ # Creates a basic HTML link bar for the given +paginator+. Links will be created
20
+ # for the next and/or previous page and for a number of other pages around the current
21
+ # pages position. The +html_options+ hash is passed to +link_to+ when the links are created.
22
+ #
23
+ # ==== Options
24
+ # <tt>:name</tt>:: the routing name for this paginator
25
+ # (defaults to +page+)
26
+ # <tt>:prefix</tt>:: prefix for pagination links
27
+ # (i.e. Older Pages: 1 2 3 4)
28
+ # <tt>:suffix</tt>:: suffix for pagination links
29
+ # (i.e. 1 2 3 4 <- Older Pages)
30
+ # <tt>:window_size</tt>:: the number of pages to show around
31
+ # the current page (defaults to <tt>2</tt>)
32
+ # <tt>:always_show_anchors</tt>:: whether or not the first and last
33
+ # pages should always be shown
34
+ # (defaults to +true+)
35
+ # <tt>:link_to_current_page</tt>:: whether or not the current page
36
+ # should be linked to (defaults to
37
+ # +false+)
38
+ # <tt>:params</tt>:: any additional routing parameters
39
+ # for page URLs
40
+ #
41
+ # ==== Examples
42
+ # # We'll assume we have a paginator setup in @person_pages...
43
+ #
44
+ # pagination_links(@person_pages)
45
+ # # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a>
46
+ #
47
+ # pagination_links(@person_pages, :link_to_current_page => true)
48
+ # # => <a href="/?page=1/">1</a> <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a>
49
+ #
50
+ # pagination_links(@person_pages, :always_show_anchors => false)
51
+ # # => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a>
52
+ #
53
+ # pagination_links(@person_pages, :window_size => 1)
54
+ # # => 1 <a href="/?page=2/">2</a> ... <a href="/?page=10/">10</a>
55
+ #
56
+ # pagination_links(@person_pages, :params => { :viewer => "flash" })
57
+ # # => 1 <a href="/?page=2&amp;viewer=flash/">2</a> <a href="/?page=3&amp;viewer=flash/">3</a> ...
58
+ # # <a href="/?page=10&amp;viewer=flash/">10</a>
59
+ def pagination_links(paginator, options={}, html_options={})
60
+ name = options[:name] || DEFAULT_OPTIONS[:name]
61
+ params = (options[:params] || DEFAULT_OPTIONS[:params]).clone
62
+
63
+ prefix = options[:prefix] || ''
64
+ suffix = options[:suffix] || ''
65
+
66
+ pagination_links_each(paginator, options, prefix, suffix) do |n|
67
+ params[name] = n
68
+ link_to(n.to_s, params, html_options)
69
+ end
70
+ end
71
+
72
+ # Iterate through the pages of a given +paginator+, invoking a
73
+ # block for each page number that needs to be rendered as a link.
74
+ #
75
+ # ==== Options
76
+ # <tt>:window_size</tt>:: the number of pages to show around
77
+ # the current page (defaults to +2+)
78
+ # <tt>:always_show_anchors</tt>:: whether or not the first and last
79
+ # pages should always be shown
80
+ # (defaults to +true+)
81
+ # <tt>:link_to_current_page</tt>:: whether or not the current page
82
+ # should be linked to (defaults to
83
+ # +false+)
84
+ #
85
+ # ==== Example
86
+ # # Turn paginated links into an Ajax call
87
+ # pagination_links_each(paginator, page_options) do |link|
88
+ # options = { :url => {:action => 'list'}, :update => 'results' }
89
+ # html_options = { :href => url_for(:action => 'list') }
90
+ #
91
+ # link_to_remote(link.to_s, options, html_options)
92
+ # end
93
+ def pagination_links_each(paginator, options, prefix = nil, suffix = nil)
94
+ options = DEFAULT_OPTIONS.merge(options)
95
+ link_to_current_page = options[:link_to_current_page]
96
+ always_show_anchors = options[:always_show_anchors]
97
+
98
+ current_page = paginator.current_page
99
+ window_pages = current_page.window(options[:window_size]).pages
100
+ return if window_pages.length <= 1 unless link_to_current_page
101
+
102
+ first, last = paginator.first, paginator.last
103
+
104
+ html = ''
105
+
106
+ html << prefix if prefix
107
+
108
+ if always_show_anchors and not (wp_first = window_pages[0]).first?
109
+ html << yield(first.number)
110
+ html << ' ... ' if wp_first.number - first.number > 1
111
+ html << ' '
112
+ end
113
+
114
+ window_pages.each do |page|
115
+ if current_page == page && !link_to_current_page
116
+ html << page.number.to_s
117
+ else
118
+ html << yield(page.number)
119
+ end
120
+ html << ' '
121
+ end
122
+
123
+ if always_show_anchors and not (wp_last = window_pages[-1]).last?
124
+ html << ' ... ' if last.number - wp_last.number > 1
125
+ html << yield(last.number)
126
+ end
127
+
128
+ html << suffix if suffix
129
+
130
+ html
131
+ end
132
+
133
+ end # PaginationHelper
134
+ end # Helpers
135
+ end # ActionView
@@ -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,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