thoughtbot-shoulda 2.10.2 → 2.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. data/CONTRIBUTION_GUIDELINES.rdoc +5 -5
  2. data/README.rdoc +72 -89
  3. data/Rakefile +31 -33
  4. data/lib/shoulda.rb +6 -6
  5. data/lib/shoulda/action_controller.rb +8 -0
  6. data/lib/shoulda/action_controller/macros.rb +54 -73
  7. data/lib/shoulda/action_controller/matchers.rb +7 -5
  8. data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +10 -7
  9. data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +18 -1
  10. data/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb +62 -0
  11. data/lib/shoulda/action_controller/matchers/render_template_matcher.rb +54 -0
  12. data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +33 -15
  13. data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +10 -10
  14. data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +17 -13
  15. data/lib/shoulda/action_controller/matchers/route_matcher.rb +3 -3
  16. data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +13 -2
  17. data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +1 -1
  18. data/lib/shoulda/action_mailer.rb +3 -0
  19. data/lib/shoulda/action_mailer/assertions.rb +4 -0
  20. data/lib/shoulda/action_mailer/matchers.rb +22 -0
  21. data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +110 -0
  22. data/lib/shoulda/active_record/helpers.rb +8 -3
  23. data/lib/shoulda/active_record/macros.rb +88 -143
  24. data/lib/shoulda/active_record/matchers.rb +0 -1
  25. data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +1 -1
  26. data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +10 -2
  27. data/lib/shoulda/active_record/matchers/association_matcher.rb +8 -8
  28. data/lib/shoulda/active_record/matchers/ensure_inclusion_of_matcher.rb +1 -1
  29. data/lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb +2 -2
  30. data/lib/shoulda/active_record/matchers/have_db_column_matcher.rb +11 -11
  31. data/lib/shoulda/active_record/matchers/have_db_index_matcher.rb +8 -8
  32. data/lib/shoulda/active_record/matchers/validate_format_of_matcher.rb +2 -4
  33. data/lib/shoulda/active_record/matchers/validate_uniqueness_of_matcher.rb +3 -3
  34. data/lib/shoulda/active_record/matchers/validation_matcher.rb +0 -1
  35. data/lib/shoulda/assertions.rb +10 -2
  36. data/lib/shoulda/autoload_macros.rb +20 -20
  37. data/lib/shoulda/context.rb +70 -39
  38. data/lib/shoulda/{rspec.rb → integrations/rspec.rb} +2 -0
  39. data/lib/shoulda/integrations/rspec2.rb +22 -0
  40. data/lib/shoulda/{test_unit.rb → integrations/test_unit.rb} +0 -0
  41. data/lib/shoulda/macros.rb +46 -18
  42. data/lib/shoulda/rails.rb +0 -5
  43. data/lib/shoulda/tasks/yaml_to_shoulda.rake +11 -11
  44. data/lib/shoulda/version.rb +4 -0
  45. data/rails/init.rb +3 -2
  46. data/test/fail_macros.rb +20 -4
  47. data/test/functional/posts_controller_test.rb +7 -7
  48. data/test/functional/users_controller_test.rb +1 -1
  49. data/test/matchers/action_mailer/have_sent_email_test.rb +70 -0
  50. data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +7 -1
  51. data/test/matchers/active_record/allow_value_matcher_test.rb +1 -1
  52. data/test/matchers/active_record/association_matcher_test.rb +16 -16
  53. data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +3 -2
  54. data/test/matchers/active_record/ensure_length_of_matcher_test.rb +1 -1
  55. data/test/matchers/active_record/have_db_column_matcher_test.rb +1 -1
  56. data/test/matchers/active_record/have_db_index_matcher_test.rb +1 -1
  57. data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +1 -1
  58. data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +1 -1
  59. data/test/matchers/active_record/validate_format_of_matcher_test.rb +1 -1
  60. data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +1 -1
  61. data/test/matchers/active_record/validate_presence_of_matcher_test.rb +1 -1
  62. data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +1 -1
  63. data/test/matchers/controller/assign_to_matcher_test.rb +11 -1
  64. data/test/matchers/controller/filter_param_matcher_test.rb +10 -2
  65. data/test/matchers/controller/redirect_to_matcher_test.rb +37 -0
  66. data/test/matchers/controller/render_template_matcher_test.rb +37 -0
  67. data/test/matchers/controller/render_with_layout_matcher_test.rb +15 -1
  68. data/test/matchers/controller/respond_with_content_type_matcher_test.rb +1 -1
  69. data/test/matchers/controller/respond_with_matcher_test.rb +1 -11
  70. data/test/matchers/controller/route_matcher_test.rb +18 -1
  71. data/test/matchers/controller/set_session_matcher_test.rb +11 -1
  72. data/test/matchers/controller/set_the_flash_matcher.rb +1 -1
  73. data/test/other/autoload_macro_test.rb +1 -1
  74. data/test/other/context_test.rb +210 -27
  75. data/test/other/convert_to_should_syntax_test.rb +1 -1
  76. data/test/other/helpers_test.rb +13 -36
  77. data/test/other/private_helpers_test.rb +2 -2
  78. data/test/other/should_test.rb +13 -13
  79. data/test/{model_builder.rb → rails2_model_builder.rb} +32 -8
  80. data/test/{rails_root → rails2_root}/app/controllers/application_controller.rb +0 -3
  81. data/test/{rails_root → rails2_root}/app/controllers/posts_controller.rb +0 -0
  82. data/test/{rails_root → rails2_root}/app/controllers/users_controller.rb +0 -0
  83. data/test/{rails_root → rails2_root}/app/helpers/application_helper.rb +0 -0
  84. data/test/{rails_root → rails2_root}/app/helpers/posts_helper.rb +0 -0
  85. data/test/{rails_root → rails2_root}/app/helpers/users_helper.rb +0 -0
  86. data/test/{rails_root → rails2_root}/app/models/address.rb +0 -0
  87. data/test/rails2_root/app/models/flea.rb +11 -0
  88. data/test/{rails_root → rails2_root}/app/models/friendship.rb +0 -0
  89. data/test/rails2_root/app/models/notifier.rb +8 -0
  90. data/test/{rails_root → rails2_root}/app/models/pets/cat.rb +0 -0
  91. data/test/{rails_root → rails2_root}/app/models/pets/dog.rb +0 -0
  92. data/test/{rails_root → rails2_root}/app/models/post.rb +1 -1
  93. data/test/{rails_root → rails2_root}/app/models/product.rb +0 -0
  94. data/test/{rails_root → rails2_root}/app/models/profile.rb +0 -0
  95. data/test/{rails_root → rails2_root}/app/models/registration.rb +0 -0
  96. data/test/{rails_root → rails2_root}/app/models/tag.rb +0 -0
  97. data/test/{rails_root → rails2_root}/app/models/tagging.rb +0 -0
  98. data/test/{rails_root → rails2_root}/app/models/treat.rb +0 -0
  99. data/test/{rails_root → rails2_root}/app/models/user.rb +0 -0
  100. data/test/{rails_root → rails2_root}/app/views/layouts/posts.rhtml +0 -0
  101. data/test/{rails_root → rails2_root}/app/views/layouts/users.rhtml +0 -0
  102. data/test/{rails_root → rails2_root}/app/views/layouts/wide.html.erb +0 -0
  103. data/test/rails2_root/app/views/notifier/the_email.html.erb +1 -0
  104. data/test/{rails_root → rails2_root}/app/views/posts/edit.rhtml +0 -0
  105. data/test/{rails_root → rails2_root}/app/views/posts/index.rhtml +0 -0
  106. data/test/{rails_root → rails2_root}/app/views/posts/new.rhtml +0 -0
  107. data/test/{rails_root → rails2_root}/app/views/posts/show.rhtml +0 -0
  108. data/test/{rails_root → rails2_root}/app/views/users/edit.rhtml +0 -0
  109. data/test/{rails_root → rails2_root}/app/views/users/index.rhtml +0 -0
  110. data/test/{rails_root → rails2_root}/app/views/users/new.rhtml +0 -0
  111. data/test/{rails_root → rails2_root}/app/views/users/show.rhtml +0 -0
  112. data/test/{rails_root → rails2_root}/config/boot.rb +0 -0
  113. data/test/{rails_root → rails2_root}/config/database.yml +1 -1
  114. data/test/{rails_root → rails2_root}/config/environment.rb +0 -1
  115. data/test/rails2_root/config/environments/test.rb +23 -0
  116. data/test/{rails_root → rails2_root}/config/initializers/new_rails_defaults.rb +0 -0
  117. data/test/{rails_root → rails2_root}/config/initializers/shoulda.rb +0 -0
  118. data/test/{rails_root → rails2_root}/config/routes.rb +0 -0
  119. data/test/{rails_root → rails2_root}/db/migrate/001_create_users.rb +0 -0
  120. data/test/{rails_root → rails2_root}/db/migrate/002_create_posts.rb +0 -0
  121. data/test/{rails_root → rails2_root}/db/migrate/003_create_taggings.rb +0 -0
  122. data/test/{rails_root → rails2_root}/db/migrate/004_create_tags.rb +0 -0
  123. data/test/{rails_root → rails2_root}/db/migrate/005_create_dogs.rb +0 -0
  124. data/test/{rails_root → rails2_root}/db/migrate/006_create_addresses.rb +0 -0
  125. data/test/{rails_root → rails2_root}/db/migrate/007_create_fleas.rb +0 -0
  126. data/test/{rails_root → rails2_root}/db/migrate/008_create_dogs_fleas.rb +0 -0
  127. data/test/{rails_root → rails2_root}/db/migrate/009_create_products.rb +0 -0
  128. data/test/{rails_root → rails2_root}/db/migrate/010_create_friendships.rb +0 -0
  129. data/test/{rails_root → rails2_root}/db/migrate/011_create_treats.rb +0 -0
  130. data/test/{rails_root → rails2_root}/db/migrate/20090506203502_create_profiles.rb +0 -0
  131. data/test/{rails_root → rails2_root}/db/migrate/20090506203536_create_registrations.rb +0 -0
  132. data/test/{rails_root → rails2_root}/db/migrate/20090513104502_create_cats.rb +0 -0
  133. data/test/{rails_root → rails2_root}/db/schema.rb +0 -0
  134. data/test/{rails_root → rails2_root}/public/404.html +0 -0
  135. data/test/{rails_root → rails2_root}/public/422.html +0 -0
  136. data/test/{rails_root → rails2_root}/public/500.html +0 -0
  137. data/test/{rails_root → rails2_root}/script/console +0 -0
  138. data/test/{rails_root → rails2_root}/script/generate +0 -0
  139. data/test/{rails_root → rails2_root}/test/shoulda_macros/custom_macro.rb +0 -0
  140. data/test/{rails_root → rails2_root}/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +0 -0
  141. data/test/{rails_root → rails2_root}/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +0 -0
  142. data/test/rails2_test_helper.rb +6 -0
  143. data/test/rails3_model_builder.rb +118 -0
  144. data/test/rails3_root/Gemfile +28 -0
  145. data/test/rails3_root/README +244 -0
  146. data/test/rails3_root/Rakefile +10 -0
  147. data/test/rails3_root/app/controllers/application_controller.rb +22 -0
  148. data/test/rails3_root/app/controllers/posts_controller.rb +87 -0
  149. data/test/rails3_root/app/controllers/users_controller.rb +82 -0
  150. data/test/rails3_root/app/helpers/application_helper.rb +2 -0
  151. data/test/rails3_root/app/models/address.rb +7 -0
  152. data/test/rails3_root/app/models/flea.rb +11 -0
  153. data/test/rails3_root/app/models/friendship.rb +4 -0
  154. data/test/rails3_root/app/models/notifier.rb +8 -0
  155. data/test/rails3_root/app/models/pets/cat.rb +7 -0
  156. data/test/rails3_root/app/models/pets/dog.rb +10 -0
  157. data/test/rails3_root/app/models/post.rb +12 -0
  158. data/test/rails3_root/app/models/product.rb +12 -0
  159. data/test/rails3_root/app/models/profile.rb +2 -0
  160. data/test/rails3_root/app/models/registration.rb +2 -0
  161. data/test/rails3_root/app/models/tag.rb +8 -0
  162. data/test/rails3_root/app/models/tagging.rb +4 -0
  163. data/test/rails3_root/app/models/treat.rb +3 -0
  164. data/test/rails3_root/app/models/user.rb +32 -0
  165. data/test/rails3_root/app/views/layouts/application.html.erb +14 -0
  166. data/test/rails3_root/app/views/layouts/posts.rhtml +19 -0
  167. data/test/rails3_root/app/views/layouts/users.rhtml +17 -0
  168. data/test/rails3_root/app/views/layouts/wide.html.erb +1 -0
  169. data/test/rails3_root/app/views/notifier/the_email.html.erb +1 -0
  170. data/test/rails3_root/app/views/posts/edit.rhtml +27 -0
  171. data/test/rails3_root/app/views/posts/index.rhtml +25 -0
  172. data/test/rails3_root/app/views/posts/new.rhtml +24 -0
  173. data/test/rails3_root/app/views/posts/show.rhtml +18 -0
  174. data/test/rails3_root/app/views/users/edit.rhtml +22 -0
  175. data/test/rails3_root/app/views/users/index.rhtml +22 -0
  176. data/test/rails3_root/app/views/users/new.rhtml +21 -0
  177. data/test/rails3_root/app/views/users/show.rhtml +13 -0
  178. data/test/rails3_root/config.ru +4 -0
  179. data/test/rails3_root/config/application.rb +46 -0
  180. data/test/rails3_root/config/boot.rb +6 -0
  181. data/test/rails3_root/config/database.yml +22 -0
  182. data/test/rails3_root/config/environment.rb +5 -0
  183. data/test/rails3_root/config/environments/development.rb +19 -0
  184. data/test/rails3_root/config/environments/production.rb +42 -0
  185. data/test/rails3_root/config/environments/test.rb +32 -0
  186. data/test/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
  187. data/test/rails3_root/config/initializers/inflections.rb +10 -0
  188. data/test/rails3_root/config/initializers/mime_types.rb +5 -0
  189. data/test/rails3_root/config/initializers/secret_token.rb +7 -0
  190. data/test/rails3_root/config/initializers/session_store.rb +8 -0
  191. data/test/rails3_root/config/locales/en.yml +5 -0
  192. data/test/rails3_root/config/routes.rb +4 -0
  193. data/test/rails3_root/db/migrate/001_create_users.rb +19 -0
  194. data/test/rails3_root/db/migrate/002_create_posts.rb +13 -0
  195. data/test/rails3_root/db/migrate/003_create_taggings.rb +12 -0
  196. data/test/rails3_root/db/migrate/004_create_tags.rb +11 -0
  197. data/test/rails3_root/db/migrate/005_create_dogs.rb +12 -0
  198. data/test/rails3_root/db/migrate/006_create_addresses.rb +14 -0
  199. data/test/rails3_root/db/migrate/007_create_fleas.rb +11 -0
  200. data/test/rails3_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  201. data/test/rails3_root/db/migrate/009_create_products.rb +17 -0
  202. data/test/rails3_root/db/migrate/010_create_friendships.rb +14 -0
  203. data/test/rails3_root/db/migrate/011_create_treats.rb +12 -0
  204. data/test/rails3_root/db/migrate/20090506203502_create_profiles.rb +12 -0
  205. data/test/rails3_root/db/migrate/20090506203536_create_registrations.rb +14 -0
  206. data/test/rails3_root/db/migrate/20090513104502_create_cats.rb +12 -0
  207. data/test/rails3_root/db/seeds.rb +7 -0
  208. data/test/rails3_root/public/404.html +26 -0
  209. data/test/rails3_root/public/422.html +26 -0
  210. data/test/rails3_root/public/500.html +26 -0
  211. data/test/{rails_root/config/environments/test.rb → rails3_root/public/favicon.ico} +0 -0
  212. data/test/rails3_root/public/images/rails.png +0 -0
  213. data/test/rails3_root/public/index.html +279 -0
  214. data/test/rails3_root/public/javascripts/application.js +2 -0
  215. data/test/rails3_root/public/javascripts/controls.js +965 -0
  216. data/test/rails3_root/public/javascripts/dragdrop.js +974 -0
  217. data/test/rails3_root/public/javascripts/effects.js +1123 -0
  218. data/test/rails3_root/public/javascripts/prototype.js +4874 -0
  219. data/test/rails3_root/public/javascripts/rails.js +118 -0
  220. data/test/rails3_root/public/robots.txt +5 -0
  221. data/test/rails3_root/script/rails +9 -0
  222. data/test/rails3_root/test/performance/browsing_test.rb +9 -0
  223. data/test/rails3_root/test/test_helper.rb +13 -0
  224. data/test/rails3_test_helper.rb +6 -0
  225. data/test/test_helper.rb +16 -8
  226. data/test/unit/address_test.rb +1 -1
  227. data/test/unit/cat_test.rb +1 -1
  228. data/test/unit/dog_test.rb +1 -1
  229. data/test/unit/flea_test.rb +9 -1
  230. data/test/unit/friendship_test.rb +1 -1
  231. data/test/unit/post_test.rb +1 -5
  232. data/test/unit/product_test.rb +1 -1
  233. data/test/unit/tag_test.rb +1 -5
  234. data/test/unit/tagging_test.rb +1 -1
  235. data/test/unit/user_test.rb +3 -37
  236. metadata +184 -118
  237. data/lib/shoulda/action_view.rb +0 -10
  238. data/lib/shoulda/action_view/macros.rb +0 -61
  239. data/lib/shoulda/active_record/matchers/have_named_scope_matcher.rb +0 -128
  240. data/test/matchers/active_record/have_named_scope_matcher_test.rb +0 -65
  241. 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,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thoughtbot-shoulda
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.2
4
+ hash: 33
5
+ prerelease: false
6
+ segments:
7
+ - 2
8
+ - 11
9
+ - 1
10
+ version: 2.11.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Tammer Saleh
14
+ - Joe Ferris
15
+ - Ryan McGeary
16
+ - Dan Croak
17
+ - Matt Jankowski
8
18
  autorequire:
