trollied 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +294 -0
  4. data/README.rdoc +96 -0
  5. data/Rakefile +55 -0
  6. data/VERSION +1 -0
  7. data/app/controllers/line_items_controller.rb +168 -0
  8. data/app/controllers/notes_controller.rb +121 -0
  9. data/app/controllers/orders_controller.rb +210 -0
  10. data/app/controllers/trolleys_controller.rb +26 -0
  11. data/app/helpers/gets_trollied_helper.rb +31 -0
  12. data/app/helpers/line_items_helper.rb +5 -0
  13. data/app/helpers/orders_helper.rb +184 -0
  14. data/app/models/line_item.rb +14 -0
  15. data/app/models/note.rb +15 -0
  16. data/app/models/order.rb +29 -0
  17. data/app/models/trolley.rb +51 -0
  18. data/app/views/line_items/_form.html.erb +8 -0
  19. data/app/views/line_items/_line_item.html.erb +12 -0
  20. data/app/views/line_items/new.html.erb +11 -0
  21. data/app/views/notes/_form.html.erb +7 -0
  22. data/app/views/notes/_new.html.erb +14 -0
  23. data/app/views/notes/_note.html.erb +4 -0
  24. data/app/views/notes/index.html.erb +13 -0
  25. data/app/views/notes/new.html.erb +5 -0
  26. data/app/views/orders/_date_pickers.html.erb +15 -0
  27. data/app/views/orders/_order.html.erb +53 -0
  28. data/app/views/orders/index.html.erb +22 -0
  29. data/app/views/orders/show.html.erb +14 -0
  30. data/app/views/trolleys/_orders.html.erb +13 -0
  31. data/app/views/trolleys/show.html.erb +16 -0
  32. data/config/locales/en.yml +115 -0
  33. data/config/routes.rb +8 -0
  34. data/generators/trollied_migrations/USAGE +2 -0
  35. data/generators/trollied_migrations/templates/line_items_migration.rb +16 -0
  36. data/generators/trollied_migrations/templates/notes_migration.rb +15 -0
  37. data/generators/trollied_migrations/templates/orders_migration.rb +15 -0
  38. data/generators/trollied_migrations/templates/trolleys_migration.rb +14 -0
  39. data/generators/trollied_migrations/trollied_migrations_generator.rb +13 -0
  40. data/lib/gets_trollied.rb +38 -0
  41. data/lib/gets_trollied_controller_helpers.rb +29 -0
  42. data/lib/has_trolley.rb +42 -0
  43. data/lib/has_trolley_controller_helpers.rb +43 -0
  44. data/lib/order_status.rb +121 -0
  45. data/lib/trollied.rb +5 -0
  46. data/rails/init.rb +10 -0
  47. data/test/full_2_3_5_app_with_tests/.gitignore +27 -0
  48. data/test/full_2_3_5_app_with_tests/README +1 -0
  49. data/test/full_2_3_5_app_with_tests/Rakefile +10 -0
  50. data/test/full_2_3_5_app_with_tests/app/controllers/application_controller.rb +14 -0
  51. data/test/full_2_3_5_app_with_tests/app/controllers/items_controller.rb +85 -0
  52. data/test/full_2_3_5_app_with_tests/app/controllers/user_controller.rb +2 -0
  53. data/test/full_2_3_5_app_with_tests/app/helpers/application_helper.rb +3 -0
  54. data/test/full_2_3_5_app_with_tests/app/helpers/items_helper.rb +2 -0
  55. data/test/full_2_3_5_app_with_tests/app/helpers/user_helper.rb +2 -0
  56. data/test/full_2_3_5_app_with_tests/app/models/item.rb +4 -0
  57. data/test/full_2_3_5_app_with_tests/app/models/user.rb +3 -0
  58. data/test/full_2_3_5_app_with_tests/app/views/items/edit.html.erb +20 -0
  59. data/test/full_2_3_5_app_with_tests/app/views/items/index.html.erb +22 -0
  60. data/test/full_2_3_5_app_with_tests/app/views/items/new.html.erb +19 -0
  61. data/test/full_2_3_5_app_with_tests/app/views/items/show.html.erb +13 -0
  62. data/test/full_2_3_5_app_with_tests/app/views/layouts/application.html.erb +19 -0
  63. data/test/full_2_3_5_app_with_tests/app/views/layouts/items.html.erb +19 -0
  64. data/test/full_2_3_5_app_with_tests/config/boot.rb +110 -0
  65. data/test/full_2_3_5_app_with_tests/config/database.yml +22 -0
  66. data/test/full_2_3_5_app_with_tests/config/environment.rb +57 -0
  67. data/test/full_2_3_5_app_with_tests/config/environments/development.rb +17 -0
  68. data/test/full_2_3_5_app_with_tests/config/environments/production.rb +28 -0
  69. data/test/full_2_3_5_app_with_tests/config/environments/test.rb +28 -0
  70. data/test/full_2_3_5_app_with_tests/config/initializers/backtrace_silencers.rb +7 -0
  71. data/test/full_2_3_5_app_with_tests/config/initializers/inflections.rb +10 -0
  72. data/test/full_2_3_5_app_with_tests/config/initializers/mime_types.rb +5 -0
  73. data/test/full_2_3_5_app_with_tests/config/initializers/new_rails_defaults.rb +21 -0
  74. data/test/full_2_3_5_app_with_tests/config/initializers/session_store.rb +15 -0
  75. data/test/full_2_3_5_app_with_tests/config/locales/en.yml +4 -0
  76. data/test/full_2_3_5_app_with_tests/config/locales/fr.yml +4 -0
  77. data/test/full_2_3_5_app_with_tests/config/locales/zh.yml +4 -0
  78. data/test/full_2_3_5_app_with_tests/config/locales.yml +5 -0
  79. data/test/full_2_3_5_app_with_tests/config/routes.rb +8 -0
  80. data/test/full_2_3_5_app_with_tests/config.ru +6 -0
  81. data/test/full_2_3_5_app_with_tests/db/migrate/20100407010602_create_items.rb +13 -0
  82. data/test/full_2_3_5_app_with_tests/db/migrate/20110426030509_create_users.rb +13 -0
  83. data/test/full_2_3_5_app_with_tests/db/migrate/20110426033906_create_trolleys.rb +14 -0
  84. data/test/full_2_3_5_app_with_tests/db/migrate/20110426033907_create_orders.rb +15 -0
  85. data/test/full_2_3_5_app_with_tests/db/migrate/20110426033908_create_line_items.rb +16 -0
  86. data/test/full_2_3_5_app_with_tests/db/migrate/20110615234040_create_notes.rb +15 -0
  87. data/test/full_2_3_5_app_with_tests/db/schema.rb +56 -0
  88. data/test/full_2_3_5_app_with_tests/db/seeds.rb +7 -0
  89. data/test/full_2_3_5_app_with_tests/doc/README_FOR_APP +2 -0
  90. data/test/full_2_3_5_app_with_tests/public/404.html +30 -0
  91. data/test/full_2_3_5_app_with_tests/public/422.html +30 -0
  92. data/test/full_2_3_5_app_with_tests/public/500.html +30 -0
  93. data/test/full_2_3_5_app_with_tests/public/favicon.ico +0 -0
  94. data/test/full_2_3_5_app_with_tests/public/images/rails.png +0 -0
  95. data/test/full_2_3_5_app_with_tests/public/index.html +275 -0
  96. data/test/full_2_3_5_app_with_tests/public/javascripts/application.js +2 -0
  97. data/test/full_2_3_5_app_with_tests/public/javascripts/controls.js +963 -0
  98. data/test/full_2_3_5_app_with_tests/public/javascripts/dragdrop.js +973 -0
  99. data/test/full_2_3_5_app_with_tests/public/javascripts/effects.js +1128 -0
  100. data/test/full_2_3_5_app_with_tests/public/javascripts/prototype.js +4320 -0
  101. data/test/full_2_3_5_app_with_tests/public/robots.txt +5 -0
  102. data/test/full_2_3_5_app_with_tests/public/stylesheets/scaffold.css +54 -0
  103. data/test/full_2_3_5_app_with_tests/script/about +4 -0
  104. data/test/full_2_3_5_app_with_tests/script/console +3 -0
  105. data/test/full_2_3_5_app_with_tests/script/dbconsole +3 -0
  106. data/test/full_2_3_5_app_with_tests/script/destroy +3 -0
  107. data/test/full_2_3_5_app_with_tests/script/generate +3 -0
  108. data/test/full_2_3_5_app_with_tests/script/performance/benchmarker +3 -0
  109. data/test/full_2_3_5_app_with_tests/script/performance/profiler +3 -0
  110. data/test/full_2_3_5_app_with_tests/script/plugin +3 -0
  111. data/test/full_2_3_5_app_with_tests/script/runner +3 -0
  112. data/test/full_2_3_5_app_with_tests/script/server +3 -0
  113. data/test/full_2_3_5_app_with_tests/test/factories.rb +22 -0
  114. data/test/full_2_3_5_app_with_tests/test/functional/line_items_controller_test.rb +69 -0
  115. data/test/full_2_3_5_app_with_tests/test/functional/orders_controller_test.rb +75 -0
  116. data/test/full_2_3_5_app_with_tests/test/integration/gets_trollied_test.rb +38 -0
  117. data/test/full_2_3_5_app_with_tests/test/integration/order_test.rb +79 -0
  118. data/test/full_2_3_5_app_with_tests/test/integration/trolley_test.rb +71 -0
  119. data/test/full_2_3_5_app_with_tests/test/performance/browsing_test.rb +9 -0
  120. data/test/full_2_3_5_app_with_tests/test/selenium.rb +83 -0
  121. data/test/full_2_3_5_app_with_tests/test/test_helper.rb +54 -0
  122. data/test/full_2_3_5_app_with_tests/test/unit/gets_trollied_test.rb +29 -0
  123. data/test/full_2_3_5_app_with_tests/test/unit/helpers/gets_trollied_helper_test.rb +75 -0
  124. data/test/full_2_3_5_app_with_tests/test/unit/helpers/orders_helper_test.rb +34 -0
  125. data/test/full_2_3_5_app_with_tests/test/unit/line_item_test.rb +28 -0
  126. data/test/full_2_3_5_app_with_tests/test/unit/note_test.rb +14 -0
  127. data/test/full_2_3_5_app_with_tests/test/unit/order_test.rb +65 -0
  128. data/test/full_2_3_5_app_with_tests/test/unit/trolley_test.rb +80 -0
  129. data/test/full_2_3_5_app_with_tests/tmp/restart.txt +0 -0
  130. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/init.rb +1 -0
  131. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/base.rb +31 -0
  132. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/force_extension.rb +57 -0
  133. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/locale.rb +70 -0
  134. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/pagination.rb +33 -0
  135. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/uuid_token.rb +78 -0
  136. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter.rb +94 -0
  137. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/force_extension_spec.rb +65 -0
  138. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/generation_spec.rb +367 -0
  139. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/pagination_extension_spec.rb +19 -0
  140. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/recognition_spec.rb +76 -0
  141. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/routing_filter_spec.rb +114 -0
  142. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/spec_helper.rb +108 -0
  143. data/test/helper.rb +10 -0
  144. metadata +345 -0
