hashrocket-clearance 0.4.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 (525) hide show
  1. data/LICENSE +21 -0
  2. data/README.textile +168 -0
  3. data/Rakefile +83 -0
  4. data/TODO.textile +27 -0
  5. data/generators/clearance/USAGE +1 -0
  6. data/generators/clearance/clearance_generator.rb +84 -0
  7. data/generators/clearance/templates/app/controllers/application.rb +5 -0
  8. data/generators/clearance/templates/app/controllers/confirmations_controller.rb +3 -0
  9. data/generators/clearance/templates/app/controllers/passwords_controller.rb +3 -0
  10. data/generators/clearance/templates/app/controllers/sessions_controller.rb +8 -0
  11. data/generators/clearance/templates/app/controllers/users_controller.rb +3 -0
  12. data/generators/clearance/templates/app/models/clearance_mailer.rb +4 -0
  13. data/generators/clearance/templates/app/models/user.rb +3 -0
  14. data/generators/clearance/templates/app/views/clearance_mailer/confirmation.html.erb +1 -0
  15. data/generators/clearance/templates/app/views/clearance_mailer/facebook_welcome.text.html.haml +4 -0
  16. data/generators/clearance/templates/app/views/clearance_mailer/forgot_password.html.erb +6 -0
  17. data/generators/clearance/templates/app/views/passwords/edit.html.erb +18 -0
  18. data/generators/clearance/templates/app/views/passwords/new.html.erb +15 -0
  19. data/generators/clearance/templates/app/views/sessions/new.html.erb +29 -0
  20. data/generators/clearance/templates/app/views/users/_form.html.erb +13 -0
  21. data/generators/clearance/templates/app/views/users/_password_form.html.erb +13 -0
  22. data/generators/clearance/templates/app/views/users/edit_password.html.erb +4 -0
  23. data/generators/clearance/templates/app/views/users/new.html.erb +6 -0
  24. data/generators/clearance/templates/config/initializers/action_mailer.rb +1 -0
  25. data/generators/clearance/templates/public/images/connect_light_medium_long.gif +0 -0
  26. data/generators/clearance/templates/test/factories.rb +9 -0
  27. data/generators/clearance/templates/test/functional/confirmations_controller_test.rb +5 -0
  28. data/generators/clearance/templates/test/functional/passwords_controller_test.rb +5 -0
  29. data/generators/clearance/templates/test/functional/sessions_controller_test.rb +5 -0
  30. data/generators/clearance/templates/test/functional/users_controller_test.rb +5 -0
  31. data/generators/clearance/templates/test/unit/clearance_mailer_test.rb +6 -0
  32. data/generators/clearance/templates/test/unit/user_test.rb +5 -0
  33. data/lib/clearance/app/controllers/application_controller.rb +88 -0
  34. data/lib/clearance/app/controllers/confirmations_controller.rb +36 -0
  35. data/lib/clearance/app/controllers/facebook_sessions_controller.rb +59 -0
  36. data/lib/clearance/app/controllers/passwords_controller.rb +58 -0
  37. data/lib/clearance/app/controllers/sessions_controller.rb +83 -0
  38. data/lib/clearance/app/controllers/users_controller.rb +74 -0
  39. data/lib/clearance/app/models/clearance_facebook_mailer.rb +20 -0
  40. data/lib/clearance/app/models/clearance_mailer.rb +33 -0
  41. data/lib/clearance/app/models/user.rb +125 -0
  42. data/lib/clearance/spec/controllers/sessions_controller_spec.rb +105 -0
  43. data/lib/clearance/spec/models/user_spec.rb +33 -0
  44. data/lib/clearance/test/functional/confirmations_controller_test.rb +50 -0
  45. data/lib/clearance/test/functional/passwords_controller_test.rb +224 -0
  46. data/lib/clearance/test/functional/sessions_controller_test.rb +148 -0
  47. data/lib/clearance/test/functional/users_controller_test.rb +203 -0
  48. data/lib/clearance/test/test_helper.rb +94 -0
  49. data/lib/clearance/test/unit/clearance_mailer_test.rb +65 -0
  50. data/lib/clearance/test/unit/user_test.rb +335 -0
  51. data/lib/clearance/version.rb +7 -0
  52. data/lib/clearance.rb +19 -0
  53. data/test/rails_root/Capfile +3 -0
  54. data/test/rails_root/Rakefile +10 -0
  55. data/test/rails_root/app/controllers/application.rb +5 -0
  56. data/test/rails_root/app/controllers/confirmations_controller.rb +3 -0
  57. data/test/rails_root/app/controllers/passwords_controller.rb +3 -0
  58. data/test/rails_root/app/controllers/sessions_controller.rb +8 -0
  59. data/test/rails_root/app/controllers/users_controller.rb +3 -0
  60. data/test/rails_root/app/helpers/application_helper.rb +5 -0
  61. data/test/rails_root/app/helpers/confirmations_helper.rb +2 -0
  62. data/test/rails_root/app/helpers/passwords_helper.rb +2 -0
  63. data/test/rails_root/app/models/clearance_mailer.rb +4 -0
  64. data/test/rails_root/app/models/user.rb +3 -0
  65. data/test/rails_root/app/views/clearance_mailer/confirmation.html.erb +1 -0
  66. data/test/rails_root/app/views/clearance_mailer/facebook_welcome.text.html.haml +4 -0
  67. data/test/rails_root/app/views/clearance_mailer/forgot_password.html.erb +6 -0
  68. data/test/rails_root/app/views/layouts/_flashes.erb +5 -0
  69. data/test/rails_root/app/views/layouts/application.html.erb +14 -0
  70. data/test/rails_root/app/views/passwords/edit.html.erb +18 -0
  71. data/test/rails_root/app/views/passwords/new.html.erb +15 -0
  72. data/test/rails_root/app/views/sessions/new.html.erb +29 -0
  73. data/test/rails_root/app/views/users/_form.html.erb +13 -0
  74. data/test/rails_root/app/views/users/_password_form.html.erb +13 -0
  75. data/test/rails_root/app/views/users/edit_password.html.erb +4 -0
  76. data/test/rails_root/app/views/users/new.html.erb +6 -0
  77. data/test/rails_root/config/boot.rb +109 -0
  78. data/test/rails_root/config/database.yml +13 -0
  79. data/test/rails_root/config/environment.rb +19 -0
  80. data/test/rails_root/config/environments/development.rb +19 -0
  81. data/test/rails_root/config/environments/test.rb +23 -0
  82. data/test/rails_root/config/facebooker.yml +13 -0
  83. data/test/rails_root/config/initializers/action_mailer.rb +1 -0
  84. data/test/rails_root/config/initializers/clearance.rb +8 -0
  85. data/test/rails_root/config/initializers/inflections.rb +10 -0
  86. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  87. data/test/rails_root/config/initializers/requires.rb +13 -0
  88. data/test/rails_root/config/initializers/time_formats.rb +4 -0
  89. data/test/rails_root/config/routes.rb +12 -0
  90. data/test/rails_root/db/migrate/001_create_users.rb +25 -0
  91. data/test/rails_root/doc/README_FOR_APP +2 -0
  92. data/test/rails_root/doc/README_FOR_TEMPLATE +15 -0
  93. data/test/rails_root/lib/tasks/bootstrap.rake +16 -0
  94. data/test/rails_root/lib/tasks/capistrano.rake +96 -0
  95. data/test/rails_root/lib/tasks/git_tasks.rake +129 -0
  96. data/test/rails_root/lib/tasks/rspec.rake +132 -0
  97. data/test/rails_root/public/404.html +30 -0
  98. data/test/rails_root/public/422.html +30 -0
  99. data/test/rails_root/public/500.html +30 -0
  100. data/test/rails_root/public/dispatch.rb +10 -0
  101. data/test/rails_root/public/favicon.ico +0 -0
  102. data/test/rails_root/public/images/connect_light_medium_long.gif +0 -0
  103. data/test/rails_root/public/images/rails.png +0 -0
  104. data/test/rails_root/public/javascripts/application.js +2 -0
  105. data/test/rails_root/public/javascripts/builder.js +136 -0
  106. data/test/rails_root/public/javascripts/controls.js +963 -0
  107. data/test/rails_root/public/javascripts/dragdrop.js +972 -0
  108. data/test/rails_root/public/javascripts/effects.js +1120 -0
  109. data/test/rails_root/public/javascripts/facebooker.js +106 -0
  110. data/test/rails_root/public/javascripts/prototype.js +4225 -0
  111. data/test/rails_root/public/javascripts/scriptaculous.js +58 -0
  112. data/test/rails_root/public/javascripts/slider.js +277 -0
  113. data/test/rails_root/public/javascripts/sound.js +60 -0
  114. data/test/rails_root/public/robots.txt +1 -0
  115. data/test/rails_root/script/about +3 -0
  116. data/test/rails_root/script/autospec +5 -0
  117. data/test/rails_root/script/breakpointer +3 -0
  118. data/test/rails_root/script/console +3 -0
  119. data/test/rails_root/script/create_project.rb +52 -0
  120. data/test/rails_root/script/dbconsole +3 -0
  121. data/test/rails_root/script/destroy +3 -0
  122. data/test/rails_root/script/generate +3 -0
  123. data/test/rails_root/script/performance/benchmarker +3 -0
  124. data/test/rails_root/script/performance/profiler +3 -0
  125. data/test/rails_root/script/performance/request +3 -0
  126. data/test/rails_root/script/plugin +3 -0
  127. data/test/rails_root/script/process/inspector +3 -0
  128. data/test/rails_root/script/process/reaper +3 -0
  129. data/test/rails_root/script/process/spawner +3 -0
  130. data/test/rails_root/script/runner +3 -0
  131. data/test/rails_root/script/server +3 -0
  132. data/test/rails_root/script/spec +5 -0
  133. data/test/rails_root/script/spec_server +116 -0
  134. data/test/rails_root/spec/controllers/session_controller_spec.rb +5 -0
  135. data/test/rails_root/spec/models/user_spec.rb +5 -0
  136. data/test/rails_root/spec/rcov.opts +2 -0
  137. data/test/rails_root/spec/spec.opts +4 -0
  138. data/test/rails_root/spec/spec_helper.rb +51 -0
  139. data/test/rails_root/test/factories.rb +9 -0
  140. data/test/rails_root/test/functional/confirmations_controller_test.rb +5 -0
  141. data/test/rails_root/test/functional/passwords_controller_test.rb +5 -0
  142. data/test/rails_root/test/functional/sessions_controller_test.rb +5 -0
  143. data/test/rails_root/test/functional/users_controller_test.rb +5 -0
  144. data/test/rails_root/test/test_helper.rb +21 -0
  145. data/test/rails_root/test/unit/clearance_mailer_test.rb +6 -0
  146. data/test/rails_root/test/unit/user_test.rb +5 -0
  147. data/test/rails_root/vendor/gems/mocha-0.9.1/COPYING +3 -0
  148. data/test/rails_root/vendor/gems/mocha-0.9.1/MIT-LICENSE +7 -0
  149. data/test/rails_root/vendor/gems/mocha-0.9.1/README +35 -0
  150. data/test/rails_root/vendor/gems/mocha-0.9.1/RELEASE +246 -0
  151. data/test/rails_root/vendor/gems/mocha-0.9.1/Rakefile +188 -0
  152. data/test/rails_root/vendor/gems/mocha-0.9.1/examples/misc.rb +44 -0
  153. data/test/rails_root/vendor/gems/mocha-0.9.1/examples/mocha.rb +26 -0
  154. data/test/rails_root/vendor/gems/mocha-0.9.1/examples/stubba.rb +65 -0
  155. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/any_instance_method.rb +54 -0
  156. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/backtrace_filter.rb +17 -0
  157. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/cardinality.rb +95 -0
  158. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/central.rb +27 -0
  159. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/change_state_side_effect.rb +19 -0
  160. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/class_method.rb +86 -0
  161. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/configuration.rb +60 -0
  162. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/deprecation.rb +22 -0
  163. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/exception_raiser.rb +17 -0
  164. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/expectation.rb +445 -0
  165. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/expectation_error.rb +15 -0
  166. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/expectation_list.rb +50 -0
  167. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/in_state_ordering_constraint.rb +19 -0
  168. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/inspect.rb +39 -0
  169. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/instance_method.rb +16 -0
  170. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/is_a.rb +9 -0
  171. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/logger.rb +15 -0
  172. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/metaclass.rb +7 -0
  173. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/method_matcher.rb +21 -0
  174. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/mock.rb +196 -0
  175. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/mockery.rb +181 -0
  176. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/module_method.rb +16 -0
  177. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/multiple_yields.rb +20 -0
  178. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/names.rb +53 -0
  179. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/no_yields.rb +11 -0
  180. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/object.rb +134 -0
  181. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/all_of.rb +42 -0
  182. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/any_of.rb +47 -0
  183. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
  184. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/anything.rb +33 -0
  185. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/base.rb +15 -0
  186. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/equals.rb +42 -0
  187. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_entries.rb +45 -0
  188. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_entry.rb +56 -0
  189. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_key.rb +42 -0
  190. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/has_value.rb +42 -0
  191. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/includes.rb +40 -0
  192. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/instance_of.rb +42 -0
  193. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/is_a.rb +42 -0
  194. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/kind_of.rb +42 -0
  195. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/not.rb +42 -0
  196. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/object.rb +9 -0
  197. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/optionally.rb +55 -0
  198. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/regexp_matches.rb +43 -0
  199. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  200. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  201. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameter_matchers.rb +26 -0
  202. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/parameters_matcher.rb +37 -0
  203. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/pretty_parameters.rb +28 -0
  204. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/return_values.rb +31 -0
  205. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/sequence.rb +42 -0
  206. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/single_return_value.rb +17 -0
  207. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/single_yield.rb +18 -0
  208. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/standalone.rb +166 -0
  209. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/state_machine.rb +91 -0
  210. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/stubbing_error.rb +16 -0
  211. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/test_case_adapter.rb +103 -0
  212. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/unexpected_invocation.rb +18 -0
  213. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha/yield_parameters.rb +31 -0
  214. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha.rb +20 -0
  215. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/mocha_standalone.rb +2 -0
  216. data/test/rails_root/vendor/gems/mocha-0.9.1/lib/stubba.rb +4 -0
  217. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/acceptance_test_helper.rb +38 -0
  218. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/bug_18914_test.rb +43 -0
  219. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/bug_21465_test.rb +34 -0
  220. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/bug_21563_test.rb +25 -0
  221. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/expected_invocation_count_test.rb +196 -0
  222. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/failure_messages_test.rb +64 -0
  223. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mocha_example_test.rb +98 -0
  224. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mocha_test_result_test.rb +84 -0
  225. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mock_test.rb +100 -0
  226. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mock_with_initializer_block_test.rb +51 -0
  227. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
  228. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/optional_parameters_test.rb +70 -0
  229. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/parameter_matcher_test.rb +179 -0
  230. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/partial_mocks_test.rb +47 -0
  231. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/return_value_test.rb +52 -0
  232. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/sequence_test.rb +186 -0
  233. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/standalone_test.rb +139 -0
  234. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/states_test.rb +70 -0
  235. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_any_instance_method_test.rb +195 -0
  236. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_class_method_test.rb +203 -0
  237. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_everything_test.rb +56 -0
  238. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_instance_method_test.rb +165 -0
  239. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_module_method_test.rb +163 -0
  240. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stub_test.rb +52 -0
  241. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubba_example_test.rb +102 -0
  242. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubba_test.rb +15 -0
  243. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubba_test_result_test.rb +66 -0
  244. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
  245. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
  246. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
  247. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_existent_class_method_test.rb +155 -0
  248. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_existent_instance_method_test.rb +145 -0
  249. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
  250. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_public_class_method_test.rb +161 -0
  251. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_non_public_instance_method_test.rb +141 -0
  252. data/test/rails_root/vendor/gems/mocha-0.9.1/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
  253. data/test/rails_root/vendor/gems/mocha-0.9.1/test/active_record_test_case.rb +36 -0
  254. data/test/rails_root/vendor/gems/mocha-0.9.1/test/deprecation_disabler.rb +15 -0
  255. data/test/rails_root/vendor/gems/mocha-0.9.1/test/execution_point.rb +36 -0
  256. data/test/rails_root/vendor/gems/mocha-0.9.1/test/method_definer.rb +18 -0
  257. data/test/rails_root/vendor/gems/mocha-0.9.1/test/simple_counter.rb +13 -0
  258. data/test/rails_root/vendor/gems/mocha-0.9.1/test/test_helper.rb +11 -0
  259. data/test/rails_root/vendor/gems/mocha-0.9.1/test/test_runner.rb +33 -0
  260. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/any_instance_method_test.rb +126 -0
  261. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/array_inspect_test.rb +16 -0
  262. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/backtrace_filter_test.rb +19 -0
  263. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/cardinality_test.rb +56 -0
  264. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/central_test.rb +65 -0
  265. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/change_state_side_effect_test.rb +41 -0
  266. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/class_method_test.rb +237 -0
  267. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/date_time_inspect_test.rb +21 -0
  268. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/exception_raiser_test.rb +42 -0
  269. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/expectation_list_test.rb +57 -0
  270. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/expectation_test.rb +459 -0
  271. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/hash_inspect_test.rb +16 -0
  272. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/in_state_ordering_constraint_test.rb +43 -0
  273. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/metaclass_test.rb +22 -0
  274. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/method_matcher_test.rb +23 -0
  275. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/mock_test.rb +290 -0
  276. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/mockery_test.rb +149 -0
  277. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/multiple_yields_test.rb +18 -0
  278. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/no_yields_test.rb +18 -0
  279. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/object_inspect_test.rb +37 -0
  280. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/object_test.rb +82 -0
  281. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/all_of_test.rb +26 -0
  282. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/any_of_test.rb +26 -0
  283. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/anything_test.rb +21 -0
  284. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/equals_test.rb +25 -0
  285. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_entries_test.rb +51 -0
  286. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_entry_test.rb +62 -0
  287. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_key_test.rb +36 -0
  288. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/has_value_test.rb +37 -0
  289. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/includes_test.rb +25 -0
  290. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  291. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/is_a_test.rb +25 -0
  292. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  293. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/not_test.rb +26 -0
  294. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/regexp_matches_test.rb +25 -0
  295. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/responds_with_test.rb +25 -0
  296. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/stub_matcher.rb +27 -0
  297. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
  298. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/parameters_matcher_test.rb +121 -0
  299. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/return_values_test.rb +63 -0
  300. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/sequence_test.rb +104 -0
  301. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/single_return_value_test.rb +14 -0
  302. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/single_yield_test.rb +18 -0
  303. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/state_machine_test.rb +98 -0
  304. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/string_inspect_test.rb +11 -0
  305. data/test/rails_root/vendor/gems/mocha-0.9.1/test/unit/yield_parameters_test.rb +93 -0
  306. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/CONTRIBUTION_GUIDELINES.rdoc +12 -0
  307. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/MIT-LICENSE +22 -0
  308. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/README.rdoc +132 -0
  309. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/Rakefile +72 -0
  310. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/bin/convert_to_should_syntax +42 -0
  311. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/action_mailer/assertions.rb +39 -0
  312. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/action_mailer.rb +10 -0
  313. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/active_record/assertions.rb +85 -0
  314. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/active_record/macros.rb +715 -0
  315. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/active_record.rb +12 -0
  316. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/assertions.rb +45 -0
  317. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/context.rb +306 -0
  318. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/formats/html.rb +201 -0
  319. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/formats/xml.rb +170 -0
  320. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/helpers.rb +64 -0
  321. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/macros.rb +316 -0
  322. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller/resource_options.rb +236 -0
  323. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/controller.rb +30 -0
  324. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/helpers.rb +10 -0
  325. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/macros.rb +74 -0
  326. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/private_helpers.rb +22 -0
  327. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/proc_extensions.rb +14 -0
  328. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/rails.rb +19 -0
  329. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/tasks/list_tests.rake +24 -0
  330. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/tasks/yaml_to_shoulda.rake +28 -0
  331. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda/tasks.rb +3 -0
  332. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/lib/shoulda.rb +17 -0
  333. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/rails/init.rb +1 -0
  334. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/README +36 -0
  335. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fail_macros.rb +34 -0
  336. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/addresses.yml +3 -0
  337. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/friendships.yml +0 -0
  338. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/posts.yml +5 -0
  339. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/products.yml +0 -0
  340. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/taggings.yml +0 -0
  341. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/tags.yml +9 -0
  342. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/fixtures/users.yml +6 -0
  343. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/functional/posts_controller_test.rb +104 -0
  344. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/functional/users_controller_test.rb +38 -0
  345. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/context_test.rb +145 -0
  346. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/convert_to_should_syntax_test.rb +63 -0
  347. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/helpers_test.rb +183 -0
  348. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/private_helpers_test.rb +34 -0
  349. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/other/should_test.rb +266 -0
  350. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/controllers/application.rb +25 -0
  351. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/controllers/posts_controller.rb +85 -0
  352. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/controllers/users_controller.rb +84 -0
  353. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/helpers/application_helper.rb +3 -0
  354. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/helpers/posts_helper.rb +2 -0
  355. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/helpers/users_helper.rb +2 -0
  356. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/address.rb +7 -0
  357. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/dog.rb +5 -0
  358. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/flea.rb +3 -0
  359. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/friendship.rb +4 -0
  360. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/post.rb +12 -0
  361. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/product.rb +12 -0
  362. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/tag.rb +8 -0
  363. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/tagging.rb +4 -0
  364. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/models/user.rb +28 -0
  365. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/layouts/posts.rhtml +17 -0
  366. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/layouts/users.rhtml +17 -0
  367. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/layouts/wide.html.erb +1 -0
  368. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/edit.rhtml +27 -0
  369. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/index.rhtml +25 -0
  370. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/new.rhtml +26 -0
  371. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/posts/show.rhtml +18 -0
  372. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/edit.rhtml +22 -0
  373. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/index.rhtml +22 -0
  374. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/new.rhtml +21 -0
  375. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/app/views/users/show.rhtml +13 -0
  376. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/boot.rb +109 -0
  377. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/database.yml +4 -0
  378. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/environment.rb +14 -0
  379. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/environments/sqlite3.rb +0 -0
  380. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/initializers/new_rails_defaults.rb +15 -0
  381. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/initializers/shoulda.rb +8 -0
  382. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/config/routes.rb +6 -0
  383. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/001_create_users.rb +18 -0
  384. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/002_create_posts.rb +13 -0
  385. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/003_create_taggings.rb +12 -0
  386. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/004_create_tags.rb +11 -0
  387. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/005_create_dogs.rb +12 -0
  388. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/006_create_addresses.rb +14 -0
  389. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/007_create_fleas.rb +11 -0
  390. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  391. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/009_create_products.rb +17 -0
  392. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/migrate/010_create_friendships.rb +14 -0
  393. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/db/schema.rb +0 -0
  394. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/log/sqlite3.log +1 -0
  395. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/public/404.html +30 -0
  396. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/public/422.html +30 -0
  397. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/public/500.html +30 -0
  398. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/script/console +3 -0
  399. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/rails_root/script/generate +3 -0
  400. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/test_helper.rb +33 -0
  401. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/address_test.rb +10 -0
  402. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/dog_test.rb +7 -0
  403. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/flea_test.rb +6 -0
  404. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/friendship_test.rb +6 -0
  405. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/post_test.rb +15 -0
  406. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/product_test.rb +27 -0
  407. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/tag_test.rb +14 -0
  408. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/tagging_test.rb +6 -0
  409. data/test/rails_root/vendor/gems/thoughtbot-shoulda-2.0.4/test/unit/user_test.rb +52 -0
  410. data/test/rails_root/vendor/plugins/facebooker/CHANGELOG.txt +0 -0
  411. data/test/rails_root/vendor/plugins/facebooker/COPYING +19 -0
  412. data/test/rails_root/vendor/plugins/facebooker/History.txt +16 -0
  413. data/test/rails_root/vendor/plugins/facebooker/Manifest.txt +110 -0
  414. data/test/rails_root/vendor/plugins/facebooker/README +46 -0
  415. data/test/rails_root/vendor/plugins/facebooker/README.txt +81 -0
  416. data/test/rails_root/vendor/plugins/facebooker/Rakefile +62 -0
  417. data/test/rails_root/vendor/plugins/facebooker/TODO.txt +10 -0
  418. data/test/rails_root/vendor/plugins/facebooker/examples/desktop_login.rb +14 -0
  419. data/test/rails_root/vendor/plugins/facebooker/facebooker.gemspec +34 -0
  420. data/test/rails_root/vendor/plugins/facebooker/generators/facebook/facebook_generator.rb +14 -0
  421. data/test/rails_root/vendor/plugins/facebooker/generators/facebook/templates/config/facebooker.yml +41 -0
  422. data/test/rails_root/vendor/plugins/facebooker/generators/facebook/templates/public/javascripts/facebooker.js +106 -0
  423. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_controller/USAGE +33 -0
  424. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_controller/facebook_controller_generator.rb +40 -0
  425. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_controller/templates/controller.rb +7 -0
  426. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_controller/templates/functional_test.rb +11 -0
  427. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_controller/templates/helper.rb +2 -0
  428. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_controller/templates/view.fbml.erb +2 -0
  429. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_controller/templates/view.html.erb +2 -0
  430. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_publisher/facebook_publisher_generator.rb +14 -0
  431. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_publisher/templates/create_facebook_templates.rb +15 -0
  432. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_publisher/templates/publisher.rb +3 -0
  433. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/USAGE +27 -0
  434. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/facebook_scaffold_generator.rb +118 -0
  435. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/controller.rb +93 -0
  436. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/facebook_style.css +2579 -0
  437. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/functional_test.rb +89 -0
  438. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/helper.rb +2 -0
  439. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/layout.fbml.erb +6 -0
  440. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/layout.html.erb +17 -0
  441. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/style.css +74 -0
  442. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_edit.fbml.erb +13 -0
  443. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_edit.html.erb +18 -0
  444. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_index.fbml.erb +24 -0
  445. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_index.html.erb +24 -0
  446. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_new.fbml.erb +12 -0
  447. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_new.html.erb +17 -0
  448. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_show.fbml.erb +10 -0
  449. data/test/rails_root/vendor/plugins/facebooker/generators/facebook_scaffold/templates/view_show.html.erb +10 -0
  450. data/test/rails_root/vendor/plugins/facebooker/generators/publisher/publisher_generator.rb +14 -0
  451. data/test/rails_root/vendor/plugins/facebooker/generators/receiver/receiver_generator.rb +9 -0
  452. data/test/rails_root/vendor/plugins/facebooker/generators/receiver/templates/xd_receiver.html +10 -0
  453. data/test/rails_root/vendor/plugins/facebooker/init.rb +54 -0
  454. data/test/rails_root/vendor/plugins/facebooker/install.rb +12 -0
  455. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/adapters/adapter_base.rb +87 -0
  456. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/adapters/bebo_adapter.rb +73 -0
  457. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/adapters/facebook_adapter.rb +48 -0
  458. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/admin.rb +28 -0
  459. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/batch_request.rb +44 -0
  460. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/data.rb +57 -0
  461. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/feed.rb +78 -0
  462. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/logging.rb +41 -0
  463. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/model.rb +123 -0
  464. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/affiliation.rb +10 -0
  465. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/album.rb +11 -0
  466. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/applicationproperties.rb +39 -0
  467. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/cookie.rb +10 -0
  468. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/education_info.rb +11 -0
  469. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/event.rb +26 -0
  470. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/friend_list.rb +14 -0
  471. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/group.rb +35 -0
  472. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/info_item.rb +10 -0
  473. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/info_section.rb +10 -0
  474. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/location.rb +8 -0
  475. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/notifications.rb +17 -0
  476. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/page.rb +27 -0
  477. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/photo.rb +10 -0
  478. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/tag.rb +12 -0
  479. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/user.rb +352 -0
  480. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/models/work_info.rb +9 -0
  481. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/parser.rb +540 -0
  482. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/controller.rb +246 -0
  483. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/facebook_asset_path.rb +18 -0
  484. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/facebook_form_builder.rb +112 -0
  485. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/facebook_pretty_errors.rb +14 -0
  486. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/facebook_request_fix.rb +24 -0
  487. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/facebook_session_handling.rb +58 -0
  488. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/facebook_url_helper.rb +191 -0
  489. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/facebook_url_rewriting.rb +39 -0
  490. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/helpers.rb +615 -0
  491. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
  492. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/publisher.rb +475 -0
  493. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/routing.rb +49 -0
  494. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/test_helpers.rb +88 -0
  495. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/rails/utilities.rb +22 -0
  496. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/server_cache.rb +24 -0
  497. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/service.rb +31 -0
  498. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/session.rb +564 -0
  499. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker/version.rb +9 -0
  500. data/test/rails_root/vendor/plugins/facebooker/lib/facebooker.rb +143 -0
  501. data/test/rails_root/vendor/plugins/facebooker/lib/net/http_multipart_post.rb +123 -0
  502. data/test/rails_root/vendor/plugins/facebooker/lib/tasks/facebooker.rake +18 -0
  503. data/test/rails_root/vendor/plugins/facebooker/lib/tasks/tunnel.rake +46 -0
  504. data/test/rails_root/vendor/plugins/facebooker/rails/init.rb +1 -0
  505. data/test/rails_root/vendor/plugins/facebooker/setup.rb +1585 -0
  506. data/test/rails_root/vendor/plugins/facebooker/templates/layout.erb +24 -0
  507. data/test/rails_root/vendor/plugins/facebooker/test/adapters_test.rb +98 -0
  508. data/test/rails_root/vendor/plugins/facebooker/test/batch_request_test.rb +82 -0
  509. data/test/rails_root/vendor/plugins/facebooker/test/event_test.rb +15 -0
  510. data/test/rails_root/vendor/plugins/facebooker/test/facebook_admin_test.rb +75 -0
  511. data/test/rails_root/vendor/plugins/facebooker/test/facebook_cache_test.rb +43 -0
  512. data/test/rails_root/vendor/plugins/facebooker/test/facebook_data_test.rb +84 -0
  513. data/test/rails_root/vendor/plugins/facebooker/test/facebooker_test.rb +855 -0
  514. data/test/rails_root/vendor/plugins/facebooker/test/fixtures/multipart_post_body_with_only_parameters.txt +33 -0
  515. data/test/rails_root/vendor/plugins/facebooker/test/fixtures/multipart_post_body_with_single_file.txt +38 -0
  516. data/test/rails_root/vendor/plugins/facebooker/test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt +38 -0
  517. data/test/rails_root/vendor/plugins/facebooker/test/http_multipart_post_test.rb +54 -0
  518. data/test/rails_root/vendor/plugins/facebooker/test/logging_test.rb +36 -0
  519. data/test/rails_root/vendor/plugins/facebooker/test/model_test.rb +91 -0
  520. data/test/rails_root/vendor/plugins/facebooker/test/publisher_test.rb +436 -0
  521. data/test/rails_root/vendor/plugins/facebooker/test/rails_integration_test.rb +1125 -0
  522. data/test/rails_root/vendor/plugins/facebooker/test/session_test.rb +587 -0
  523. data/test/rails_root/vendor/plugins/facebooker/test/test_helper.rb +60 -0
  524. data/test/rails_root/vendor/plugins/facebooker/test/user_test.rb +229 -0
  525. metadata +771 -0