9
19
  bindir: bin
10
20
  cert_chain: []
11
21
 
12
- date: 2009-07-15 00:00:00 -07:00
22
+ date: 2010-06-11 00:00:00 +02:00
13
23
  default_executable: convert_to_should_syntax
14
24
  dependencies: []
15
25
 
16
- description:
17
- email: tsaleh@thoughtbot.com
26
+ description: Making tests easy on the fingers and eyes
27
+ email: support@thoughtbot.com
18
28
  executables:
19
29
  - convert_to_should_syntax
20
30
  extensions: []
@@ -28,12 +38,11 @@ files:
28
38
  - Rakefile
29
39
  - README.rdoc
30
40
  - bin/convert_to_should_syntax
31
- - lib/shoulda
32
- - lib/shoulda/action_controller
33
41
  - lib/shoulda/action_controller/macros.rb
34
- - lib/shoulda/action_controller/matchers
35
42
  - lib/shoulda/action_controller/matchers/assign_to_matcher.rb
36
43
  - lib/shoulda/action_controller/matchers/filter_param_matcher.rb
44
+ - lib/shoulda/action_controller/matchers/redirect_to_matcher.rb
45
+ - lib/shoulda/action_controller/matchers/render_template_matcher.rb
37
46
  - lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb
38
47
  - lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb
