shoulda 2.10.3 → 2.11.0

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 (233) hide show
  1. data/Rakefile +8 -27
  2. data/lib/shoulda.rb +1 -3
  3. data/lib/shoulda/action_controller.rb +8 -0
  4. data/lib/shoulda/action_controller/macros.rb +54 -73
  5. data/lib/shoulda/action_controller/matchers.rb +2 -0
  6. data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +9 -6
  7. data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +18 -1
  8. data/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb +62 -0
  9. data/lib/shoulda/action_controller/matchers/render_template_matcher.rb +54 -0
  10. data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +33 -15
  11. data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +1 -1
  12. data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +5 -1
  13. data/lib/shoulda/action_controller/matchers/route_matcher.rb +1 -1
  14. data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +13 -2
  15. data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +1 -1
  16. data/lib/shoulda/action_mailer.rb +3 -0
  17. data/lib/shoulda/action_mailer/assertions.rb +4 -0
  18. data/lib/shoulda/action_mailer/matchers.rb +22 -0
  19. data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +119 -0
  20. data/lib/shoulda/active_record/helpers.rb +6 -1
  21. data/lib/shoulda/active_record/macros.rb +86 -141
  22. data/lib/shoulda/active_record/matchers.rb +0 -1
  23. data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +1 -1
  24. data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +10 -2
  25. data/lib/shoulda/assertions.rb +8 -0
  26. data/lib/shoulda/context.rb +52 -32
  27. data/lib/shoulda/macros.rb +16 -18
  28. data/lib/shoulda/rails.rb +0 -5
  29. data/lib/shoulda/rspec.rb +2 -0
  30. data/lib/shoulda/version.rb +4 -0
  31. data/rails/init.rb +1 -0
  32. data/test/fail_macros.rb +20 -4
  33. data/test/functional/posts_controller_test.rb +7 -7
  34. data/test/functional/users_controller_test.rb +1 -1
  35. data/test/matchers/action_mailer/have_sent_email_test.rb +53 -0
  36. data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +7 -1
  37. data/test/matchers/active_record/allow_value_matcher_test.rb +1 -1
  38. data/test/matchers/active_record/association_matcher_test.rb +16 -16
  39. data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +3 -2
  40. data/test/matchers/active_record/ensure_length_of_matcher_test.rb +1 -1
  41. data/test/matchers/active_record/have_db_column_matcher_test.rb +1 -1
  42. data/test/matchers/active_record/have_db_index_matcher_test.rb +1 -1
  43. data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +1 -1
  44. data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +1 -1
  45. data/test/matchers/active_record/validate_format_of_matcher_test.rb +1 -1
  46. data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +1 -1
  47. data/test/matchers/active_record/validate_presence_of_matcher_test.rb +1 -1
  48. data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +1 -1
  49. data/test/matchers/controller/assign_to_matcher_test.rb +11 -1
  50. data/test/matchers/controller/filter_param_matcher_test.rb +10 -2
  51. data/test/matchers/controller/redirect_to_matcher_test.rb +37 -0
  52. data/test/matchers/controller/render_template_matcher_test.rb +37 -0
  53. data/test/matchers/controller/render_with_layout_matcher_test.rb +15 -1
  54. data/test/matchers/controller/respond_with_content_type_matcher_test.rb +1 -1
  55. data/test/matchers/controller/respond_with_matcher_test.rb +1 -11
  56. data/test/matchers/controller/route_matcher_test.rb +1 -1
  57. data/test/matchers/controller/set_session_matcher_test.rb +11 -1
  58. data/test/matchers/controller/set_the_flash_matcher.rb +1 -1
  59. data/test/other/autoload_macro_test.rb +1 -1
  60. data/test/other/context_test.rb +177 -8
  61. data/test/other/helpers_test.rb +13 -36
  62. data/test/other/private_helpers_test.rb +1 -1
  63. data/test/other/should_test.rb +1 -1
  64. data/test/{model_builder.rb → rails2_model_builder.rb} +28 -4
  65. data/test/{rails_root → rails2_root}/app/controllers/application_controller.rb +0 -3
  66. data/test/{rails_root → rails2_root}/app/controllers/posts_controller.rb +0 -0
  67. data/test/{rails_root → rails2_root}/app/controllers/users_controller.rb +0 -0
  68. data/test/{rails_root → rails2_root}/app/helpers/application_helper.rb +0 -0
  69. data/test/{rails_root → rails2_root}/app/helpers/posts_helper.rb +0 -0
  70. data/test/{rails_root → rails2_root}/app/helpers/users_helper.rb +0 -0
  71. data/test/{rails_root → rails2_root}/app/models/address.rb +0 -0
  72. data/test/rails2_root/app/models/flea.rb +11 -0
  73. data/test/{rails_root → rails2_root}/app/models/friendship.rb +0 -0
  74. data/test/rails2_root/app/models/notifier.rb +8 -0
  75. data/test/{rails_root → rails2_root}/app/models/pets/cat.rb +0 -0
  76. data/test/{rails_root → rails2_root}/app/models/pets/dog.rb +0 -0
  77. data/test/{rails_root → rails2_root}/app/models/post.rb +0 -0
  78. data/test/{rails_root → rails2_root}/app/models/product.rb +0 -0
  79. data/test/{rails_root → rails2_root}/app/models/profile.rb +0 -0
  80. data/test/{rails_root → rails2_root}/app/models/registration.rb +0 -0
  81. data/test/{rails_root → rails2_root}/app/models/tag.rb +0 -0
  82. data/test/{rails_root → rails2_root}/app/models/tagging.rb +0 -0
  83. data/test/{rails_root → rails2_root}/app/models/treat.rb +0 -0
  84. data/test/{rails_root → rails2_root}/app/models/user.rb +0 -0
  85. data/test/{rails_root → rails2_root}/app/views/layouts/posts.rhtml +0 -0
  86. data/test/{rails_root → rails2_root}/app/views/layouts/users.rhtml +0 -0
  87. data/test/{rails_root → rails2_root}/app/views/layouts/wide.html.erb +0 -0
  88. data/test/rails2_root/app/views/notifier/the_email.html.erb +1 -0
  89. data/test/{rails_root → rails2_root}/app/views/posts/edit.rhtml +0 -0
  90. data/test/{rails_root → rails2_root}/app/views/posts/index.rhtml +0 -0
  91. data/test/{rails_root → rails2_root}/app/views/posts/new.rhtml +0 -0
  92. data/test/{rails_root → rails2_root}/app/views/posts/show.rhtml +0 -0
  93. data/test/{rails_root → rails2_root}/app/views/users/edit.rhtml +0 -0
  94. data/test/{rails_root → rails2_root}/app/views/users/index.rhtml +0 -0
  95. data/test/{rails_root → rails2_root}/app/views/users/new.rhtml +0 -0
  96. data/test/{rails_root → rails2_root}/app/views/users/show.rhtml +0 -0
  97. data/test/{rails_root → rails2_root}/config/boot.rb +0 -0
  98. data/test/{rails_root → rails2_root}/config/database.yml +1 -1
  99. data/test/{rails_root → rails2_root}/config/environment.rb +0 -1
  100. data/test/rails2_root/config/environments/test.rb +23 -0
  101. data/test/{rails_root → rails2_root}/config/initializers/new_rails_defaults.rb +0 -0
  102. data/test/{rails_root → rails2_root}/config/initializers/shoulda.rb +0 -0
  103. data/test/{rails_root → rails2_root}/config/routes.rb +0 -0
  104. data/test/{rails_root → rails2_root}/db/migrate/001_create_users.rb +0 -0
  105. data/test/{rails_root → rails2_root}/db/migrate/002_create_posts.rb +0 -0
  106. data/test/{rails_root → rails2_root}/db/migrate/003_create_taggings.rb +0 -0
  107. data/test/{rails_root → rails2_root}/db/migrate/004_create_tags.rb +0 -0
  108. data/test/{rails_root → rails2_root}/db/migrate/005_create_dogs.rb +0 -0
  109. data/test/{rails_root → rails2_root}/db/migrate/006_create_addresses.rb +0 -0
  110. data/test/{rails_root → rails2_root}/db/migrate/007_create_fleas.rb +0 -0
  111. data/test/{rails_root → rails2_root}/db/migrate/008_create_dogs_fleas.rb +0 -0
  112. data/test/{rails_root → rails2_root}/db/migrate/009_create_products.rb +0 -0
  113. data/test/{rails_root → rails2_root}/db/migrate/010_create_friendships.rb +0 -0
  114. data/test/{rails_root → rails2_root}/db/migrate/011_create_treats.rb +0 -0
  115. data/test/{rails_root → rails2_root}/db/migrate/20090506203502_create_profiles.rb +0 -0
  116. data/test/{rails_root → rails2_root}/db/migrate/20090506203536_create_registrations.rb +0 -0
  117. data/test/{rails_root → rails2_root}/db/migrate/20090513104502_create_cats.rb +0 -0
  118. data/test/{rails_root → rails2_root}/db/schema.rb +0 -0
  119. data/test/rails2_root/log/test.log +121771 -0
  120. data/test/{rails_root → rails2_root}/public/404.html +0 -0
  121. data/test/{rails_root → rails2_root}/public/422.html +0 -0
  122. data/test/{rails_root → rails2_root}/public/500.html +0 -0
  123. data/test/{rails_root → rails2_root}/script/console +0 -0
  124. data/test/{rails_root → rails2_root}/script/generate +0 -0
  125. data/test/{rails_root → rails2_root}/test/shoulda_macros/custom_macro.rb +0 -0
  126. data/test/{rails_root → rails2_root}/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +0 -0
  127. data/test/{rails_root → rails2_root}/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +0 -0
  128. data/test/rails2_test_helper.rb +6 -0
  129. data/test/rails3_model_builder.rb +118 -0
  130. data/test/rails3_root/Gemfile +28 -0
  131. data/test/rails3_root/README +244 -0
  132. data/test/rails3_root/Rakefile +10 -0
  133. data/test/rails3_root/app/controllers/application_controller.rb +22 -0
  134. data/test/rails3_root/app/controllers/posts_controller.rb +87 -0
  135. data/test/rails3_root/app/controllers/users_controller.rb +82 -0
  136. data/test/rails3_root/app/helpers/application_helper.rb +2 -0
  137. data/test/rails3_root/app/models/address.rb +7 -0
  138. data/test/rails3_root/app/models/flea.rb +11 -0
  139. data/test/rails3_root/app/models/friendship.rb +4 -0
  140. data/test/rails3_root/app/models/notifier.rb +8 -0
  141. data/test/rails3_root/app/models/pets/cat.rb +7 -0
  142. data/test/rails3_root/app/models/pets/dog.rb +10 -0
  143. data/test/rails3_root/app/models/post.rb +12 -0
  144. data/test/rails3_root/app/models/product.rb +12 -0
  145. data/test/rails3_root/app/models/profile.rb +2 -0
  146. data/test/rails3_root/app/models/registration.rb +2 -0
  147. data/test/rails3_root/app/models/tag.rb +8 -0
  148. data/test/rails3_root/app/models/tagging.rb +4 -0
  149. data/test/rails3_root/app/models/treat.rb +3 -0
  150. data/test/rails3_root/app/models/user.rb +32 -0
  151. data/test/rails3_root/app/views/layouts/application.html.erb +14 -0
  152. data/test/rails3_root/app/views/layouts/posts.rhtml +19 -0
  153. data/test/rails3_root/app/views/layouts/users.rhtml +17 -0
  154. data/test/rails3_root/app/views/layouts/wide.html.erb +1 -0
  155. data/test/rails3_root/app/views/notifier/the_email.html.erb +1 -0
  156. data/test/rails3_root/app/views/posts/edit.rhtml +27 -0
  157. data/test/rails3_root/app/views/posts/index.rhtml +25 -0
  158. data/test/rails3_root/app/views/posts/new.rhtml +24 -0
  159. data/test/rails3_root/app/views/posts/show.rhtml +18 -0
  160. data/test/rails3_root/app/views/users/edit.rhtml +22 -0
  161. data/test/rails3_root/app/views/users/index.rhtml +22 -0
  162. data/test/rails3_root/app/views/users/new.rhtml +21 -0
  163. data/test/rails3_root/app/views/users/show.rhtml +13 -0
  164. data/test/rails3_root/config.ru +4 -0
  165. data/test/rails3_root/config/application.rb +46 -0
  166. data/test/rails3_root/config/boot.rb +6 -0
  167. data/test/rails3_root/config/database.yml +22 -0
  168. data/test/rails3_root/config/environment.rb +5 -0
  169. data/test/rails3_root/config/environments/development.rb +19 -0
  170. data/test/rails3_root/config/environments/production.rb +42 -0
  171. data/test/rails3_root/config/environments/test.rb +32 -0
  172. data/test/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
  173. data/test/rails3_root/config/initializers/inflections.rb +10 -0
  174. data/test/rails3_root/config/initializers/mime_types.rb +5 -0
  175. data/test/rails3_root/config/initializers/secret_token.rb +7 -0
  176. data/test/rails3_root/config/initializers/session_store.rb +8 -0
  177. data/test/rails3_root/config/locales/en.yml +5 -0
  178. data/test/rails3_root/config/routes.rb +4 -0
  179. data/test/rails3_root/db/migrate/001_create_users.rb +19 -0
  180. data/test/rails3_root/db/migrate/002_create_posts.rb +13 -0
  181. data/test/rails3_root/db/migrate/003_create_taggings.rb +12 -0
  182. data/test/rails3_root/db/migrate/004_create_tags.rb +11 -0
  183. data/test/rails3_root/db/migrate/005_create_dogs.rb +12 -0
  184. data/test/rails3_root/db/migrate/006_create_addresses.rb +14 -0
  185. data/test/rails3_root/db/migrate/007_create_fleas.rb +11 -0
  186. data/test/rails3_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  187. data/test/rails3_root/db/migrate/009_create_products.rb +17 -0
  188. data/test/rails3_root/db/migrate/010_create_friendships.rb +14 -0
  189. data/test/rails3_root/db/migrate/011_create_treats.rb +12 -0
  190. data/test/rails3_root/db/migrate/20090506203502_create_profiles.rb +12 -0
  191. data/test/rails3_root/db/migrate/20090506203536_create_registrations.rb +14 -0
  192. data/test/rails3_root/db/migrate/20090513104502_create_cats.rb +12 -0
  193. data/test/rails3_root/db/seeds.rb +7 -0
  194. data/test/rails3_root/db/test.sqlite3 +0 -0
  195. data/test/rails3_root/doc/README_FOR_APP +2 -0
  196. data/test/{rails_root/config/environments/test.rb → rails3_root/log/development.log} +0 -0
  197. data/test/rails3_root/log/production.log +0 -0
  198. data/test/rails3_root/log/server.log +0 -0
  199. data/test/rails3_root/log/test.log +63274 -0
  200. data/test/rails3_root/public/404.html +26 -0
  201. data/test/rails3_root/public/422.html +26 -0
  202. data/test/rails3_root/public/500.html +26 -0
  203. data/test/rails3_root/public/favicon.ico +0 -0
  204. data/test/rails3_root/public/images/rails.png +0 -0
  205. data/test/rails3_root/public/index.html +279 -0
  206. data/test/rails3_root/public/javascripts/application.js +2 -0
  207. data/test/rails3_root/public/javascripts/controls.js +965 -0
  208. data/test/rails3_root/public/javascripts/dragdrop.js +974 -0
  209. data/test/rails3_root/public/javascripts/effects.js +1123 -0
  210. data/test/rails3_root/public/javascripts/prototype.js +4874 -0
  211. data/test/rails3_root/public/javascripts/rails.js +118 -0
  212. data/test/rails3_root/public/robots.txt +5 -0
  213. data/test/rails3_root/script/rails +9 -0
  214. data/test/rails3_root/test/performance/browsing_test.rb +9 -0
  215. data/test/rails3_root/test/test_helper.rb +13 -0
  216. data/test/rails3_test_helper.rb +6 -0
  217. data/test/test_helper.rb +16 -8
  218. data/test/unit/address_test.rb +1 -1
  219. data/test/unit/cat_test.rb +1 -1
  220. data/test/unit/dog_test.rb +1 -1
  221. data/test/unit/flea_test.rb +9 -1
  222. data/test/unit/friendship_test.rb +1 -1
  223. data/test/unit/post_test.rb +1 -5
  224. data/test/unit/product_test.rb +1 -1
  225. data/test/unit/tag_test.rb +1 -5
  226. data/test/unit/tagging_test.rb +1 -1
  227. data/test/unit/user_test.rb +3 -37
  228. metadata +180 -73
  229. data/lib/shoulda/action_view.rb +0 -10
  230. data/lib/shoulda/action_view/macros.rb +0 -61
  231. data/lib/shoulda/active_record/matchers/have_named_scope_matcher.rb +0 -128
  232. data/test/matchers/active_record/have_named_scope_matcher_test.rb +0 -65
  233. data/test/rails_root/app/models/flea.rb +0 -3