@@ -0,0 +1,715 @@
1
+ module ThoughtBot # :nodoc:
2
+ module Shoulda # :nodoc:
3
+ module ActiveRecord # :nodoc:
4
+ module MacroHelpers # :nodoc:
5
+ # Helper method that determines the default error message used by Active
6
+ # Record. Works for both existing Rails 2.1 and Rails 2.2 with the newly
7
+ # introduced I18n module used for localization.
8
+ #
9
+ # default_error_message(:blank)
10
+ # default_error_message(:too_short, :count => 5)
11
+ # default_error_message(:too_long, :count => 60)
12
+ def default_error_message(key, values = {})
13
+ if Object.const_defined?(:I18n) # Rails >= 2.2
14
+ I18n.translate("activerecord.errors.messages.#{key}", values)
15
+ else # Rails <= 2.1.x
16
+ ::ActiveRecord::Errors.default_error_messages[key] % values[:count]
17
+ end
18
+ end
19
+ end
20
+
21
+ # = Macro test helpers for your active record models
22
+ #
23
+ # These helpers will test most of the validations and associations for your ActiveRecord models.
24
+ #
25
+ # class UserTest < Test::Unit::TestCase
26
+ # should_require_attributes :name, :phone_number
27
+ # should_not_allow_values_for :phone_number, "abcd", "1234"
28
+ # should_allow_values_for :phone_number, "(123) 456-7890"
29
+ #
30
+ # should_protect_attributes :password
31
+ #
32
+ # should_have_one :profile
33
+ # should_have_many :dogs
34
+ # should_have_many :messes, :through => :dogs
35
+ # should_belong_to :lover
36
+ # end
37
+ #
38
+ # For all of these helpers, the last parameter may be a hash of options.
39
+ #
40
+ module Macros
41
+ include MacroHelpers
42
+
43
+ # <b>DEPRECATED:</b> Use <tt>fixtures :all</tt> instead
44
+ #
45
+ # Loads all fixture files (<tt>test/fixtures/*.yml</tt>)
46
+ def load_all_fixtures
47
+ warn "[DEPRECATION] load_all_fixtures is deprecated. Use `fixtures :all` instead."
48
+ fixtures :all
49
+ end
50
+
51
+ # Ensures that the model cannot be saved if one of the attributes listed is not present.
52
+ #
53
+ # If an instance variable has been created in the setup named after the
54
+ # model being tested, then this method will use that. Otherwise, it will
55
+ # create a new instance to test against.
56
+ #
57
+ # Options:
58
+ # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
59
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.blank')</tt>
60
+ #
61
+ # Example:
62
+ # should_require_attributes :name, :phone_number
63
+ #
64
+ def should_require_attributes(*attributes)
65
+ message = get_options!(attributes, :message)
66
+ message ||= default_error_message(:blank)
67
+ klass = model_class
68
+
69
+ attributes.each do |attribute|
70
+ should "require #{attribute} to be set" do
71
+ assert_bad_value(klass, attribute, nil, message)
72
+ end
73
+ end
74
+ end
75
+
76
+ # Ensures that the model cannot be saved if one of the attributes listed is not unique.
77
+ # Requires an existing record
78
+ #
79
+ # Options:
80
+ # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
81
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.taken')</tt>
82
+ # * <tt>:scoped_to</tt> - field(s) to scope the uniqueness to.
83
+ #
84
+ # Examples:
85
+ # should_require_unique_attributes :keyword, :username
86
+ # should_require_unique_attributes :name, :message => "O NOES! SOMEONE STOELED YER NAME!"
87
+ # should_require_unique_attributes :email, :scoped_to => :name
88
+ # should_require_unique_attributes :address, :scoped_to => [:first_name, :last_name]
89
+ #
90
+ def should_require_unique_attributes(*attributes)
91
+ message, scope = get_options!(attributes, :message, :scoped_to)
92
+ scope = [*scope].compact
93
+ message ||= default_error_message(:taken)
94
+
95
+ klass = model_class
96
+ attributes.each do |attribute|
97
+ attribute = attribute.to_sym
98
+ should "require unique value for #{attribute}#{" scoped to #{scope.join(', ')}" unless scope.blank?}" do
99
+ assert existing = klass.find(:first), "Can't find first #{klass}"
100
+ object = klass.new
101
+ existing_value = existing.send(attribute)
102
+
103
+ if !scope.blank?
104
+ scope.each do |s|
105
+ assert_respond_to object, :"#{s}=", "#{klass.name} doesn't seem to have a #{s} attribute."
106
+ object.send("#{s}=", existing.send(s))
107
+ end
108
+ end
109
+ assert_bad_value(object, attribute, existing_value, message)
110
+
111
+ # Now test that the object is valid when changing the scoped attribute
112
+ # TODO: There is a chance that we could change the scoped field
113
+ # to a value that's already taken. An alternative implementation
114
+ # could actually find all values for scope and create a unique
115
+ # one.
116
+ if !scope.blank?
117
+ scope.each do |s|
118
+ # Assume the scope is a foreign key if the field is nil
119
+ object.send("#{s}=", existing.send(s).nil? ? 1 : existing.send(s).next)
120
+ assert_good_value(object, attribute, existing_value, message)
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ # Ensures that the attribute cannot be set on mass update.
128
+ #
129
+ # should_protect_attributes :password, :admin_flag
130
+ #
131
+ def should_protect_attributes(*attributes)
132
+ get_options!(attributes)
133
+ klass = model_class
134
+
135
+ attributes.each do |attribute|
136
+ attribute = attribute.to_sym
137
+ should "protect #{attribute} from mass updates" do
138
+ protected = klass.protected_attributes || []
139
+ accessible = klass.accessible_attributes || []
140
+
141
+ assert protected.include?(attribute.to_s) ||
142
+ (!accessible.empty? && !accessible.include?(attribute.to_s)),
143
+ (accessible.empty? ?
144
+ "#{klass} is protecting #{protected.to_a.to_sentence}, but not #{attribute}." :
145
+ "#{klass} has made #{attribute} accessible")
146
+ end
147
+ end
148
+ end
149
+
150
+ # Ensures that the attribute cannot be changed once the record has been created.
151
+ #
152
+ # should_have_readonly_attributes :password, :admin_flag
153
+ #
154
+ def should_have_readonly_attributes(*attributes)
155
+ get_options!(attributes)
156
+ klass = model_class
157
+
158
+ attributes.each do |attribute|
159
+ attribute = attribute.to_sym
160
+ should "make #{attribute} read-only" do
161
+ readonly = klass.readonly_attributes || []
162
+
163
+ assert readonly.include?(attribute.to_s),
164
+ (readonly.empty? ?
165
+ "#{klass} attribute #{attribute} is not read-only" :
166
+ "#{klass} is making #{readonly.to_a.to_sentence} read-only, but not #{attribute}.")
167
+ end
168
+ end
169
+ end
170
+
171
+ # Ensures that the attribute cannot be set to the given values
172
+ #
173
+ # If an instance variable has been created in the setup named after the
174
+ # model being tested, then this method will use that. Otherwise, it will
175
+ # create a new instance to test against.
176
+ #
177
+ # Options:
178
+ # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
179
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.invalid')</tt>
180
+ #
181
+ # Example:
182
+ # should_not_allow_values_for :isbn, "bad 1", "bad 2"
183
+ #
184
+ def should_not_allow_values_for(attribute, *bad_values)
185
+ message = get_options!(bad_values, :message)
186
+ message ||= default_error_message(:invalid)
187
+ klass = model_class
188
+ bad_values.each do |v|
189
+ should "not allow #{attribute} to be set to #{v.inspect}" do
190
+ assert_bad_value(klass, attribute, v, message)
191
+ end
192
+ end
193
+ end
194
+
195
+ # Ensures that the attribute can be set to the given values.
196
+ #
197
+ # If an instance variable has been created in the setup named after the
198
+ # model being tested, then this method will use that. Otherwise, it will
199
+ # create a new instance to test against.
200
+ #
201
+ # Example:
202
+ # should_allow_values_for :isbn, "isbn 1 2345 6789 0", "ISBN 1-2345-6789-0"
203
+ #
204
+ def should_allow_values_for(attribute, *good_values)
205
+ get_options!(good_values)
206
+ klass = model_class
207
+ good_values.each do |v|
208
+ should "allow #{attribute} to be set to #{v.inspect}" do
209
+ assert_good_value(klass, attribute, v)
210
+ end
211
+ end
212
+ end
213
+
214
+ # Ensures that the length of the attribute is in the given range
215
+ #
216
+ # If an instance variable has been created in the setup named after the
217
+ # model being tested, then this method will use that. Otherwise, it will
218
+ # create a new instance to test against.
219
+ #
220
+ # Options:
221
+ # * <tt>:short_message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
222
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.too_short') % range.first</tt>
223
+ # * <tt>:long_message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
224
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.too_long') % range.last</tt>
225
+ #
226
+ # Example:
227
+ # should_ensure_length_in_range :password, (6..20)
228
+ #
229
+ def should_ensure_length_in_range(attribute, range, opts = {})
230
+ short_message, long_message = get_options!([opts], :short_message, :long_message)
231
+ short_message ||= default_error_message(:too_short, :count => range.first)
232
+ long_message ||= default_error_message(:too_long, :count => range.last)
233
+
234
+ klass = model_class
235
+ min_length = range.first
236
+ max_length = range.last
237
+ same_length = (min_length == max_length)
238
+
239
+ if min_length > 0
240
+ should "not allow #{attribute} to be less than #{min_length} chars long" do
241
+ min_value = "x" * (min_length - 1)
242
+ assert_bad_value(klass, attribute, min_value, short_message)
243
+ end
244
+ end
245
+
246
+ if min_length > 0
247
+ should "allow #{attribute} to be exactly #{min_length} chars long" do
248
+ min_value = "x" * min_length
249
+ assert_good_value(klass, attribute, min_value, short_message)
250
+ end
251
+ end
252
+
253
+ should "not allow #{attribute} to be more than #{max_length} chars long" do
254
+ max_value = "x" * (max_length + 1)
255
+ assert_bad_value(klass, attribute, max_value, long_message)
256
+ end
257
+
258
+ unless same_length
259
+ should "allow #{attribute} to be exactly #{max_length} chars long" do
260
+ max_value = "x" * max_length
261
+ assert_good_value(klass, attribute, max_value, long_message)
262
+ end
263
+ end
264
+ end
265
+
266
+ # Ensures that the length of the attribute is at least a certain length
267
+ #
268
+ # If an instance variable has been created in the setup named after the
269
+ # model being tested, then this method will use that. Otherwise, it will
270
+ # create a new instance to test against.
271
+ #
272
+ # Options:
273
+ # * <tt>:short_message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
274
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.too_short') % min_length</tt>
275
+ #
276
+ # Example:
277
+ # should_ensure_length_at_least :name, 3
278
+ #
279
+ def should_ensure_length_at_least(attribute, min_length, opts = {})
280
+ short_message = get_options!([opts], :short_message)
281
+ short_message ||= default_error_message(:too_short, :count => min_length)
282
+
283
+ klass = model_class
284
+
285
+ if min_length > 0
286
+ min_value = "x" * (min_length - 1)
287
+ should "not allow #{attribute} to be less than #{min_length} chars long" do
288
+ assert_bad_value(klass, attribute, min_value, short_message)
289
+ end
290
+ end
291
+ should "allow #{attribute} to be at least #{min_length} chars long" do
292
+ valid_value = "x" * (min_length)
293
+ assert_good_value(klass, attribute, valid_value, short_message)
294
+ end
295
+ end
296
+
297
+ # Ensures that the length of the attribute is exactly a certain length
298
+ #
299
+ # If an instance variable has been created in the setup named after the
300
+ # model being tested, then this method will use that. Otherwise, it will
301
+ # create a new instance to test against.
302
+ #
303
+ # Options:
304
+ # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
305
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.wrong_length') % length</tt>
306
+ #
307
+ # Example:
308
+ # should_ensure_length_is :ssn, 9
309
+ #
310
+ def should_ensure_length_is(attribute, length, opts = {})
311
+ message = get_options!([opts], :message)
312
+ message ||= default_error_message(:wrong_length, :count => length)
313
+
314
+ klass = model_class
315
+
316
+ should "not allow #{attribute} to be less than #{length} chars long" do
317
+ min_value = "x" * (length - 1)
318
+ assert_bad_value(klass, attribute, min_value, message)
319
+ end
320
+
321
+ should "not allow #{attribute} to be greater than #{length} chars long" do
322
+ max_value = "x" * (length + 1)
323
+ assert_bad_value(klass, attribute, max_value, message)
324
+ end
325
+
326
+ should "allow #{attribute} to be #{length} chars long" do
327
+ valid_value = "x" * (length)
328
+ assert_good_value(klass, attribute, valid_value, message)
329
+ end
330
+ end
331
+
332
+ # Ensure that the attribute is in the range specified
333
+ #
334
+ # If an instance variable has been created in the setup named after the
335
+ # model being tested, then this method will use that. Otherwise, it will
336
+ # create a new instance to test against.
337
+ #
338
+ # Options:
339
+ # * <tt>:low_message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
340
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.inclusion')</tt>
341
+ # * <tt>:high_message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
342
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.inclusion')</tt>
343
+ #
344
+ # Example:
345
+ # should_ensure_value_in_range :age, (0..100)
346
+ #
347
+ def should_ensure_value_in_range(attribute, range, opts = {})
348
+ low_message, high_message = get_options!([opts], :low_message, :high_message)
349
+ low_message ||= default_error_message(:inclusion)
350
+ high_message ||= default_error_message(:inclusion)
351
+
352
+ klass = model_class
353
+ min = range.first
354
+ max = range.last
355
+
356
+ should "not allow #{attribute} to be less than #{min}" do
357
+ v = min - 1
358
+ assert_bad_value(klass, attribute, v, low_message)
359
+ end
360
+
361
+ should "allow #{attribute} to be #{min}" do
362
+ v = min
363
+ assert_good_value(klass, attribute, v, low_message)
364
+ end
365
+
366
+ should "not allow #{attribute} to be more than #{max}" do
367
+ v = max + 1
368
+ assert_bad_value(klass, attribute, v, high_message)
369
+ end
370
+
371
+ should "allow #{attribute} to be #{max}" do
372
+ v = max
373
+ assert_good_value(klass, attribute, v, high_message)
374
+ end
375
+ end
376
+
377
+ # Ensure that the attribute is numeric
378
+ #
379
+ # If an instance variable has been created in the setup named after the
380
+ # model being tested, then this method will use that. Otherwise, it will
381
+ # create a new instance to test against.
382
+ #
383
+ # Options:
384
+ # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
385
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.not_a_number')</tt>
386
+ #
387
+ # Example:
388
+ # should_only_allow_numeric_values_for :age
389
+ #
390
+ def should_only_allow_numeric_values_for(*attributes)
391
+ message = get_options!(attributes, :message)
392
+ message ||= default_error_message(:not_a_number)
393
+ klass = model_class
394
+ attributes.each do |attribute|
395
+ attribute = attribute.to_sym
396
+ should "only allow numeric values for #{attribute}" do
397
+ assert_bad_value(klass, attribute, "abcd", message)
398
+ end
399
+ end
400
+ end
401
+
402
+ # Ensures that the has_many relationship exists. Will also test that the
403
+ # associated table has the required columns. Works with polymorphic
404
+ # associations.
405
+ #
406
+ # Options:
407
+ # * <tt>:through</tt> - association name for <tt>has_many :through</tt>
408
+ # * <tt>:dependent</tt> - tests that the association makes use of the dependent option.
409
+ #
410
+ # Example:
411
+ # should_have_many :friends
412
+ # should_have_many :enemies, :through => :friends
413
+ # should_have_many :enemies, :dependent => :destroy
414
+ #
415
+ def should_have_many(*associations)
416
+ through, dependent = get_options!(associations, :through, :dependent)
417
+ klass = model_class
418
+ associations.each do |association|
419
+ name = "have many #{association}"
420
+ name += " through #{through}" if through
421
+ name += " dependent => #{dependent}" if dependent
422
+ should name do
423
+ reflection = klass.reflect_on_association(association)
424
+ assert reflection, "#{klass.name} does not have any relationship to #{association}"
425
+ assert_equal :has_many, reflection.macro
426
+
427
+ if through
428
+ through_reflection = klass.reflect_on_association(through)
429
+ assert through_reflection, "#{klass.name} does not have any relationship to #{through}"
430
+ assert_equal(through, reflection.options[:through])
431
+ end
432
+
433
+ if dependent
434
+ assert_equal dependent.to_s,
435
+ reflection.options[:dependent].to_s,
436
+ "#{association} should have #{dependent} dependency"
437
+ end
438
+
439
+ # Check for the existence of the foreign key on the other table
440
+ unless reflection.options[:through]
441
+ if reflection.options[:foreign_key]
442
+ fk = reflection.options[:foreign_key]
443
+ elsif reflection.options[:as]
444
+ fk = reflection.options[:as].to_s.foreign_key
445
+ else
446
+ fk = reflection.primary_key_name
447
+ end
448
+
449
+ associated_klass_name = (reflection.options[:class_name] || association.to_s.classify)
450
+ associated_klass = associated_klass_name.constantize
451
+
452
+ assert associated_klass.column_names.include?(fk.to_s),
453
+ "#{associated_klass.name} does not have a #{fk} foreign key."
454
+ end
455
+ end
456
+ end
457
+ end
458
+
459
+ # Ensure that the has_one relationship exists. Will also test that the
460
+ # associated table has the required columns. Works with polymorphic
461
+ # associations.
462
+ #
463
+ # Options:
464
+ # * <tt>:dependent</tt> - tests that the association makes use of the dependent option.
465
+ #
466
+ # Example:
467
+ # should_have_one :god # unless hindu
468
+ #
469
+ def should_have_one(*associations)
470
+ dependent = get_options!(associations, :dependent)
471
+ klass = model_class
472
+ associations.each do |association|
473
+ name = "have one #{association}"
474
+ name += " dependent => #{dependent}" if dependent
475
+ should name do
476
+ reflection = klass.reflect_on_association(association)
477
+ assert reflection, "#{klass.name} does not have any relationship to #{association}"
478
+ assert_equal :has_one, reflection.macro
479
+
480
+ associated_klass = (reflection.options[:class_name] || association.to_s.camelize).constantize
481
+
482
+ if reflection.options[:foreign_key]
483
+ fk = reflection.options[:foreign_key]
484
+ elsif reflection.options[:as]
485
+ fk = reflection.options[:as].to_s.foreign_key
486
+ fk_type = fk.gsub(/_id$/, '_type')
487
+ assert associated_klass.column_names.include?(fk_type),
488
+ "#{associated_klass.name} does not have a #{fk_type} column."
489
+ else
490
+ fk = klass.name.foreign_key
491
+ end
492
+ assert associated_klass.column_names.include?(fk.to_s),
493
+ "#{associated_klass.name} does not have a #{fk} foreign key."
494
+
495
+ if dependent
496
+ assert_equal dependent.to_s,
497
+ reflection.options[:dependent].to_s,
498
+ "#{association} should have #{dependent} dependency"
499
+ end
500
+ end
501
+ end
502
+ end
503
+
504
+ # Ensures that the has_and_belongs_to_many relationship exists, and that the join
505
+ # table is in place.
506
+ #
507
+ # should_have_and_belong_to_many :posts, :cars
508
+ #
509
+ def should_have_and_belong_to_many(*associations)
510
+ get_options!(associations)
511
+ klass = model_class
512
+
513
+ associations.each do |association|
514
+ should "should have and belong to many #{association}" do
515
+ reflection = klass.reflect_on_association(association)
516
+ assert reflection, "#{klass.name} does not have any relationship to #{association}"
517
+ assert_equal :has_and_belongs_to_many, reflection.macro
518
+ table = reflection.options[:join_table]
519
+ assert ::ActiveRecord::Base.connection.tables.include?(table), "table #{table} doesn't exist"
520
+ end
521
+ end
522
+ end
523
+
524
+ # Ensure that the belongs_to relationship exists.
525
+ #
526
+ # should_belong_to :parent
527
+ #
528
+ def should_belong_to(*associations)
529
+ get_options!(associations)
530
+ klass = model_class
531
+ associations.each do |association|
532
+ should "belong_to #{association}" do
533
+ reflection = klass.reflect_on_association(association)
534
+ assert reflection, "#{klass.name} does not have any relationship to #{association}"
535
+ assert_equal :belongs_to, reflection.macro
536
+
537
+ unless reflection.options[:polymorphic]
538
+ associated_klass = (reflection.options[:class_name] || association.to_s.camelize).constantize
539
+ fk = reflection.options[:foreign_key] || reflection.primary_key_name
540
+ assert klass.column_names.include?(fk.to_s), "#{klass.name} does not have a #{fk} foreign key."
541
+ end
542
+ end
543
+ end
544
+ end
545
+
546
+ # Ensure that the given class methods are defined on the model.
547
+ #
548
+ # should_have_class_methods :find, :destroy
549
+ #
550
+ def should_have_class_methods(*methods)
551
+ get_options!(methods)
552
+ klass = model_class
553
+ methods.each do |method|
554
+ should "respond to class method ##{method}" do
555
+ assert_respond_to klass, method, "#{klass.name} does not have class method #{method}"
556
+ end
557
+ end
558
+ end
559
+
560
+ # Ensure that the given instance methods are defined on the model.
561
+ #
562
+ # should_have_instance_methods :email, :name, :name=
563
+ #
564
+ def should_have_instance_methods(*methods)
565
+ get_options!(methods)
566
+ klass = model_class
567
+ methods.each do |method|
568
+ should "respond to instance method ##{method}" do
569
+ assert_respond_to klass.new, method, "#{klass.name} does not have instance method #{method}"
570
+ end
571
+ end
572
+ end
573
+
574
+ # Ensure that the given columns are defined on the models backing SQL table.
575
+ #
576
+ # should_have_db_columns :id, :email, :name, :created_at
577
+ #
578
+ def should_have_db_columns(*columns)
579
+ column_type = get_options!(columns, :type)
580
+ klass = model_class
581
+ columns.each do |name|
582
+ test_name = "have column #{name}"
583
+ test_name += " of type #{column_type}" if column_type
584
+ should test_name do
585
+ column = klass.columns.detect {|c| c.name == name.to_s }
586
+ assert column, "#{klass.name} does not have column #{name}"
587
+ end
588
+ end
589
+ end
590
+
591
+ # Ensure that the given column is defined on the models backing SQL table. The options are the same as
592
+ # the instance variables defined on the column definition: :precision, :limit, :default, :null,
593
+ # :primary, :type, :scale, and :sql_type.
594
+ #
595
+ # should_have_db_column :email, :type => "string", :default => nil, :precision => nil, :limit => 255,
596
+ # :null => true, :primary => false, :scale => nil, :sql_type => 'varchar(255)'
597
+ #
598
+ def should_have_db_column(name, opts = {})
599
+ klass = model_class
600
+ test_name = "have column named :#{name}"
601
+ test_name += " with options " + opts.inspect unless opts.empty?
602
+ should test_name do
603
+ column = klass.columns.detect {|c| c.name == name.to_s }
604
+ assert column, "#{klass.name} does not have column #{name}"
605
+ opts.each do |k, v|
606
+ assert_equal column.instance_variable_get("@#{k}").to_s, v.to_s, ":#{name} column on table for #{klass} does not match option :#{k}"
607
+ end
608
+ end
609
+ end
610
+
611
+ # Ensures that there are DB indices on the given columns or tuples of columns.
612
+ # Also aliased to should_have_index for readability
613
+ #
614
+ # should_have_indices :email, :name, [:commentable_type, :commentable_id]
615
+ # should_have_index :age
616
+ #
617
+ def should_have_indices(*columns)
618
+ table = model_class.table_name
619
+ indices = ::ActiveRecord::Base.connection.indexes(table).map(&:columns)
620
+
621
+ columns.each do |column|
622
+ should "have index on #{table} for #{column.inspect}" do
623
+ columns = [column].flatten.map(&:to_s)
624
+ assert_contains(indices, columns)
625
+ end
626
+ end
627
+ end
628
+
629
+ alias_method :should_have_index, :should_have_indices
630
+
631
+ # Ensures that the model cannot be saved if one of the attributes listed is not accepted.
632
+ #
633
+ # If an instance variable has been created in the setup named after the
634
+ # model being tested, then this method will use that. Otherwise, it will
635
+ # create a new instance to test against.
636
+ #
637
+ # Options:
638
+ # * <tt>:message</tt> - value the test expects to find in <tt>errors.on(:attribute)</tt>.
639
+ # Regexp or string. Default = <tt>I18n.translate('activerecord.errors.messages.accepted')</tt>
640
+ #
641
+ # Example:
642
+ # should_require_acceptance_of :eula
643
+ #
644
+ def should_require_acceptance_of(*attributes)
645
+ message = get_options!(attributes, :message)
646
+ message ||= default_error_message(:accepted)
647
+ klass = model_class
648
+
649
+ attributes.each do |attribute|
650
+ should "require #{attribute} to be accepted" do
651
+ assert_bad_value(klass, attribute, false, message)
652
+ end
653
+ end
654
+ end
655
+
656
+ # Ensures that the model has a method named scope_name that returns a NamedScope object with the
657
+ # proxy options set to the options you supply. scope_name can be either a symbol, or a method
658
+ # call which will be evaled against the model. The eval'd method call has access to all the same
659
+ # instance variables that a should statement would.
660
+ #
661
+ # Options: Any of the options that the named scope would pass on to find.
662
+ #
663
+ # Example:
664
+ #
665
+ # should_have_named_scope :visible, :conditions => {:visible => true}
666
+ #
667
+ # Passes for
668
+ #
669
+ # named_scope :visible, :conditions => {:visible => true}
670
+ #
671
+ # Or for
672
+ #
673
+ # def self.visible
674
+ # scoped(:conditions => {:visible => true})
675
+ # end
676
+ #
677
+ # You can test lambdas or methods that return ActiveRecord#scoped calls:
678
+ #
679
+ # should_have_named_scope 'recent(5)', :limit => 5
680
+ # should_have_named_scope 'recent(1)', :limit => 1
681
+ #
682
+ # Passes for
683
+ # named_scope :recent, lambda {|c| {:limit => c}}
684
+ #
685
+ # Or for
686
+ #
687
+ # def self.recent(c)
688
+ # scoped(:limit => c)
689
+ # end
690
+ #
691
+ def should_have_named_scope(scope_call, *args)
692
+ klass = model_class
693
+ scope_opts = args.extract_options!
694
+ scope_call = scope_call.to_s
695
+
696
+ context scope_call do
697
+ setup do
698
+ @scope = eval("#{klass}.#{scope_call}")
699
+ end
700
+
701
+ should "return a scope object" do
702
+ assert_equal ::ActiveRecord::NamedScope::Scope, @scope.class
703
+ end
704
+
705
+ unless scope_opts.empty?
706
+ should "scope itself to #{scope_opts.inspect}" do
707
+ assert_equal scope_opts, @scope.proxy_options
708
+ end
709
+ end
710
+ end
711
+ end
712
+ end
713
+ end
714
+ end
715
+ end