39
48
  - lib/shoulda/action_controller/matchers/respond_with_matcher.rb
@@ -42,17 +51,13 @@ files:
42
51
  - lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb
43
52
  - lib/shoulda/action_controller/matchers.rb
44
53
  - lib/shoulda/action_controller.rb
45
- - lib/shoulda/action_mailer
46
54
  - lib/shoulda/action_mailer/assertions.rb
55
+ - lib/shoulda/action_mailer/matchers/have_sent_email.rb
56
+ - lib/shoulda/action_mailer/matchers.rb
47
57
  - lib/shoulda/action_mailer.rb
48
- - lib/shoulda/action_view
49
- - lib/shoulda/action_view/macros.rb
50
- - lib/shoulda/action_view.rb
51
- - lib/shoulda/active_record
52
58
  - lib/shoulda/active_record/assertions.rb
53
59
  - lib/shoulda/active_record/helpers.rb
54
60
  - lib/shoulda/active_record/macros.rb
55
- - lib/shoulda/active_record/matchers
56
61
  - lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb
57
62
  - lib/shoulda/active_record/matchers/allow_value_matcher.rb
58
63
  - lib/shoulda/active_record/matchers/association_matcher.rb
@@ -60,7 +65,6 @@ files:
60
65
  - lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb
61
66
  - lib/shoulda/active_record/matchers/have_db_column_matcher.rb