@@ -0,0 +1,118 @@
1
+ document.observe("dom:loaded", function() {
2
+ function handleRemote(element) {
3
+ var method, url, params;
4
+
5
+ if (element.tagName.toLowerCase() === 'form') {
6
+ method = element.readAttribute('method') || 'post';
7
+ url = element.readAttribute('action');
8
+ params = element.serialize(true);
9
+ } else {
10
+ method = element.readAttribute('data-method') || 'get';
11
+ url = element.readAttribute('href');
12
+ params = {};
13
+ }
14
+
15
+ var event = element.fire("ajax:before");
16
+ if (event.stopped) return false;
17
+
18
+ new Ajax.Request(url, {
19
+ method: method,
20
+ parameters: params,
21
+ asynchronous: true,
22
+ evalScripts: true,
23
+
24
+ onLoading: function(request) { element.fire("ajax:loading", {request: request}); },
25
+ onLoaded: function(request) { element.fire("ajax:loaded", {request: request}); },
26
+ onInteractive: function(request) { element.fire("ajax:interactive", {request: request}); },
27
+ onComplete: function(request) { element.fire("ajax:complete", {request: request}); },
28
+ onSuccess: function(request) { element.fire("ajax:success", {request: request}); },
29
+ onFailure: function(request) { element.fire("ajax:failure", {request: request}); }
30
+ });
31
+
32
+ element.fire("ajax:after");
33
+ }
34
+
35
+ function handleMethod(element) {
36
+ var method, url, token_name, token;
37
+
38
+ method = element.readAttribute('data-method');
39
+ url = element.readAttribute('href');
40
+ csrf_param = $$('meta[name=csrf-param]').first();
41
+ csrf_token = $$('meta[name=csrf-token]').first();
42
+
43
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
44
+ element.parentNode.appendChild(form);
45
+
46
+ if (method != 'post') {
47
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
48
+ form.appendChild(field);
49
+ }
50
+
51
+ if (csrf_param) {
52
+ var param = csrf_param.readAttribute('content');
53
+ var token = csrf_token.readAttribute('content');
54
+ var field = new Element('input', { type: 'hidden', name: param, value: token });
55
+ form.appendChild(field);
56
+ }
57
+
58
+ form.submit();
59
+ }
60
+
61
+ $(document.body).observe("click", function(event) {
62
+ var message = event.findElement().readAttribute('data-confirm');
63
+ if (message && !confirm(message)) {
64
+ event.stop();
65
+ return false;
66
+ }
67
+
68
+ var element = event.findElement("a[data-remote]");
69
+ if (element) {
70
+ handleRemote(element);
71
+ event.stop();
72
+ return true;
73
+ }
74
+
75
+ var element = event.findElement("a[data-method]");
76
+ if (element) {
77
+ handleMethod(element);
78
+ event.stop();
79
+ return true;
80
+ }
81
+ });
82
+
83
+ // TODO: I don't think submit bubbles in IE
84
+ $(document.body).observe("submit", function(event) {
85
+ var element = event.findElement(),
86
+ message = element.readAttribute('data-confirm');
87
+ if (message && !confirm(message)) {
88
+ event.stop();
89
+ return false;
90
+ }
91
+
92
+ var inputs = element.select("input[type=submit][data-disable-with]");
93
+ inputs.each(function(input) {
94
+ input.disabled = true;
95
+ input.writeAttribute('data-original-value', input.value);
96
+ input.value = input.readAttribute('data-disable-with');
97
+ });
98
+
99
+ var element = event.findElement("form[data-remote]");
100
+ if (element) {
101
+ handleRemote(element);
102
+ event.stop();
103
+ }
104
+ });
105
+
106
+ $(document.body).observe("ajax:after", function(event) {
107
+ var element = event.findElement();
108
+
109
+ if (element.tagName.toLowerCase() === 'form') {
110
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
111
+ inputs.each(function(input) {
112
+ input.value = input.readAttribute('data-original-value');
113
+ input.writeAttribute('data-original-value', null);
114
+ input.disabled = false;
115
+ });
116
+ }
117
+ });
118
+ });
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ ENV_PATH = File.expand_path('../../config/environment', __FILE__)
5
+ BOOT_PATH = File.expand_path('../../config/boot', __FILE__)
6
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
7
+
8
+ require BOOT_PATH
9
+ require 'rails/commands'
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'rails/performance_test_help'
3
+
4
+ # Profiling results for each test method are written to tmp/performance.
5
+ class BrowsingTest < ActionDispatch::PerformanceTest
6
+ def test_homepage
7
+ get '/'
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path('../../config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
7
+ #
8
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
9
+ # -- they do not yet inherit this setting
10
+ fixtures :all
11
+
12
+ # Add more helper methods to be used by all tests here...
13
+ end
@@ -0,0 +1,6 @@
1
+ rails_root = File.dirname(__FILE__) + '/rails3_root'
2
+ ENV['BUNDLE_GEMFILE'] = rails_root + '/Gemfile'
3
+ require "#{rails_root}/config/environment.rb"
4
+ require 'test/rails3_model_builder'
5
+ require 'rails/test_help'
6
+
@@ -1,19 +1,24 @@
1
1
  require 'fileutils'
2
+ require 'test/unit'
2
3
 
3
- # Load the environment
4
4
  ENV['RAILS_ENV'] = 'test'
5
5
 
6
- rails_root = File.dirname(__FILE__) + '/rails_root'
6
+ ENV['RAILS_VERSION'] ||= '2.3.8'
7
+ RAILS_GEM_VERSION = ENV['RAILS_VERSION']
7
8
 
8
- require "#{rails_root}/config/environment.rb"
9
+ if ENV['RAILS_VERSION'].to_s =~ /^2/
10
+ require 'test/rails2_test_helper'
11
+ else
12
+ require 'test/rails3_test_helper'
13
+ end
9
14
 
10
- # Load the testing framework
11
- require 'test_help'
12
- silence_warnings { RAILS_ENV = ENV['RAILS_ENV'] }
15
+ shoulda_path = File.join(File.dirname(__FILE__), '..', 'lib')
16
+ $LOAD_PATH << shoulda_path
17
+ require 'shoulda'
13
18
 
14
19
  # Run the migrations
15
20
  ActiveRecord::Migration.verbose = false
16
- ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
21
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
17
22
 
18
23
  # Setup the fixtures path
19
24
  ActiveSupport::TestCase.fixture_path =
@@ -25,4 +30,7 @@ class ActiveSupport::TestCase #:nodoc:
25
30
  end
26
31
 
27
32
  require 'test/fail_macros'
28
- require 'test/model_builder'
33
+
34
+ Shoulda.autoload_macros File.join(File.dirname(__FILE__), 'rails2_root'),
35
+ File.join("vendor", "{plugins,gems}", "*")
36
+
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class AddressTest < ActiveSupport::TestCase
4
4
  fixtures :all
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class Pets::CatTest < ActiveSupport::TestCase
4
4
  should_belong_to :owner
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class Pets::DogTest < ActiveSupport::TestCase
4
4
  should_belong_to :user
@@ -1,6 +1,14 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class FleaTest < ActiveSupport::TestCase
4
4
  should_have_and_belong_to_many :dogs
5
+
6
+ context "when a flea is created" do
7
+ setup do
8
+ Flea.create
9
+ end
10
+
11
+ should have_sent_email.to('myself@me.com')
12
+ end
5
13
  end
6
14
 
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class FriendshipTest < ActiveSupport::TestCase
4
4
  should_belong_to :user
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class PostTest < ActiveSupport::TestCase
4
4
  fixtures :all
@@ -12,8 +12,4 @@ class PostTest < ActiveSupport::TestCase
12
12
  should_validate_presence_of :body, :message => /wtf/
13
13
  should_validate_presence_of :title
14
14
  should_validate_numericality_of :user_id
15
-
16
- should_fail do
17
- should_validate_uniqueness_of :title, :case_sensitive => false
18
- end
19
15
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class ProductTest < ActiveSupport::TestCase
4
4
  context "An intangible product" do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class TagTest < ActiveSupport::TestCase
4
4
  should_have_many :taggings, :dependent => :destroy
@@ -8,8 +8,4 @@ class TagTest < ActiveSupport::TestCase
8
8
 
9
9
  should_not_allow_mass_assignment_of :secret
10
10
  should_allow_mass_assignment_of :name
11
-
12
- should_fail do
13
- should_not_allow_mass_assignment_of :name
14
- end
15
11
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class TaggingTest < ActiveSupport::TestCase
4
4
  should_belong_to :post
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
1
+ require 'test_helper'
2
2
 
3
3
  class UserTest < ActiveSupport::TestCase
4
4
  fixtures :all
@@ -14,28 +14,10 @@ class UserTest < ActiveSupport::TestCase
14
14
  should_have_one :address, :dependent => :destroy
15
15
 
16
16
  should_have_db_indices :email, :name
17
- should_have_index :age
17
+ should_have_db_index :age
18
18
  should_have_db_index [:email, :name], :unique => true
19
19
  should_have_db_index :age, :unique => false
20
20
 
21
- should_fail do
22
- should_have_db_index :phone
23
- should_have_db_index :email, :unique => false
24
- should_have_db_index :age, :unique => true
25
- end
26
-
27
- should_have_named_scope :old, :conditions => "age > 50"
28
- should_have_named_scope :eighteen, :conditions => { :age => 18 }
29
-
30
- should_have_named_scope 'recent(5)', :limit => 5
31
- should_have_named_scope 'recent(1)', :limit => 1
32
- should_have_named_scope 'recent_via_method(7)', :limit => 7
33
-
34
- context "when given an instance variable" do
35
- setup { @count = 2 }
36
- should_have_named_scope 'recent(@count)', :limit => 2
37
- end
38
-
39
21
  should_not_allow_values_for :email, "blah", "b lah"
40
22
  should_allow_values_for :email, "a@b.com", "asdf@asdf.com"
41
23
  should_allow_values_for :age, 1, 10, 99
@@ -44,14 +26,7 @@ class UserTest < ActiveSupport::TestCase
44
26
  should_ensure_length_in_range :email, 1..100
45
27
  should_ensure_value_in_range :age, 1..100, :low_message => /greater/,
46
28
  :high_message => /less/
47
- should_fail do
48
- should_ensure_value_in_range :age, 1..100, :low_message => /more/,
49
- :high_message => /less/
50
- end
51
- should_fail do
52
- should_ensure_value_in_range :age, 1..100, :low_message => /greater/,
53
- :high_message => /fewer/
54
- end
29
+
55
30
  should_not_allow_mass_assignment_of :password
56
31
  should_have_class_methods :find, :destroy
57
32
  should_have_instance_methods :email, :age, :email=, :valid?
@@ -67,14 +42,5 @@ class UserTest < ActiveSupport::TestCase
67
42
 
68
43
  should_have_readonly_attributes :name
69
44
 
70
- should_fail do
71
- should_not_allow_mass_assignment_of :name, :age
72
- end
73
-
74
45
  should_have_one :profile, :through => :registration
75
-
76
- should_fail do
77
- should_have_one :profile, :through => :interview
78
- should_have_one :address, :through => :registration
79
- end
80
46
  end
metadata CHANGED
@@ -1,20 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoulda
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.3
4
+ prerelease: false
5
+ segments:
6
+ - 2
7
+ - 11
8
+ - 0
9
+ version: 2.11.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Tammer Saleh
13
+ - Joe Ferris
14
+ - Ryan McGeary
15
+ - Dan Croak
16
+ - Matt Jankowski
8
17
  autorequire:
9
18
  bindir: bin
10
19
  cert_chain: []
11
20
 
12
- date: 2010-01-16 00:00:00 -05:00
21
+ date: 2010-06-11 00:00:00 -04:00
13
22
  default_executable: convert_to_should_syntax
14
23
  dependencies: []
15
24
 
16
- description:
17
- email: tsaleh@thoughtbot.com
25
+ description: Making tests easy on the fingers and eyes
26
+ email: support@thoughtbot.com
18
27
  executables:
19
28
  - convert_to_should_syntax
20
29
  extensions: []
@@ -31,6 +40,8 @@ files:
31
40
  - lib/shoulda/action_controller/macros.rb
32
41
  - lib/shoulda/action_controller/matchers/assign_to_matcher.rb
33
42
  - lib/shoulda/action_controller/matchers/filter_param_matcher.rb
43
+ - lib/shoulda/action_controller/matchers/redirect_to_matcher.rb
44
+ - lib/shoulda/action_controller/matchers/render_template_matcher.rb
34
45
  - lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb
35
46
  - lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb
36
47
  - lib/shoulda/action_controller/matchers/respond_with_matcher.rb
@@ -40,9 +51,9 @@ files:
40
51
  - lib/shoulda/action_controller/matchers.rb
41
52
  - lib/shoulda/action_controller.rb
42
53
  - lib/shoulda/action_mailer/assertions.rb
54
+ - lib/shoulda/action_mailer/matchers/have_sent_email.rb
55
+ - lib/shoulda/action_mailer/matchers.rb
43
56
  - lib/shoulda/action_mailer.rb
44
- - lib/shoulda/action_view/macros.rb
45
- - lib/shoulda/action_view.rb
46
57
  - lib/shoulda/active_record/assertions.rb
47
58
  - lib/shoulda/active_record/helpers.rb
48
59
  - lib/shoulda/active_record/macros.rb
@@ -53,7 +64,6 @@ files:
53
64
  - lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb
54
65
  - lib/shoulda/active_record/matchers/have_db_column_matcher.rb
55
66
  - lib/shoulda/active_record/matchers/have_db_index_matcher.rb
56
- - lib/shoulda/active_record/matchers/have_named_scope_matcher.rb
57
67
  - lib/shoulda/active_record/matchers/have_readonly_attribute_matcher.rb
58
68
  - lib/shoulda/active_record/matchers/validate_acceptance_of_matcher.rb
59
69
  - lib/shoulda/active_record/matchers/validate_format_of_matcher.rb
@@ -76,6 +86,7 @@ files:
76
86
  - lib/shoulda/tasks/yaml_to_shoulda.rake
77
87
  - lib/shoulda/tasks.rb
78
88
  - lib/shoulda/test_unit.rb
89
+ - lib/shoulda/version.rb
79
90
  - lib/shoulda.rb
80
91
  - rails/init.rb
81
92
  - test/fail_macros.rb
@@ -88,6 +99,7 @@ files:
88
99
  - test/fixtures/users.yml
89
100
  - test/functional/posts_controller_test.rb
90
101
  - test/functional/users_controller_test.rb
102
+ - test/matchers/action_mailer/have_sent_email_test.rb
91
103
  - test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb
92
104
  - test/matchers/active_record/allow_value_matcher_test.rb
93
105
  - test/matchers/active_record/association_matcher_test.rb
@@ -95,7 +107,6 @@ files:
95
107
  - test/matchers/active_record/ensure_length_of_matcher_test.rb
96
108
  - test/matchers/active_record/have_db_column_matcher_test.rb
97
109
  - test/matchers/active_record/have_db_index_matcher_test.rb
98
- - test/matchers/active_record/have_named_scope_matcher_test.rb
99
110
  - test/matchers/active_record/have_readonly_attributes_matcher_test.rb
100
111
  - test/matchers/active_record/validate_acceptance_of_matcher_test.rb
101
112
  - test/matchers/active_record/validate_format_of_matcher_test.rb
@@ -104,79 +115,173 @@ files:
104
115
  - test/matchers/active_record/validate_uniqueness_of_matcher_test.rb
105
116
  - test/matchers/controller/assign_to_matcher_test.rb
106
117
  - test/matchers/controller/filter_param_matcher_test.rb
118
+ - test/matchers/controller/redirect_to_matcher_test.rb
119
+ - test/matchers/controller/render_template_matcher_test.rb
107
120
  - test/matchers/controller/render_with_layout_matcher_test.rb
108
121
  - test/matchers/controller/respond_with_content_type_matcher_test.rb
109
122
  - test/matchers/controller/respond_with_matcher_test.rb
110
123
  - test/matchers/controller/route_matcher_test.rb
111
124
  - test/matchers/controller/set_session_matcher_test.rb
112
125
  - test/matchers/controller/set_the_flash_matcher.rb
113
- - test/model_builder.rb
114
126
  - test/other/autoload_macro_test.rb
115
127
  - test/other/context_test.rb
116
128
  - test/other/convert_to_should_syntax_test.rb
117
129
  - test/other/helpers_test.rb
118
130
  - test/other/private_helpers_test.rb
119
131
  - test/other/should_test.rb
120
- - test/rails_root/app/controllers/application_controller.rb
121
- - test/rails_root/app/controllers/posts_controller.rb
122
- - test/rails_root/app/controllers/users_controller.rb
123
- - test/rails_root/app/helpers/application_helper.rb
124
- - test/rails_root/app/helpers/posts_helper.rb
125
- - test/rails_root/app/helpers/users_helper.rb
126
- - test/rails_root/app/models/address.rb
127
- - test/rails_root/app/models/flea.rb
128
- - test/rails_root/app/models/friendship.rb
129
- - test/rails_root/app/models/pets/cat.rb
130
- - test/rails_root/app/models/pets/dog.rb
131
- - test/rails_root/app/models/post.rb
132
- - test/rails_root/app/models/product.rb
133
- - test/rails_root/app/models/profile.rb
134
- - test/rails_root/app/models/registration.rb
135
- - test/rails_root/app/models/tag.rb
136
- - test/rails_root/app/models/tagging.rb
137
- - test/rails_root/app/models/treat.rb
138
- - test/rails_root/app/models/user.rb
139
- - test/rails_root/app/views/layouts/posts.rhtml
140
- - test/rails_root/app/views/layouts/users.rhtml
141
- - test/rails_root/app/views/layouts/wide.html.erb
142
- - test/rails_root/app/views/posts/edit.rhtml
143
- - test/rails_root/app/views/posts/index.rhtml
144
- - test/rails_root/app/views/posts/new.rhtml
145
- - test/rails_root/app/views/posts/show.rhtml
146
- - test/rails_root/app/views/users/edit.rhtml
147
- - test/rails_root/app/views/users/index.rhtml
148
- - test/rails_root/app/views/users/new.rhtml
149
- - test/rails_root/app/views/users/show.rhtml
150
- - test/rails_root/config/boot.rb
151
- - test/rails_root/config/database.yml
152
- - test/rails_root/config/environment.rb
153
- - test/rails_root/config/environments/test.rb
154
- - test/rails_root/config/initializers/new_rails_defaults.rb
155
- - test/rails_root/config/initializers/shoulda.rb
156
- - test/rails_root/config/routes.rb
157
- - test/rails_root/db/migrate/001_create_users.rb
158
- - test/rails_root/db/migrate/002_create_posts.rb
159
- - test/rails_root/db/migrate/003_create_taggings.rb
160
- - test/rails_root/db/migrate/004_create_tags.rb
161
- - test/rails_root/db/migrate/005_create_dogs.rb
162
- - test/rails_root/db/migrate/006_create_addresses.rb
163
- - test/rails_root/db/migrate/007_create_fleas.rb
164
- - test/rails_root/db/migrate/008_create_dogs_fleas.rb
165
- - test/rails_root/db/migrate/009_create_products.rb
166
- - test/rails_root/db/migrate/010_create_friendships.rb
167
- - test/rails_root/db/migrate/011_create_treats.rb
168
- - test/rails_root/db/migrate/20090506203502_create_profiles.rb
169
- - test/rails_root/db/migrate/20090506203536_create_registrations.rb
170
- - test/rails_root/db/migrate/20090513104502_create_cats.rb
171
- - test/rails_root/db/schema.rb
172
- - test/rails_root/public/404.html
173
- - test/rails_root/public/422.html
174
- - test/rails_root/public/500.html
175
- - test/rails_root/script/console
176
- - test/rails_root/script/generate
177
- - test/rails_root/test/shoulda_macros/custom_macro.rb
178
- - test/rails_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb
179
- - test/rails_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb
132
+ - test/rails2_model_builder.rb
133
+ - test/rails2_root/app/controllers/application_controller.rb
134
+ - test/rails2_root/app/controllers/posts_controller.rb
135
+ - test/rails2_root/app/controllers/users_controller.rb
136
+ - test/rails2_root/app/helpers/application_helper.rb
137
+ - test/rails2_root/app/helpers/posts_helper.rb
138
+ - test/rails2_root/app/helpers/users_helper.rb
139
+ - test/rails2_root/app/models/address.rb
140
+ - test/rails2_root/app/models/flea.rb
141
+ - test/rails2_root/app/models/friendship.rb
142
+ - test/rails2_root/app/models/notifier.rb
143
+ - test/rails2_root/app/models/pets/cat.rb
144
+ - test/rails2_root/app/models/pets/dog.rb
145
+ - test/rails2_root/app/models/post.rb
146
+ - test/rails2_root/app/models/product.rb
147
+ - test/rails2_root/app/models/profile.rb
148
+ - test/rails2_root/app/models/registration.rb
149
+ - test/rails2_root/app/models/tag.rb
150
+ - test/rails2_root/app/models/tagging.rb
151
+ - test/rails2_root/app/models/treat.rb
152
+ - test/rails2_root/app/models/user.rb
153
+ - test/rails2_root/app/views/layouts/posts.rhtml
154
+ - test/rails2_root/app/views/layouts/users.rhtml
155
+ - test/rails2_root/app/views/layouts/wide.html.erb
156
+ - test/rails2_root/app/views/notifier/the_email.html.erb
157
+ - test/rails2_root/app/views/posts/edit.rhtml
158
+ - test/rails2_root/app/views/posts/index.rhtml
159
+ - test/rails2_root/app/views/posts/new.rhtml
160
+ - test/rails2_root/app/views/posts/show.rhtml
161
+ - test/rails2_root/app/views/users/edit.rhtml
162
+ - test/rails2_root/app/views/users/index.rhtml
163
+ - test/rails2_root/app/views/users/new.rhtml
164
+ - test/rails2_root/app/views/users/show.rhtml
165
+ - test/rails2_root/config/boot.rb
166
+ - test/rails2_root/config/database.yml
167
+ - test/rails2_root/config/environment.rb
168
+ - test/rails2_root/config/environments/test.rb
169
+ - test/rails2_root/config/initializers/new_rails_defaults.rb
170
+ - test/rails2_root/config/initializers/shoulda.rb
171
+ - test/rails2_root/config/routes.rb
172
+ - test/rails2_root/db/migrate/001_create_users.rb
173
+ - test/rails2_root/db/migrate/002_create_posts.rb
174
+ - test/rails2_root/db/migrate/003_create_taggings.rb
175
+ - test/rails2_root/db/migrate/004_create_tags.rb
176
+ - test/rails2_root/db/migrate/005_create_dogs.rb
177
+ - test/rails2_root/db/migrate/006_create_addresses.rb
178
+ - test/rails2_root/db/migrate/007_create_fleas.rb
179
+ - test/rails2_root/db/migrate/008_create_dogs_fleas.rb
180
+ - test/rails2_root/db/migrate/009_create_products.rb
181
+ - test/rails2_root/db/migrate/010_create_friendships.rb
182
+ - test/rails2_root/db/migrate/011_create_treats.rb
183
+ - test/rails2_root/db/migrate/20090506203502_create_profiles.rb
184
+ - test/rails2_root/db/migrate/20090506203536_create_registrations.rb
185
+ - test/rails2_root/db/migrate/20090513104502_create_cats.rb
186
+ - test/rails2_root/db/schema.rb
187
+ - test/rails2_root/log/test.log
188
+ - test/rails2_root/public/404.html
189
+ - test/rails2_root/public/422.html
190
+ - test/rails2_root/public/500.html
191
+ - test/rails2_root/script/console
192
+ - test/rails2_root/script/generate
193
+ - test/rails2_root/test/shoulda_macros/custom_macro.rb
194
+ - test/rails2_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb
195
+ - test/rails2_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb
196
+ - test/rails2_test_helper.rb
197
+ - test/rails3_model_builder.rb
198
+ - test/rails3_root/app/controllers/application_controller.rb
199
+ - test/rails3_root/app/controllers/posts_controller.rb
200
+ - test/rails3_root/app/controllers/users_controller.rb
201
+ - test/rails3_root/app/helpers/application_helper.rb
202
+ - test/rails3_root/app/models/address.rb
203
+ - test/rails3_root/app/models/flea.rb
204
+ - test/rails3_root/app/models/friendship.rb
205
+ - test/rails3_root/app/models/notifier.rb
206
+ - test/rails3_root/app/models/pets/cat.rb
207
+ - test/rails3_root/app/models/pets/dog.rb
208
+ - test/rails3_root/app/models/post.rb
209
+ - test/rails3_root/app/models/product.rb
210
+ - test/rails3_root/app/models/profile.rb
211
+ - test/rails3_root/app/models/registration.rb
212
+ - test/rails3_root/app/models/tag.rb
213
+ - test/rails3_root/app/models/tagging.rb
214
+ - test/rails3_root/app/models/treat.rb
215
+ - test/rails3_root/app/models/user.rb
216
+ - test/rails3_root/app/views/layouts/application.html.erb
217
+ - test/rails3_root/app/views/layouts/posts.rhtml
218
+ - test/rails3_root/app/views/layouts/users.rhtml
219
+ - test/rails3_root/app/views/layouts/wide.html.erb
220
+ - test/rails3_root/app/views/notifier/the_email.html.erb
221
+ - test/rails3_root/app/views/posts/edit.rhtml
222
+ - test/rails3_root/app/views/posts/index.rhtml
223
+ - test/rails3_root/app/views/posts/new.rhtml
224
+ - test/rails3_root/app/views/posts/show.rhtml
225
+ - test/rails3_root/app/views/users/edit.rhtml
226
+ - test/rails3_root/app/views/users/index.rhtml
227
+ - test/rails3_root/app/views/users/new.rhtml
228
+ - test/rails3_root/app/views/users/show.rhtml
229
+ - test/rails3_root/config/application.rb
230
+ - test/rails3_root/config/boot.rb
231
+ - test/rails3_root/config/database.yml
232
+ - test/rails3_root/config/environment.rb
233
+ - test/rails3_root/config/environments/development.rb
234
+ - test/rails3_root/config/environments/production.rb
235
+ - test/rails3_root/config/environments/test.rb
236
+ - test/rails3_root/config/initializers/backtrace_silencers.rb
237
+ - test/rails3_root/config/initializers/inflections.rb
238
+ - test/rails3_root/config/initializers/mime_types.rb
239
+ - test/rails3_root/config/initializers/secret_token.rb
240
+ - test/rails3_root/config/initializers/session_store.rb
241
+ - test/rails3_root/config/locales/en.yml
242
+ - test/rails3_root/config/routes.rb
243
+ - test/rails3_root/config.ru
244
+ - test/rails3_root/db/migrate/001_create_users.rb
245
+ - test/rails3_root/db/migrate/002_create_posts.rb
246
+ - test/rails3_root/db/migrate/003_create_taggings.rb
247
+ - test/rails3_root/db/migrate/004_create_tags.rb
248
+ - test/rails3_root/db/migrate/005_create_dogs.rb
249
+ - test/rails3_root/db/migrate/006_create_addresses.rb
250
+ - test/rails3_root/db/migrate/007_create_fleas.rb
251
+ - test/rails3_root/db/migrate/008_create_dogs_fleas.rb
252
+ - test/rails3_root/db/migrate/009_create_products.rb
253
+ - test/rails3_root/db/migrate/010_create_friendships.rb
254
+ - test/rails3_root/db/migrate/011_create_treats.rb
255
+ - test/rails3_root/db/migrate/20090506203502_create_profiles.rb
256
+ - test/rails3_root/db/migrate/20090506203536_create_registrations.rb
257
+ - test/rails3_root/db/migrate/20090513104502_create_cats.rb
258
+ - test/rails3_root/db/seeds.rb
259
+ - test/rails3_root/db/test.sqlite3
260
+ - test/rails3_root/doc/README_FOR_APP
261
+ - test/rails3_root/Gemfile
262
+ - test/rails3_root/log/development.log
263
+ - test/rails3_root/log/production.log
264
+ - test/rails3_root/log/server.log
265
+ - test/rails3_root/log/test.log
266
+ - test/rails3_root/public/404.html
267
+ - test/rails3_root/public/422.html
268
+ - test/rails3_root/public/500.html
269
+ - test/rails3_root/public/favicon.ico
270
+ - test/rails3_root/public/images/rails.png
271
+ - test/rails3_root/public/index.html
272
+ - test/rails3_root/public/javascripts/application.js
273
+ - test/rails3_root/public/javascripts/controls.js
274
+ - test/rails3_root/public/javascripts/dragdrop.js
275
+ - test/rails3_root/public/javascripts/effects.js
276
+ - test/rails3_root/public/javascripts/prototype.js
277
+ - test/rails3_root/public/javascripts/rails.js
278
+ - test/rails3_root/public/robots.txt
279
+ - test/rails3_root/Rakefile
280
+ - test/rails3_root/README
281
+ - test/rails3_root/script/rails
282
+ - test/rails3_root/test/performance/browsing_test.rb
283
+ - test/rails3_root/test/test_helper.rb
284
+ - test/rails3_test_helper.rb
180
285
  - test/README
181
286
  - test/rspec_test.rb
182
287
  - test/test_helper.rb
@@ -191,7 +296,7 @@ files:
191
296
  - test/unit/tagging_test.rb
192
297
  - test/unit/user_test.rb
193
298
  has_rdoc: true
194
- homepage: http://thoughtbot.com/projects/shoulda
299
+ homepage: http://thoughtbot.com/community/
195
300
  licenses: []
196
301
 
197
302
  post_install_message:
@@ -205,18 +310,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
310
  requirements:
206
311
  - - ">="
207
312
  - !ruby/object:Gem::Version
313
+ segments:
314
+ - 0
208
315
  version: "0"
209
- version:
210
316
  required_rubygems_version: !ruby/object:Gem::Requirement
211
317
  requirements:
212
318
  - - ">="
213
319
  - !ruby/object:Gem::Version
320
+ segments:
321
+ - 0
214
322
  version: "0"
215
- version:
216
323
  requirements: []
217
324
 
218
325
  rubyforge_project: shoulda
219
- rubygems_version: 1.3.5
326
+ rubygems_version: 1.3.6
220
327
  signing_key:
221
328
  specification_version: 3
222
329
  summary: Making tests easy on the fingers and eyes