@@ -0,0 +1,65 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe 'RoutingFilter::ForceExtension' do
4
+ include RoutingFilterHelpers
5
+
6
+ before :each do
7
+ setup_environment(:force_extension)
8
+ end
9
+
10
+ describe 'url recognition' do
11
+ it 'recognizes the path /sections/1.html' do
12
+ should_recognize_path '/sections/1.html', @section_params
13
+ end
14
+
15
+ it 'recognizes the path /sections/1/articles/1.html' do
16
+ should_recognize_path '/sections/1/articles/1.html', @article_params
17
+ end
18
+
19
+ it 'does not recognize the path /sections/1/articles/1.foobar' do
20
+ lambda { @set.recognize_path('/sections/1/articles/1.foobar', {}) }.should raise_error(ActionController::RoutingError)
21
+ end
22
+ end
23
+
24
+ describe 'url generation' do
25
+ it 'appends the .html extension to generated paths (section_path)' do
26
+ section_path(:id => 1).should == '/sections/1.html'
27
+ end
28
+
29
+ it 'appends the .html extension to generated paths (section_article_path)' do
30
+ section_article_path(:section_id => 1, :id => 1).should == '/sections/1/articles/1.html'
31
+ end
32
+
33
+ it 'appends the .html extension to generated paths (admin_articles_path)' do
34
+ admin_articles_path.should == '/admin/articles.html'
35
+ end
36
+
37
+ it 'does not replace or add on an existing extension' do
38
+ section_path(:id => 1, :format => 'xml').should == '/sections/1.xml'
39
+ end
40
+
41
+ it 'works with url query params' do
42
+ section_path(:id => 1, :foo => 'bar').should == '/sections/1.html?foo=bar'
43
+ end
44
+
45
+ it 'excludes / by default' do
46
+ home_path.should == '/'
47
+ end
48
+
49
+ it 'excludes http://test.host/ by default' do
50
+ home_url.should == 'http://test.host/'
51
+ end
52
+
53
+ it 'excludes with custom regexp' do
54
+ setup_environment { |map| map.filter :force_extension, :exclude => %r(^/(admin|$)) }
55
+ home_path.should == '/'
56
+ admin_articles_path.should == '/admin/articles'
57
+ section_path(:id => 1).should == '/sections/1.html'
58
+ end
59
+
60
+ it 'does not exclude / when :exclude => false was passed' do
61
+ setup_environment { |map| map.filter :force_extension, :exclude => false }
62
+ home_path.should == '/.html'
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,367 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe 'RoutingFilter', 'url generation' do
4
+ include RoutingFilterHelpers
5
+
6
+ before :each do
7
+ setup_environment :locale, :pagination
8
+
9
+ @site = Site.new
10
+ @section = Section.new
11
+ @article = Article.new
12
+ end
13
+
14
+ describe "named route url_helpers" do
15
+ describe "a not nested resource" do
16
+ it 'does not change the section_path when given page option equals 1' do
17
+ section_path(:id => 1, :page => 1).should == '/en/sections/1'
18
+ end
19
+
20
+ it 'appends the pages segments to section_path when given page option does not equal 1' do
21
+ section_path(:id => 1, :page => 2).should == '/en/sections/1/pages/2'
22
+ end
23
+
24
+ it 'prepends the current locale to section_path' do
25
+ I18n.locale = :de
26
+ section_path(:id => 1).should == '/de/sections/1'
27
+ end
28
+
29
+ it 'prepends a given locale param to section_path' do
30
+ I18n.locale = :de
31
+ section_path(:id => 1, :locale => :fi).should == '/fi/sections/1'
32
+ end
33
+
34
+ it 'does not prepend a locale to section_path if given locale is false' do
35
+ section_path(:id => 1, :locale => false).should == '/sections/1'
36
+ end
37
+
38
+ it 'works on section_path with both a locale and page option' do
39
+ section_path(:id => 1, :locale => :fi, :page => 2).should == '/fi/sections/1/pages/2'
40
+ end
41
+
42
+ it 'should not prepend an invalid locale to section_path' do
43
+ section_path(:id => 1, :locale => :aa).should == '/sections/1'
44
+ end
45
+
46
+ it 'should prepend a longer locale to section_path' do
47
+ section_path(:id => 1, :locale => 'en-US').should == '/en-US/sections/1'
48
+ end
49
+
50
+ it 'should not prepend the default locale when configured not to' do
51
+ RoutingFilter::Locale.include_default_locale = false
52
+ section_path(:id => 1, :locale => :en).should == '/sections/1'
53
+ end
54
+ end
55
+
56
+ describe "a nested resource" do
57
+ it 'does not change the section_article_path when given page option equals 1' do
58
+ section_article_path(:section_id => 1, :id => 1, :page => 1).should == '/en/sections/1/articles/1'
59
+ end
60
+
61
+ it 'appends the pages segments to section_article_path when given page option does not equal 1' do
62
+ section_article_path(:section_id => 1, :id => 1, :page => 2).should == '/en/sections/1/articles/1/pages/2'
63
+ end
64
+
65
+ it 'prepends the current locale to section_article_path' do
66
+ I18n.locale = :de
67
+ section_article_path(:section_id => 1, :id => 1).should == '/de/sections/1/articles/1'
68
+ end
69
+
70
+ it 'prepends a given locale param to section_article_path' do
71
+ I18n.locale = :de
72
+ section_article_path(:section_id => 1, :id => 1, :locale => :fi).should == '/fi/sections/1/articles/1'
73
+ end
74
+
75
+ it 'does not prepend a locale to section_article_path if given locale is false' do
76
+ section_article_path(:section_id => 1, :id => 1, :locale => false).should == '/sections/1/articles/1'
77
+ end
78
+
79
+ it 'works on section_article_path with both a locale and page option' do
80
+ section_article_path(:section_id => 1, :id => 1, :locale => :fi, :page => 2).should == '/fi/sections/1/articles/1/pages/2'
81
+ end
82
+
83
+ it 'should not prepend an invalid locale to section_article_path' do
84
+ section_article_path(:section_id => 1, :id => 1, :locale => :aa).should == '/sections/1/articles/1'
85
+ end
86
+
87
+ it 'should prepend a longer locale to section_article_path' do
88
+ section_article_path(:section_id => 1, :id => 1, :locale => 'en-US').should == '/en-US/sections/1/articles/1'
89
+ end
90
+
91
+ it 'should not prepend the default locale when configured not to' do
92
+ RoutingFilter::Locale.include_default_locale = false
93
+ section_article_path(:section_id => 1, :id => 1, :locale => :en).should == '/sections/1/articles/1'
94
+ end
95
+ end
96
+ end
97
+
98
+ describe 'when used with named route url_helper with "optimized" generation blocks' do
99
+ describe "a not nested resource" do
100
+ it 'does not change the section_path when given page option equals 1' do
101
+ section_path(1, :page => 1).should == '/en/sections/1'
102
+ end
103
+
104
+ it 'appends the pages segments to section_path when given page option does not equal 1' do
105
+ section_path(1, :page => 2).should == '/en/sections/1/pages/2'
106
+ end
107
+
108
+ it 'prepends the current locale to section_path' do
109
+ I18n.locale = :de
110
+ section_path(1).should == '/de/sections/1'
111
+ end
112
+
113
+ it 'prepends a given locale param to section_path' do
114
+ I18n.locale = :de
115
+ section_path(1, :locale => :fi).should == '/fi/sections/1'
116
+ end
117
+
118
+ it 'does not prepend a locale to section_path if given locale is false' do
119
+ section_path(1, :locale => false).should == '/sections/1'
120
+ end
121
+
122
+ it 'works for section_path with both a locale and page option' do
123
+ section_path(1, :locale => :fi, :page => 2).should == '/fi/sections/1/pages/2'
124
+ end
125
+
126
+ it 'should not prepend an invalid locale to section_path' do
127
+ section_path(1, :locale => :aa).should == '/sections/1'
128
+ end
129
+
130
+ it 'should prepend a longer locale to section_path' do
131
+ section_path(1, :locale => 'en-US').should == '/en-US/sections/1'
132
+ end
133
+
134
+ it 'should not prepend the default locale when configured not to' do
135
+ RoutingFilter::Locale.include_default_locale = false
136
+ section_path(1, :locale => :en).should == '/sections/1'
137
+ end
138
+ end
139
+
140
+ describe "a nested resource" do
141
+ it 'does not change the section_article_path when given page option equals 1' do
142
+ section_article_path(1, 1, :page => 1).should == '/en/sections/1/articles/1'
143
+ end
144
+
145
+ it 'appends the pages segments to section_article_path when given page option does not equal 1' do
146
+ section_article_path(1, 1, :page => 2).should == '/en/sections/1/articles/1/pages/2'
147
+ end
148
+
149
+ it 'prepends the current locale to section_article_path' do
150
+ I18n.locale = :de
151
+ section_article_path(1, 1).should == '/de/sections/1/articles/1'
152
+ end
153
+
154
+ it 'prepends a given locale param to section_article_path' do
155
+ I18n.locale = :de
156
+ section_article_path(1, 1, :locale => :fi).should == '/fi/sections/1/articles/1'
157
+ end
158
+
159
+ it 'does not prepend a locale to section_article_path if given locale is false' do
160
+ section_article_path(1, 1, :locale => false).should == '/sections/1/articles/1'
161
+ end
162
+
163
+ it 'works for section_article_path with both a locale and page option' do
164
+ section_article_path(1, 1, :locale => :fi, :page => 2).should == '/fi/sections/1/articles/1/pages/2'
165
+ end
166
+
167
+ it 'should not prepend an invalid locale to section_article_path' do
168
+ section_article_path(1, 1, :locale => :aa).should == '/sections/1/articles/1'
169
+ end
170
+
171
+ it 'should prepend a longer locale to section_article_path' do
172
+ section_article_path(1, 1, :locale => 'en-US').should == '/en-US/sections/1/articles/1'
173
+ end
174
+
175
+ it 'should not prepend the default locale when configured not to' do
176
+ RoutingFilter::Locale.include_default_locale = false
177
+ section_article_path(1, 1, :locale => :en).should == '/sections/1/articles/1'
178
+ end
179
+ end
180
+ end
181
+
182
+ describe 'when used with a polymorphic_path' do
183
+ describe "a not nested resource" do
184
+ it 'does not change the section_path when given page option equals 1' do
185
+ section_path(@section, :page => 1).should == '/en/sections/1'
186
+ end
187
+
188
+ it 'appends the pages segments to section_path when given page option does not equal 1' do
189
+ section_path(@section, :page => 2).should == '/en/sections/1/pages/2'
190
+ end
191
+
192
+ it 'prepends the current locale to section_path' do
193
+ I18n.locale = :de
194
+ section_path(@section).should == '/de/sections/1'
195
+ end
196
+
197
+ it 'prepends a given locale param to section_path' do
198
+ I18n.locale = :de
199
+ section_path(@section, :locale => :fi).should == '/fi/sections/1'
200
+ end
201
+
202
+ it 'does not prepend a locale to section_path if given locale is false' do
203
+ section_path(@section, :locale => false).should == '/sections/1'
204
+ end
205
+
206
+ it 'works for section_path with both a locale and page option' do
207
+ section_path(@section, :locale => :fi, :page => 2).should == '/fi/sections/1/pages/2'
208
+ end
209
+
210
+ it 'should not prepend an invalid locale to section_path' do
211
+ section_path(@section, :locale => :aa).should == '/sections/1'
212
+ end
213
+
214
+ it 'should prepend a longer locale to section_path' do
215
+ section_path(@section, :locale => 'en-US').should == '/en-US/sections/1'
216
+ end
217
+
218
+ it 'should not prepend the default locale when configured not to' do
219
+ RoutingFilter::Locale.include_default_locale = false
220
+ section_path(@section, :locale => :en).should == '/sections/1'
221
+ end
222
+ end
223
+
224
+ describe "a nested resource" do
225
+ it 'does not change the section_article_path when given page option equals 1' do
226
+ section_article_path(@section, @article, :page => 1).should == '/en/sections/1/articles/1'
227
+ end
228
+
229
+ it 'appends the pages segments to section_article_path when given page option does not equal 1' do
230
+ section_article_path(@section, @article, :page => 2).should == '/en/sections/1/articles/1/pages/2'
231
+ end
232
+
233
+ it 'prepends the current locale to section_article_path' do
234
+ I18n.locale = :de
235
+ section_article_path(@section, @article).should == '/de/sections/1/articles/1'
236
+ end
237
+
238
+ it 'prepends a given locale param to section_article_path' do
239
+ I18n.locale = :de
240
+ section_article_path(@section, @article, :locale => :fi).should == '/fi/sections/1/articles/1'
241
+ end
242
+
243
+ it 'does not prepend a locale to section_article_path if given locale is false' do
244
+ section_article_path(@section, @article, :locale => false).should == '/sections/1/articles/1'
245
+ end
246
+
247
+ it 'works for section_article_path with both a locale and page option' do
248
+ section_article_path(@section, @article, :locale => :fi, :page => 2).should == '/fi/sections/1/articles/1/pages/2'
249
+ end
250
+
251
+ it 'should not prepend an invalid locale to section_article_path' do
252
+ section_article_path(@section, @article, :locale => :aa).should == '/sections/1/articles/1'
253
+ end
254
+
255
+ it 'should prepend a longer locale to section_article_path' do
256
+ section_article_path(@section, @article, :locale => 'en-US').should == '/en-US/sections/1/articles/1'
257
+ end
258
+
259
+ it 'should not prepend the default locale when configured not to' do
260
+ RoutingFilter::Locale.include_default_locale = false
261
+ section_article_path(@section, @article, :locale => :en).should == '/sections/1/articles/1'
262
+ end
263
+ end
264
+ end
265
+
266
+ describe 'when used with url_for and an ActivRecord instance' do
267
+ describe "a not nested resource" do
268
+ it 'does not change the url_for result when given page option equals 1' do
269
+ params = @section_params.update :id => @section, :page => 1
270
+ url_for(params).should == 'http://test.host/en/sections/1'
271
+ end
272
+
273
+ it 'appends the pages segments to url_for result when given page option does not equal 1' do
274
+ params = @section_params.update :id => @section, :page => 2
275
+ url_for(params).should == 'http://test.host/en/sections/1/pages/2'
276
+ end
277
+
278
+ it 'prepends the current locale to url_for result' do
279
+ I18n.locale = :de
280
+ params = @section_params.update :id => @section
281
+ url_for(params).should == 'http://test.host/de/sections/1'
282
+ end
283
+
284
+ it 'prepends a given locale param url_for result' do
285
+ I18n.locale = :de
286
+ params = @section_params.update :id => @section, :locale => :fi
287
+ url_for(params).should == 'http://test.host/fi/sections/1'
288
+ end
289
+
290
+ it 'does not prepend a locale to url_for result if given locale is false' do
291
+ params = @section_params.update :id => @section, :locale => false
292
+ url_for(params).should == 'http://test.host/sections/1'
293
+ end
294
+
295
+ it 'works for url_for result with both a locale and page option' do
296
+ params = @section_params.update :id => @section, :locale => :fi, :page => 2
297
+ url_for(params).should == 'http://test.host/fi/sections/1/pages/2'
298
+ end
299
+
300
+ it 'should not prepend an invalid locale to section_path' do
301
+ params = @section_params.update :id => @section, :locale => :aa
302
+ url_for(params).should == 'http://test.host/sections/1'
303
+ end
304
+
305
+ it 'should prepend a longer locale to section_path' do
306
+ params = @section_params.update :id => @section, :locale => 'en-US'
307
+ url_for(params).should == 'http://test.host/en-US/sections/1'
308
+ end
309
+
310
+ it 'should not prepend the default locale when configured not to' do
311
+ RoutingFilter::Locale.include_default_locale = false
312
+ params = @section_params.update :id => @section, :locale => :en
313
+ url_for(params).should == 'http://test.host/sections/1'
314
+ end
315
+ end
316
+
317
+ describe "a nested resource" do
318
+ it 'does not change the url_for result when given page option equals 1' do
319
+ params = @article_params.update :section_id => @section, :id => @article, :page => 1
320
+ url_for(params).should == 'http://test.host/en/sections/1/articles/1'
321
+ end
322
+
323
+ it 'appends the pages segments to url_for result when given page option does not equal 1' do
324
+ params = @article_params.update :section_id => @section, :id => @article, :page => 2
325
+ url_for(params).should == 'http://test.host/en/sections/1/articles/1/pages/2'
326
+ end
327
+
328
+ it 'prepends the current locale to url_for result' do
329
+ I18n.locale = :de
330
+ params = @article_params.update :section_id => @section, :id => @article
331
+ url_for(params).should == 'http://test.host/de/sections/1/articles/1'
332
+ end
333
+
334
+ it 'prepends a given locale param to url_for result' do
335
+ I18n.locale = :de
336
+ params = @article_params.update :section_id => @section, :id => @article, :locale => :fi
337
+ url_for(params).should == 'http://test.host/fi/sections/1/articles/1'
338
+ end
339
+
340
+ it 'does not prepend a locale to url_for result if given locale is false' do
341
+ params = @article_params.update :section_id => @section, :id => @article, :locale => false
342
+ url_for(params).should == 'http://test.host/sections/1/articles/1'
343
+ end
344
+
345
+ it 'works for url_for result with both a locale and page option' do
346
+ params = @article_params.update :section_id => @section, :id => @article, :locale => :fi, :page => 2
347
+ url_for(params).should == 'http://test.host/fi/sections/1/articles/1/pages/2'
348
+ end
349
+
350
+ it 'should not prepend an invalid locale to url_for result' do
351
+ params = @article_params.update :section_id => @section, :id => @article, :locale => :aa
352
+ url_for(params).should == 'http://test.host/sections/1/articles/1'
353
+ end
354
+
355
+ it 'should prepend a longer locale to section_article_path' do
356
+ params = @article_params.update :section_id => @section, :id => @article, :locale => 'en-US'
357
+ url_for(params).should == 'http://test.host/en-US/sections/1/articles/1'
358
+ end
359
+
360
+ it 'should not prepend the default locale when configured not to' do
361
+ RoutingFilter::Locale.include_default_locale = false
362
+ params = @article_params.update :section_id => @section, :id => @article, :locale => :en
363
+ url_for(params).should == 'http://test.host/sections/1/articles/1'
364
+ end
365
+ end
366
+ end
367
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe 'RoutingFilter::Pagination' do
4
+ include RoutingFilterHelpers
5
+
6
+ before :each do
7
+ setup_environment(:pagination)
8
+ end
9
+
10
+ describe 'url generation' do
11
+ it 'appends the segments /pages/:page to the generated path' do
12
+ section_path(1, :page => 2).should == '/sections/1/pages/2'
13
+ end
14
+
15
+ it 'appends the segments /pages/:page to the generated path excluding http get params' do
16
+ section_path(1, :page => 2, :foo => 'bar').should == '/sections/1/pages/2?foo=bar'
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,76 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe 'RoutingFilter', 'url recognition' do
4
+ include RoutingFilterHelpers
5
+
6
+ before :each do
7
+ setup_environment :locale, :pagination
8
+ end
9
+
10
+ it 'recognizes the path /de/sections/1 and sets the :locale param' do
11
+ should_recognize_path '/de/sections/1', @section_params.update(:locale => 'de')
12
+ end
13
+
14
+ it 'recognizes the path /sections/1/pages/1 and sets the :page param' do
15
+ should_recognize_path '/sections/1/pages/1', @section_params.update(:page => 1)
16
+ end
17
+
18
+ it 'recognizes the path /de/sections/1/pages/1 and sets the :locale param' do
19
+ should_recognize_path '/de/sections/1/pages/1', @section_params.update(:locale => 'de', :page => 1)
20
+ end
21
+
22
+ it 'recognizes the path /sections/1/articles/1 and sets the :locale param' do
23
+ should_recognize_path '/sections/1/articles/1', @article_params
24
+ end
25
+
26
+ it 'recognizes the path /de/sections/1/articles/1 and sets the :locale param' do
27
+ should_recognize_path '/de/sections/1/articles/1', @article_params.update(:locale => 'de')
28
+ end
29
+
30
+ it 'recognizes the path /de/sections/1/articles/1/pages/1 and sets the :locale param' do
31
+ should_recognize_path '/de/sections/1/articles/1/pages/1', @article_params.update(:locale => 'de', :page => 1)
32
+ end
33
+
34
+ it 'recognizes the path /sections/1 and does not set a :locale param' do
35
+ should_recognize_path '/sections/1', @section_params
36
+ end
37
+
38
+ it 'recognizes the path /sections/1 and does not set a :page param' do
39
+ should_recognize_path '/sections/1', @section_params
40
+ end
41
+
42
+ # Test that routing errors are thrown for invalid locales
43
+ it 'does not recognizes the path /aa/sections/1 and does not set a :locale param' do
44
+ begin
45
+ should_recognize_path '/aa/sections/1', @section_params.update(:locale => 'aa')
46
+ false
47
+ rescue ActionController::RoutingError
48
+ true
49
+ end
50
+ end
51
+
52
+ it 'recognizes the path /en-US/sections/1 and sets a :locale param' do
53
+ should_recognize_path '/en-US/sections/1', @section_params.update(:locale => 'en-US')
54
+ end
55
+
56
+ it 'recognizes the path /sections/1/articles/1 and does not set a :locale param' do
57
+ should_recognize_path '/sections/1/articles/1', @article_params
58
+ end
59
+
60
+ it 'recognizes the path /sections/1/articles/1 and does not set a :page param' do
61
+ should_recognize_path '/sections/1/articles/1', @article_params
62
+ end
63
+
64
+ it 'invalid locale: does not recognize the path /aa/sections/1/articles/1 and does not set a :locale param' do
65
+ lambda { @set.recognize_path('/aa/sections/1/articles/1', {}) }.should raise_error(ActionController::RoutingError)
66
+ end
67
+
68
+ it 'recognizes the path /en-US/sections/1/articles/1 and sets a :locale param' do
69
+ should_recognize_path '/en-US/sections/1/articles/1', @article_params.update(:locale => 'en-US')
70
+ end
71
+
72
+ it 'unescapes the path for the filters' do
73
+ @set.should_receive(:recognize_path_without_filtering).with('/sections/motörhead', 'test')
74
+ @set.recognize_path('/sections/mot%C3%B6rhead', 'test')
75
+ end
76
+ end
@@ -0,0 +1,114 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe 'RoutingFilter' do
4
+ include RoutingFilterHelpers
5
+
6
+ before :each do
7
+ setup_environment :locale, :pagination
8
+ end
9
+
10
+ def recognize_path(path = '/de/sections/1', options = {})
11
+ @set.recognize_path(path, options)
12
+ end
13
+
14
+ it 'installs filters to the route set' do
15
+ @locale_filter.should be_instance_of(RoutingFilter::Locale)
16
+ @pagination_filter.should be_instance_of(RoutingFilter::Pagination)
17
+ end
18
+
19
+ it 'calls the first filter for route recognition' do
20
+ @locale_filter.should_receive(:around_recognize).and_return :foo => :bar
21
+ recognize_path.should == { :foo => :bar }
22
+ end
23
+
24
+ it 'calls the second filter for route recognition' do
25
+ @pagination_filter.should_receive(:around_recognize).and_return :foo => :bar
26
+ recognize_path.should == { :foo => :bar, :locale => 'de' }
27
+ end
28
+
29
+ it 'calls the first filter for url generation' do
30
+ @locale_filter.should_receive(:around_generate).and_return '/en/sections/1?page=2'
31
+ url_for(:controller => 'sections', :action => 'show', :section_id => 1)
32
+ end
33
+
34
+ it 'calls the second filter for url generation' do
35
+ @pagination_filter.should_receive(:around_generate).and_return '/sections/1?page=2'
36
+ url_for(:controller => 'sections', :action => 'show', :section_id => 1)
37
+ end
38
+
39
+ it 'calls the first filter for named route url_helper' do
40
+ @locale_filter.should_receive(:around_generate).and_return '/en/sections/1'
41
+ section_path(:section_id => 1)
42
+ end
43
+
44
+ it 'calls the filter for named route url_helper with "optimized" generation blocks' do
45
+ # at_least(1) since the inline code comments in ActionController::Routing::RouteSet::NamedRouteCollection#define_url_helper also call us (as of http://github.com/rails/rails/commit/a2270ef2594b97891994848138614657363f2806)
46
+ @locale_filter.should_receive(:around_generate).at_least(1).and_return '/en/sections/1'
47
+ section_path(1)
48
+ end
49
+
50
+ it 'calls the filter for named route polymorphic_path' do
51
+ # at_least(1) since the inline code comments in ActionController::Routing::RouteSet::NamedRouteCollection#define_url_helper also call us (as of http://github.com/rails/rails/commit/a2270ef2594b97891994848138614657363f2806)
52
+ @locale_filter.should_receive(:around_generate).at_least(1).and_return '/en/sections/1'
53
+ section_path(Section.new)
54
+ end
55
+
56
+ # When filters are set up in the order:
57
+ #
58
+ # map.filter :locale
59
+ # map.filter :pagination
60
+ #
61
+ # Then #around_recognize should be first called on the locale filter and then
62
+ # on the pagination filter. Whereas #around_generate should be first called
63
+ # on the pagination filter and then on the locale filter. Right?
64
+
65
+ it 'calls #around_recognize in the expected order' do
66
+ params = { :id => "1", :page => 2, :controller => "sections", :action => "show" }
67
+ @pagination_filter.stub!(:around_recognize).and_return({ :page => 2, :controller => "sections", :action => "show" })
68
+
69
+ recognize_path('/de/sections/1/pages/2')[:locale].should == "de"
70
+ recognize_path('/de/sections/1/pages/2')[:page].should == 2
71
+ end
72
+
73
+ it 'calls #around_generate in the expected order' do
74
+ @locale_filter.stub!(:around_generate).and_return('de/sections/1')
75
+ section_path(1, :page => 2).should == "de/sections/1/pages/2"
76
+ end
77
+
78
+ it 'does not call deactivated filters' do
79
+ with_deactivated_filters(RoutingFilter::Locale) do
80
+ @locale_filter.should_not_receive(:around_generate)
81
+ section_path(Section.new)
82
+ end
83
+ end
84
+
85
+ it 'still calls successors of deactivated filters' do
86
+ with_deactivated_filters(RoutingFilter::Locale) do
87
+ @pagination_filter.should_receive(:around_recognize).and_return :foo => :bar
88
+ recognize_path('/sections/1').should == { :foo => :bar }
89
+ end
90
+ end
91
+
92
+ # chain
93
+
94
+ it 'adds filters in the order they are registered' do
95
+ @set.filters[0].should == @locale_filter
96
+ @set.filters[1].should == @pagination_filter
97
+ end
98
+
99
+ it 'returns the previous filter as a predecessor of a filter' do
100
+ @set.filters.predecessor(@pagination_filter).should == @locale_filter
101
+ end
102
+
103
+ it 'returns the nil as a predecessor of the first filter' do
104
+ @set.filters.successor(@pagination_filter).should be_nil
105
+ end
106
+
107
+ it 'returns the next filter as a successor of a filter' do
108
+ @set.filters.successor(@locale_filter).should == @pagination_filter
109
+ end
110
+
111
+ it 'returns the nil as a successor of the last filter' do
112
+ @set.filters.successor(@pagination_filter).should be_nil
113
+ end
114
+ end