62
67
  - lib/shoulda/active_record/matchers/have_db_index_matcher.rb
63
- - lib/shoulda/active_record/matchers/have_named_scope_matcher.rb
64
68
  - lib/shoulda/active_record/matchers/have_readonly_attribute_matcher.rb
65
69
  - lib/shoulda/active_record/matchers/validate_acceptance_of_matcher.rb
66
70
  - lib/shoulda/active_record/matchers/validate_format_of_matcher.rb
@@ -74,20 +78,20 @@ files:
74
78
  - lib/shoulda/autoload_macros.rb
75
79
  - lib/shoulda/context.rb
76
80
  - lib/shoulda/helpers.rb
81
+ - lib/shoulda/integrations/rspec.rb
82
+ - lib/shoulda/integrations/rspec2.rb
83
+ - lib/shoulda/integrations/test_unit.rb
77
84
  - lib/shoulda/macros.rb
78
85
  - lib/shoulda/private_helpers.rb
79
86
  - lib/shoulda/proc_extensions.rb
80
87
  - lib/shoulda/rails.rb
81
- - lib/shoulda/rspec.rb
82
- - lib/shoulda/tasks
83
88
  - lib/shoulda/tasks/list_tests.rake
84
89
  - lib/shoulda/tasks/yaml_to_shoulda.rake
