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.
- checksums.yaml +4 -4
- data/History.rdoc +8 -2
- data/README.rdoc +1 -0
- data/Rakefile +37 -37
- data/lib/composite_primary_keys/arel/sqlserver.rb +37 -37
- data/lib/composite_primary_keys/arel/to_sql.rb +18 -18
- data/lib/composite_primary_keys/associations/association.rb +23 -23
- data/lib/composite_primary_keys/associations/collection_association.rb +31 -31
- data/lib/composite_primary_keys/associations/foreign_association.rb +15 -15
- data/lib/composite_primary_keys/associations/has_many_association.rb +35 -35
- data/lib/composite_primary_keys/associations/preloader/association.rb +68 -53
- data/lib/composite_primary_keys/associations/through_association.rb +25 -25
- data/lib/composite_primary_keys/autosave_association.rb +60 -60
- data/lib/composite_primary_keys/composite_arrays.rb +86 -86
- data/lib/composite_primary_keys/composite_predicates.rb +71 -70
- data/lib/composite_primary_keys/composite_relation.rb +29 -29
- data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +10 -10
- data/lib/composite_primary_keys/connection_adapters/postgresql/database_statements.rb +26 -26
- data/lib/composite_primary_keys/counter_cache.rb +15 -15
- data/lib/composite_primary_keys/fixtures.rb +21 -21
- data/lib/composite_primary_keys/persistence.rb +21 -7
- data/lib/composite_primary_keys/relation/calculations.rb +7 -1
- data/lib/composite_primary_keys/sanitization.rb +42 -42
- data/lib/composite_primary_keys/transactions.rb +34 -34
- data/lib/composite_primary_keys/validations/uniqueness.rb +31 -31
- data/lib/composite_primary_keys/version.rb +1 -1
- data/lib/composite_primary_keys.rb +1 -1
- data/scripts/console.rb +48 -48
- data/scripts/txt2html +76 -76
- data/scripts/txt2js +65 -65
- data/tasks/databases/mysql.rake +40 -40
- data/tasks/databases/oracle.rake +41 -41
- data/tasks/databases/postgresql.rake +38 -38
- data/tasks/databases/sqlite.rake +25 -25
- data/tasks/databases/sqlserver.rake +43 -43
- data/tasks/website.rake +18 -18
- data/test/README_tests.rdoc +56 -56
- data/test/abstract_unit.rb +5 -1
- data/test/connections/connection_spec.rb +27 -27
- data/test/connections/databases.example.yml +40 -40
- data/test/connections/databases.yml +40 -39
- data/test/fixtures/article.rb +10 -10
- data/test/fixtures/articles.yml +7 -7
- data/test/fixtures/capitol.rb +3 -3
- data/test/fixtures/capitols.yml +16 -16
- data/test/fixtures/comment.rb +5 -5
- data/test/fixtures/comments.yml +17 -17
- data/test/fixtures/dorm.rb +2 -2
- data/test/fixtures/dorms.yml +4 -4
- data/test/fixtures/employee.rb +5 -5
- data/test/fixtures/group.rb +2 -2
- data/test/fixtures/groups.yml +6 -6
- data/test/fixtures/membership_status.rb +2 -2
- data/test/fixtures/membership_statuses.yml +16 -16
- data/test/fixtures/memberships.yml +10 -10
- data/test/fixtures/product.rb +9 -9
- data/test/fixtures/product_tariff.rb +5 -5
- data/test/fixtures/product_tariffs.yml +14 -14
- data/test/fixtures/products.yml +11 -11
- data/test/fixtures/reading.rb +4 -4
- data/test/fixtures/readings.yml +10 -10
- data/test/fixtures/reference_code.rb +7 -7
- data/test/fixtures/reference_codes.yml +28 -28
- data/test/fixtures/reference_type.rb +12 -12
- data/test/fixtures/reference_types.yml +9 -9
- data/test/fixtures/restaurant.rb +9 -9
- data/test/fixtures/restaurants.yml +14 -14
- data/test/fixtures/restaurants_suburb.rb +2 -2
- data/test/fixtures/room.rb +11 -11
- data/test/fixtures/room_assignment.rb +13 -13
- data/test/fixtures/room_assignments.yml +24 -24
- data/test/fixtures/room_attribute.rb +2 -2
- data/test/fixtures/room_attribute_assignment.rb +4 -4
- data/test/fixtures/room_attribute_assignments.yml +4 -4
- data/test/fixtures/room_attributes.yml +2 -2
- data/test/fixtures/rooms.yml +12 -12
- data/test/fixtures/street.rb +2 -2
- data/test/fixtures/student.rb +3 -3
- data/test/fixtures/students.yml +15 -15
- data/test/fixtures/suburb.rb +5 -5
- data/test/fixtures/tariff.rb +5 -5
- data/test/fixtures/tariffs.yml +14 -14
- data/test/fixtures/topic_sources.yml +3 -3
- data/test/fixtures/topics.yml +8 -8
- data/test/fixtures/users.yml +10 -10
- data/test/plugins/pagination.rb +405 -405
- data/test/plugins/pagination_helper.rb +135 -135
- data/test/test_attribute_methods.rb +63 -63
- data/test/test_callbacks.rb +99 -99
- data/test/test_composite_arrays.rb +38 -38
- data/test/test_counter_cache.rb +30 -30
- data/test/test_dumpable.rb +15 -15
- data/test/test_dup.rb +37 -37
- data/test/test_equal.rb +26 -26
- data/test/test_habtm.rb +141 -141
- data/test/test_miscellaneous.rb +32 -32
- data/test/test_optimistic.rb +18 -18
- data/test/test_pagination.rb +35 -35
- data/test/test_polymorphic.rb +43 -43
- data/test/test_predicates.rb +59 -59
- data/test/test_preload.rb +102 -102
- data/test/test_santiago.rb +23 -23
- data/test/test_touch.rb +23 -23
- data/test/test_tutorial_example.rb +25 -25
- data/test/test_validations.rb +13 -13
- 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&viewer=flash/">2</a> <a href="/?page=3&viewer=flash/">3</a> ...
|
58
|
-
# # <a href="/?page=10&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&viewer=flash/">2</a> <a href="/?page=3&viewer=flash/">3</a> ...
|
58
|
+
# # <a href="/?page=10&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
|
data/test/test_callbacks.rb
CHANGED
@@ -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
|