85
90
  - lib/shoulda/tasks.rb
86
- - lib/shoulda/test_unit.rb
91
+ - lib/shoulda/version.rb
87
92
  - lib/shoulda.rb
88
93
  - rails/init.rb
89
94
  - test/fail_macros.rb
90
- - test/fixtures
91
95
  - test/fixtures/addresses.yml
92
96
  - test/fixtures/friendships.yml
93
97
  - test/fixtures/posts.yml
@@ -95,11 +99,9 @@ files:
95
99
  - test/fixtures/taggings.yml
96
100
  - test/fixtures/tags.yml
97
101
  - test/fixtures/users.yml
98
- - test/functional
99
102
  - test/functional/posts_controller_test.rb
100
103
  - test/functional/users_controller_test.rb
101
- - test/matchers
102
- - test/matchers/active_record
104
+ - test/matchers/action_mailer/have_sent_email_test.rb
103
105
  - test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb
104
106
  - test/matchers/active_record/allow_value_matcher_test.rb
105
107
  - test/matchers/active_record/association_matcher_test.rb
@@ -107,121 +109,177 @@ files:
107
109
  - test/matchers/active_record/ensure_length_of_matcher_test.rb
108
110
  - test/matchers/active_record/have_db_column_matcher_test.rb
109
111
  - test/matchers/active_record/have_db_index_matcher_test.rb
110
- - test/matchers/active_record/have_named_scope_matcher_test.rb
111
112
  - test/matchers/active_record/have_readonly_attributes_matcher_test.rb
112
113
  - test/matchers/active_record/validate_acceptance_of_matcher_test.rb
113
114
  - test/matchers/active_record/validate_format_of_matcher_test.rb
114
115
  - test/matchers/active_record/validate_numericality_of_matcher_test.rb
115
116
  - test/matchers/active_record/validate_presence_of_matcher_test.rb
116
117
  - test/matchers/active_record/validate_uniqueness_of_matcher_test.rb
117
- - test/matchers/controller
118
118
  - test/matchers/controller/assign_to_matcher_test.rb
119
119
  - test/matchers/controller/filter_param_matcher_test.rb
120
+ - test/matchers/controller/redirect_to_matcher_test.rb
121
+ - test/matchers/controller/render_template_matcher_test.rb
120
122
  - test/matchers/controller/render_with_layout_matcher_test.rb
121
123
  - test/matchers/controller/respond_with_content_type_matcher_test.rb
122
124
  - test/matchers/controller/respond_with_matcher_test.rb
123
125
  - test/matchers/controller/route_matcher_test.rb
124
126
  - test/matchers/controller/set_session_matcher_test.rb
125
127
  - test/matchers/controller/set_the_flash_matcher.rb
126
- - test/model_builder.rb
127
- - test/other
128
128
  - test/other/autoload_macro_test.rb
129
129
  - test/other/context_test.rb
130
130
  - test/other/convert_to_should_syntax_test.rb
131
131
  - test/other/helpers_test.rb
132
132
  - test/other/private_helpers_test.rb
133
133
  - test/other/should_test.rb
134
- - test/rails_root
135
- - test/rails_root/app
136
- - test/rails_root/app/controllers
137
- - test/rails_root/app/controllers/application_controller.rb
138
- - test/rails_root/app/controllers/posts_controller.rb
139
- - test/rails_root/app/controllers/users_controller.rb
140
- - test/rails_root/app/helpers
141
- - test/rails_root/app/helpers/application_helper.rb
142
- - test/rails_root/app/helpers/posts_helper.rb
143
- - test/rails_root/app/helpers/users_helper.rb
144
- - test/rails_root/app/models
145
- - test/rails_root/app/models/address.rb
146
- - test/rails_root/app/models/flea.rb
147
- - test/rails_root/app/models/friendship.rb
148
- - test/rails_root/app/models/pets
149
- - test/rails_root/app/models/pets/cat.rb
150
- - test/rails_root/app/models/pets/dog.rb
151
- - test/rails_root/app/models/post.rb
152
- - test/rails_root/app/models/product.rb
153
- - test/rails_root/app/models/profile.rb
154
- - test/rails_root/app/models/registration.rb
155
- - test/rails_root/app/models/tag.rb
156
- - test/rails_root/app/models/tagging.rb
157
- - test/rails_root/app/models/treat.rb
158
- - test/rails_root/app/models/user.rb
159
- - test/rails_root/app/views
160
- - test/rails_root/app/views/layouts
161
- - test/rails_root/app/views/layouts/posts.rhtml
162
- - test/rails_root/app/views/layouts/users.rhtml
163
- - test/rails_root/app/views/layouts/wide.html.erb
164
- - test/rails_root/app/views/posts
165
- - test/rails_root/app/views/posts/edit.rhtml
166
- - test/rails_root/app/views/posts/index.rhtml
167
- - test/rails_root/app/views/posts/new.rhtml
168
- - test/rails_root/app/views/posts/show.rhtml
169
- - test/rails_root/app/views/users
170
- - test/rails_root/app/views/users/edit.rhtml
171
- - test/rails_root/app/views/users/index.rhtml
172
- - test/rails_root/app/views/users/new.rhtml
173
- - test/rails_root/app/views/users/show.rhtml
174
- - test/rails_root/config
175
- - test/rails_root/config/boot.rb
176
- - test/rails_root/config/database.yml
177
- - test/rails_root/config/environment.rb
178
- - test/rails_root/config/environments
179
- - test/rails_root/config/environments/test.rb
180
- - test/rails_root/config/initializers
181
- - test/rails_root/config/initializers/new_rails_defaults.rb
182
- - test/rails_root/config/initializers/shoulda.rb
183
- - test/rails_root/config/routes.rb
184
- - test/rails_root/db
185
- - test/rails_root/db/migrate
186
- - test/rails_root/db/migrate/001_create_users.rb
187
- - test/rails_root/db/migrate/002_create_posts.rb
188
- - test/rails_root/db/migrate/003_create_taggings.rb
189
- - test/rails_root/db/migrate/004_create_tags.rb
190
- - test/rails_root/db/migrate/005_create_dogs.rb
191
- - test/rails_root/db/migrate/006_create_addresses.rb
192
- - test/rails_root/db/migrate/007_create_fleas.rb
193
- - test/rails_root/db/migrate/008_create_dogs_fleas.rb
194
- - test/rails_root/db/migrate/009_create_products.rb
195
- - test/rails_root/db/migrate/010_create_friendships.rb
196
- - test/rails_root/db/migrate/011_create_treats.rb
197
- - test/rails_root/db/migrate/20090506203502_create_profiles.rb
198
- - test/rails_root/db/migrate/20090506203536_create_registrations.rb
199
- - test/rails_root/db/migrate/20090513104502_create_cats.rb
200
- - test/rails_root/db/schema.rb
201
- - test/rails_root/log
202
- - test/rails_root/public
203
- - test/rails_root/public/404.html
204
- - test/rails_root/public/422.html
205
- - test/rails_root/public/500.html
206
- - test/rails_root/script
207
- - test/rails_root/script/console
208
- - test/rails_root/script/generate
209
- - test/rails_root/test
210
- - test/rails_root/test/shoulda_macros
211
- - test/rails_root/test/shoulda_macros/custom_macro.rb
212
- - test/rails_root/vendor
213
- - test/rails_root/vendor/gems
214
- - test/rails_root/vendor/gems/gem_with_macro-0.0.1
215
- - test/rails_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros
216
- - test/rails_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb
217
- - test/rails_root/vendor/plugins
218
- - test/rails_root/vendor/plugins/plugin_with_macro
219
- - test/rails_root/vendor/plugins/plugin_with_macro/shoulda_macros
220
- - test/rails_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb
134
+ - test/rails2_model_builder.rb
135
+ - test/rails2_root/app/controllers/application_controller.rb
136
+ - test/rails2_root/app/controllers/posts_controller.rb
137
+ - test/rails2_root/app/controllers/users_controller.rb
138
+ - test/rails2_root/app/helpers/application_helper.rb
139
+ - test/rails2_root/app/helpers/posts_helper.rb
140
+ - test/rails2_root/app/helpers/users_helper.rb
141
+ - test/rails2_root/app/models/address.rb
142
+ - test/rails2_root/app/models/flea.rb
143
+ - test/rails2_root/app/models/friendship.rb
144
+ - test/rails2_root/app/models/notifier.rb
145
+ - test/rails2_root/app/models/pets/cat.rb
146
+ - test/rails2_root/app/models/pets/dog.rb
147
+ - test/rails2_root/app/models/post.rb
148
+ - test/rails2_root/app/models/product.rb
149
+ - test/rails2_root/app/models/profile.rb
150
+ - test/rails2_root/app/models/registration.rb
151
+ - test/rails2_root/app/models/tag.rb
152
+ - test/rails2_root/app/models/tagging.rb
153
+ - test/rails2_root/app/models/treat.rb
154
+ - test/rails2_root/app/models/user.rb
155
+ - test/rails2_root/app/views/layouts/posts.rhtml
156
+ - test/rails2_root/app/views/layouts/users.rhtml
157
+ - test/rails2_root/app/views/layouts/wide.html.erb
158
+ - test/rails2_root/app/views/notifier/the_email.html.erb
159
+ - test/rails2_root/app/views/posts/edit.rhtml
160
+ - test/rails2_root/app/views/posts/index.rhtml
161
+ - test/rails2_root/app/views/posts/new.rhtml
162
+ - test/rails2_root/app/views/posts/show.rhtml
163
+ - test/rails2_root/app/views/users/edit.rhtml
164
+ - test/rails2_root/app/views/users/index.rhtml
165
+ - test/rails2_root/app/views/users/new.rhtml
166
+ - test/rails2_root/app/views/users/show.rhtml
167
+ - test/rails2_root/config/boot.rb
168
+ - test/rails2_root/config/database.yml
169
+ - test/rails2_root/config/environment.rb
170
+ - test/rails2_root/config/environments/test.rb
171
+ - test/rails2_root/config/initializers/new_rails_defaults.rb
172
+ - test/rails2_root/config/initializers/shoulda.rb
173
+ - test/rails2_root/config/routes.rb
174
+ - test/rails2_root/db/migrate/001_create_users.rb
175
+ - test/rails2_root/db/migrate/002_create_posts.rb
176
+ - test/rails2_root/db/migrate/003_create_taggings.rb
177
+ - test/rails2_root/db/migrate/004_create_tags.rb
178
+ - test/rails2_root/db/migrate/005_create_dogs.rb
179
+ - test/rails2_root/db/migrate/006_create_addresses.rb
180
+ - test/rails2_root/db/migrate/007_create_fleas.rb
181
+ - test/rails2_root/db/migrate/008_create_dogs_fleas.rb
182
+ - test/rails2_root/db/migrate/009_create_products.rb
183
+ - test/rails2_root/db/migrate/010_create_friendships.rb
184
+ - test/rails2_root/db/migrate/011_create_treats.rb
185
+ - test/rails2_root/db/migrate/20090506203502_create_profiles.rb
186
+ - test/rails2_root/db/migrate/20090506203536_create_registrations.rb
187
+ - test/rails2_root/db/migrate/20090513104502_create_cats.rb
188
+ - test/rails2_root/db/schema.rb
189
+ - test/rails2_root/public/404.html
190
+ - test/rails2_root/public/422.html
191
+ - test/rails2_root/public/500.html
192
+ - test/rails2_root/script/console
193
+ - test/rails2_root/script/generate
194
+ - test/rails2_root/test/shoulda_macros/custom_macro.rb
195
+ - test/rails2_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb
196
+ - test/rails2_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb
197
+ - test/rails2_test_helper.rb
198
+ - test/rails3_model_builder.rb
199
+ - test/rails3_root/app/controllers/application_controller.rb
200
+ - test/rails3_root/app/controllers/posts_controller.rb
201
+ - test/rails3_root/app/controllers/users_controller.rb
202
+ - test/rails3_root/app/helpers/application_helper.rb
203
+ - test/rails3_root/app/models/address.rb
204
+ - test/rails3_root/app/models/flea.rb
205
+ - test/rails3_root/app/models/friendship.rb
206
+ - test/rails3_root/app/models/notifier.rb
207
+ - test/rails3_root/app/models/pets/cat.rb
208
+ - test/rails3_root/app/models/pets/dog.rb
209
+ - test/rails3_root/app/models/post.rb
210
+ - test/rails3_root/app/models/product.rb
211
+ - test/rails3_root/app/models/profile.rb
212
+ - test/rails3_root/app/models/registration.rb
213
+ - test/rails3_root/app/models/tag.rb
214
+ - test/rails3_root/app/models/tagging.rb
215
+ - test/rails3_root/app/models/treat.rb
216
+ - test/rails3_root/app/models/user.rb
217
+ - test/rails3_root/app/views/layouts/application.html.erb
218
+ - test/rails3_root/app/views/layouts/posts.rhtml
219
+ - test/rails3_root/app/views/layouts/users.rhtml
220
+ - test/rails3_root/app/views/layouts/wide.html.erb
221
+ - test/rails3_root/app/views/notifier/the_email.html.erb
222
+ - test/rails3_root/app/views/posts/edit.rhtml
223
+ - test/rails3_root/app/views/posts/index.rhtml
224
+ - test/rails3_root/app/views/posts/new.rhtml
225
+ - test/rails3_root/app/views/posts/show.rhtml
226
+ - test/rails3_root/app/views/users/edit.rhtml
227
+ - test/rails3_root/app/views/users/index.rhtml
228
+ - test/rails3_root/app/views/users/new.rhtml
229
+ - test/rails3_root/app/views/users/show.rhtml
230
+ - test/rails3_root/config/application.rb
231
+ - test/rails3_root/config/boot.rb
232
+ - test/rails3_root/config/database.yml
233
+ - test/rails3_root/config/environment.rb
234
+ - test/rails3_root/config/environments/development.rb
235
+ - test/rails3_root/config/environments/production.rb
236
+ - test/rails3_root/config/environments/test.rb
237
+ - test/rails3_root/config/initializers/backtrace_silencers.rb
238
+ - test/rails3_root/config/initializers/inflections.rb
239
+ - test/rails3_root/config/initializers/mime_types.rb
240
+ - test/rails3_root/config/initializers/secret_token.rb
241
+ - test/rails3_root/config/initializers/session_store.rb
242
+ - test/rails3_root/config/locales/en.yml
243
+ - test/rails3_root/config/routes.rb
244
+ - test/rails3_root/config.ru
245
+ - test/rails3_root/db/migrate/001_create_users.rb
246
+ - test/rails3_root/db/migrate/002_create_posts.rb
247
+ - test/rails3_root/db/migrate/003_create_taggings.rb
248
+ - test/rails3_root/db/migrate/004_create_tags.rb
249
+ - test/rails3_root/db/migrate/005_create_dogs.rb
250
+ - test/rails3_root/db/migrate/006_create_addresses.rb
251
+ - test/rails3_root/db/migrate/007_create_fleas.rb
252
+ - test/rails3_root/db/migrate/008_create_dogs_fleas.rb
253
+ - test/rails3_root/db/migrate/009_create_products.rb
254
+ - test/rails3_root/db/migrate/010_create_friendships.rb
255
+ - test/rails3_root/db/migrate/011_create_treats.rb
256
+ - test/rails3_root/db/migrate/20090506203502_create_profiles.rb
257
+ - test/rails3_root/db/migrate/20090506203536_create_registrations.rb
258
+ - test/rails3_root/db/migrate/20090513104502_create_cats.rb
259
+ - test/rails3_root/db/seeds.rb
260
+ - test/rails3_root/Gemfile
261
+ - test/rails3_root/public/404.html
262
+ - test/rails3_root/public/422.html
263
+ - test/rails3_root/public/500.html
264
+ - test/rails3_root/public/favicon.ico
265
+ - test/rails3_root/public/images/rails.png
266
+ - test/rails3_root/public/index.html
267
+ - test/rails3_root/public/javascripts/application.js
268
+ - test/rails3_root/public/javascripts/controls.js
269
+ - test/rails3_root/public/javascripts/dragdrop.js
270
+ - test/rails3_root/public/javascripts/effects.js
271
+ - test/rails3_root/public/javascripts/prototype.js
272
+ - test/rails3_root/public/javascripts/rails.js
273
+ - test/rails3_root/public/robots.txt
274
+ - test/rails3_root/Rakefile
275
+ - test/rails3_root/README
276
+ - test/rails3_root/script/rails
277
+ - test/rails3_root/test/performance/browsing_test.rb
278
+ - test/rails3_root/test/test_helper.rb
279
+ - test/rails3_test_helper.rb
221
280
  - test/README
222
281
  - test/rspec_test.rb
223
282
  - test/test_helper.rb
224
- - test/unit
225
283
  - test/unit/address_test.rb
226
284
  - test/unit/cat_test.rb
227
285
  - test/unit/dog_test.rb
@@ -232,8 +290,10 @@ files:
232
290
  - test/unit/tag_test.rb
233
291
  - test/unit/tagging_test.rb
234
292
  - test/unit/user_test.rb
235
- has_rdoc: false
236
- homepage: http://thoughtbot.com/projects/shoulda
293
+ has_rdoc: true
294
+ homepage: http://thoughtbot.com/community/
295
+ licenses: []
296
+
237
297
  post_install_message:
238
298
  rdoc_options:
239
299
  - --line-numbers
@@ -242,21 +302,27 @@ rdoc_options:
242
302
  require_paths:
243
303
  - lib
244
304
  required_ruby_version: !ruby/object:Gem::Requirement
305
+ none: false
245
306
  requirements:
246
307
  - - ">="
247
308
  - !ruby/object:Gem::Version
309
+ hash: 3
310
+ segments:
311
+ - 0
248
312
  version: "0"
249
- version:
250
313
  required_rubygems_version: !ruby/object:Gem::Requirement
314
+ none: false
251
315
  requirements:
252
316
  - - ">="
253
317
  - !ruby/object:Gem::Version
318
+ hash: 3
319
+ segments:
320
+ - 0
254
321
  version: "0"
255
- version:
256
322
  requirements: []
257
323
 
258
324
  rubyforge_project: shoulda
259
- rubygems_version: 1.2.0
325
+ rubygems_version: 1.3.7
260
326
  signing_key:
261
327
  specification_version: 3
262
328
  summary: Making tests easy on the fingers and eyes