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,39 @@
1
+ module ::ActionController
2
+ class AbstractRequest
3
+ def relative_url_root
4
+ Facebooker.path_prefix
5
+ end
6
+ end
7
+
8
+ class Base
9
+ def self.relative_url_root
10
+ Facebooker.path_prefix
11
+ end
12
+ end
13
+
14
+ class UrlRewriter
15
+ RESERVED_OPTIONS << :canvas
16
+ def link_to_new_canvas?
17
+ @request.parameters["fb_sig_in_new_facebook"] == "1"
18
+ end
19
+ def link_to_canvas?(params, options)
20
+ option_override = options[:canvas]
21
+ return false if option_override == false # important to check for false. nil should use default behavior
22
+ option_override || @request.parameters["fb_sig_in_canvas"] == "1" || @request.parameters[:fb_sig_in_canvas] == "1"
23
+ end
24
+
25
+ def rewrite_url_with_facebooker(*args)
26
+ options = args.first.is_a?(Hash) ? args.first : args.last
27
+ is_link_to_canvas = link_to_canvas?(@request.request_parameters, options)
28
+ if is_link_to_canvas && !options.has_key?(:host)
29
+ options[:host] = Facebooker.canvas_server_base
30
+ end
31
+ options.delete(:canvas)
32
+ Facebooker.request_for_canvas(is_link_to_canvas) do
33
+ rewrite_url_without_facebooker(*args)
34
+ end
35
+ end
36
+
37
+ alias_method_chain :rewrite_url, :facebooker
38
+ end
39
+ end
@@ -0,0 +1,615 @@
1
+ module Facebooker
2
+ module Rails
3
+
4
+ # Facebook specific helpers for creating FBML
5
+ #
6
+ # All helpers that take a user as a parameter will get the Facebook UID from the facebook_id attribute if it exists.
7
+ # It will use to_s if the facebook_id attribute is not present.
8
+ #
9
+ module Helpers
10
+
11
+
12
+ # Create an fb:dialog
13
+ # id must be a unique name e.g. "my_dialog"
14
+ # cancel_button is true or false
15
+ def fb_dialog( id, cancel_button, &block )
16
+ content = capture(&block)
17
+ concat( content_tag("fb:dialog", content, {:id => id, :cancel_button => cancel_button}), block.binding )
18
+ end
19
+
20
+ def fb_dialog_title( title )
21
+ content_tag "fb:dialog-title", title
22
+ end
23
+
24
+ def fb_dialog_content( &block )
25
+ content = capture(&block)
26
+ concat( content_tag("fb:dialog-content", content), block.binding )
27
+ end
28
+
29
+ def fb_dialog_button( type, value, options={} )
30
+ options.assert_valid_keys FB_DIALOG_BUTTON_VALID_OPTION_KEYS
31
+ options.merge! :type => type, :value => value
32
+ tag "fb:dialog-button", options
33
+ end
34
+
35
+ FB_DIALOG_BUTTON_VALID_OPTION_KEYS = [:close_dialog, :href, :form_id, :clickrewriteurl, :clickrewriteid, :clickrewriteform]
36
+
37
+ # Create an fb:request-form without a selector
38
+ #
39
+ # The block passed to this tag is used as the content of the form
40
+ #
41
+ # The message param is the name sent to content_for that specifies the body of the message
42
+ #
43
+ # For example,
44
+ #
45
+ # <% content_for("invite_message") do %>
46
+ # This gets sent in the invite. <%= fb_req_choice("with a button!",new_poke_path) %>
47
+ # <% end %>
48
+ # <% fb_request_form("Poke","invite_message",create_poke_path) do %>
49
+ # Send a poke to: <%= fb_friend_selector %> <br />
50
+ # <%= fb_request_form_submit %>
51
+ # <% end %>
52
+ def fb_request_form(type,message_param,url,options={},&block)
53
+ content = capture(&block)
54
+ message = @template.instance_variable_get("@content_for_#{message_param}")
55
+ concat(content_tag("fb:request-form", content + token_tag,
56
+ {:action=>url,:method=>"post",:invite=>true,:type=>type,:content=>message}.merge(options)),
57
+ block.binding)
58
+ end
59
+
60
+ # Create a submit button for an <fb:request-form>
61
+ # If the request is for an individual user you can optionally
62
+ # Provide the user and a label for the request button.
63
+ # For example
64
+ # <% content_for("invite_user") do %>
65
+ # This gets sent in the invite. <%= fb_req_choice("Come join us!",new_invite_path) %>
66
+ # <% end %>
67
+ # <% fb_request_form("Invite","invite_user",create_invite_path) do %>
68
+ # Invite <%= fb_name(@facebook_user.friends.first.id)%> to the party <br />
69
+ # <%= fb_request_form_submit(@facebook_user.friends.first.id,"Invite %n") %>
70
+ # <% end %>
71
+ # <em>See:</em> http://wiki.developers.facebook.com/index.php/Fb:request-form-submit for options
72
+ def fb_request_form_submit(options={})
73
+ tag("fb:request-form-submit",stringify_vals(options))
74
+ end
75
+
76
+
77
+ # Create an fb:request-form with an fb_multi_friend_selector inside
78
+ #
79
+ # The content of the block are used as the message on the form,
80
+ #
81
+ # For example:
82
+ # <% fb_multi_friend_request("Poke","Choose some friends to Poke",create_poke_path) do %>
83
+ # If you select some friends, they will see this message.
84
+ # <%= fb_req_choice("They will get this button, too",new_poke_path) %>
85
+ # <% end %>
86
+ def fb_multi_friend_request(type,friend_selector_message,url,&block)
87
+ content = capture(&block)
88
+ concat(content_tag("fb:request-form",
89
+ fb_multi_friend_selector(friend_selector_message) + token_tag,
90
+ {:action=>url,:method=>"post",:invite=>true,:type=>type,:content=>content}
91
+ ),
92
+ block.binding)
93
+ end
94
+
95
+ # Render an <fb:friend-selector> element
96
+ # <em>See:</em> http://wiki.developers.facebook.com/index.php/Fb:friend-selector for options
97
+ #
98
+ def fb_friend_selector(options={})
99
+ tag("fb:friend-selector",stringify_vals(options))
100
+ end
101
+
102
+ # Render an <fb:multi-friend-input> element
103
+ # <em> See: </em> http://wiki.developers.facebook.com/index.php/Fb:multi-friend-input for options
104
+ def fb_multi_friend_input(options={})
105
+ tag "fb:multi-friend-input",stringify_vals(options)
106
+ end
107
+
108
+ # Render an <fb:multi-friend-selector> with the passed in welcome message
109
+ # Full version shows all profile pics for friends.
110
+ # <em> See: </em> http://wiki.developers.facebook.com/index.php/Fb:multi-friend-selector for options
111
+ # <em> Note: </em> I don't think the block is used here.
112
+ def fb_multi_friend_selector(message,options={},&block)
113
+ options = options.dup
114
+ tag("fb:multi-friend-selector",stringify_vals(options.merge(:showborder=>false,:actiontext=>message,:max=>20)))
115
+ end
116
+
117
+ # Render a condensed <fb:multi-friend-selector> with the passed in welcome message
118
+ # Condensed version show checkboxes for each friend.
119
+ # <em> See: </em> http://wiki.developers.facebook.com/index.php/Fb:multi-friend-selector_%28condensed%29 for options
120
+ # <em> Note: </em> I don't think the block is used here.
121
+ def fb_multi_friend_selector_condensed(options={},&block)
122
+ options = options.dup
123
+ tag("fb:multi-friend-selector",stringify_vals(options.merge(:condensed=>true)))
124
+ end
125
+
126
+ # Render a button in a request using the <fb:req-choice> tag
127
+ # url must be an absolute url
128
+ # This should be used inside the block of an fb_multi_friend_request
129
+ def fb_req_choice(label,url)
130
+ tag "fb:req-choice",:label=>label,:url=>url
131
+ end
132
+
133
+ # Create a facebook form using <fb:editor>
134
+ #
135
+ # It yields a form builder that will convert the standard rails form helpers
136
+ # into the facebook specific version.
137
+ #
138
+ # Example:
139
+ # <% facebook_form_for(:poke,@poke,:url => create_poke_path) do |f| %>
140
+ # <%= f.text_field :message, :label=>"message" %>
141
+ # <%= f.buttons "Save Poke" %>
142
+ # <% end %>
143
+ #
144
+ # will generate
145
+ #
146
+ # <fb:editor action="/pokes/create">
147
+ # <fb:editor-text name="poke[message]" id="poke_message" value="" label="message" />
148
+ # <fb:editor-buttonset>
149
+ # <fb:editor-button label="Save Poke"
150
+ # </fb:editor-buttonset>
151
+ # </fb:editor>
152
+ def facebook_form_for( record_or_name_or_array,*args, &proc)
153
+
154
+ raise ArgumentError, "Missing block" unless block_given?
155
+ options = args.last.is_a?(Hash) ? args.pop : {}
156
+
157
+ case record_or_name_or_array
158
+ when String, Symbol
159
+ object_name = record_or_name_or_array
160
+ when Array
161
+ object = record_or_name_or_array.last
162
+ object_name = ActionController::RecordIdentifier.singular_class_name(object)
163
+ apply_form_for_options!(record_or_name_or_array, options)
164
+ args.unshift object
165
+ else
166
+ object = record_or_name_or_array
167
+ object_name = ActionController::RecordIdentifier.singular_class_name(object)
168
+ apply_form_for_options!([object], options)
169
+ args.unshift object
170
+ end
171
+ method = (options[:html]||{})[:method]
172
+ options[:builder] ||= Facebooker::Rails::FacebookFormBuilder
173
+ editor_options={}
174
+
175
+ action=options.delete(:url)
176
+ editor_options[:action]= action unless action.blank?
177
+ width=options.delete(:width)
178
+ editor_options[:width]=width unless width.blank?
179
+ width=options.delete(:labelwidth)
180
+ editor_options[:labelwidth]=width unless width.blank?
181
+
182
+ concat(tag("fb:editor",editor_options,true) , proc.binding)
183
+ concat(tag(:input,{:type=>"hidden",:name=>:_method, :value=>method},false), proc.binding) unless method.blank?
184
+ concat(token_tag, proc.binding)
185
+ fields_for( object_name,*(args << options), &proc)
186
+ concat("</fb:editor>",proc.binding)
187
+ end
188
+
189
+ # Render an fb:name tag for the given user
190
+ # This renders the name of the user specified. You can use this tag as both subject and object of
191
+ # a sentence. <em> See </em> http://wiki.developers.facebook.com/index.php/Fb:name for full description.
192
+ # Use this tag on FBML pages instead of retrieving the user's info and rendering the name explicitly.
193
+ #
194
+ def fb_name(user, options={})
195
+ options = options.dup
196
+ options.transform_keys!(FB_NAME_OPTION_KEYS_TO_TRANSFORM)
197
+ options.assert_valid_keys(FB_NAME_VALID_OPTION_KEYS)
198
+ options.merge!(:uid => cast_to_facebook_id(user))
199
+ tag("fb:name", stringify_vals(options))
200
+ end
201
+
202
+ FB_NAME_OPTION_KEYS_TO_TRANSFORM = {:first_name_only => :firstnameonly,
203
+ :last_name_only => :lastnameonly,
204
+ :show_network => :shownetwork,
205
+ :use_you => :useyou,
206
+ :if_cant_see => :ifcantsee,
207
+ :subject_id => :subjectid}
208
+ FB_NAME_VALID_OPTION_KEYS = [:firstnameonly, :linked, :lastnameonly, :possessive, :reflexive,
209
+ :shownetwork, :useyou, :ifcantsee, :capitalize, :subjectid]
210
+
211
+ # Render an <fb:pronoun> tag for the specified user
212
+ # Options give flexibility for placing in any part of a sentence.
213
+ # <em> See </em> http://wiki.developers.facebook.com/index.php/Fb:pronoun for complete list of options.
214
+ #
215
+ def fb_pronoun(user, options={})
216
+ options = options.dup
217
+ options.transform_keys!(FB_PRONOUN_OPTION_KEYS_TO_TRANSFORM)
218
+ options.assert_valid_keys(FB_PRONOUN_VALID_OPTION_KEYS)
219
+ options.merge!(:uid => cast_to_facebook_id(user))
220
+ tag("fb:pronoun", stringify_vals(options))
221
+ end
222
+
223
+ FB_PRONOUN_OPTION_KEYS_TO_TRANSFORM = {:use_you => :useyou, :use_they => :usethey}
224
+ FB_PRONOUN_VALID_OPTION_KEYS = [:useyou, :possessive, :reflexive, :objective,
225
+ :usethey, :capitalize]
226
+
227
+ # Render an fb:ref tag.
228
+ # Options must contain either url or handle.
229
+ # * <em> url </em> The URL from which to fetch the FBML. You may need to call fbml.refreshRefUrl to refresh cache
230
+ # * <em> handle </em> The string previously set by fbml.setRefHandle that identifies the FBML
231
+ # <em> See </em> http://wiki.developers.facebook.com/index.php/Fb:ref for complete description
232
+ def fb_ref(options)
233
+ options.assert_valid_keys(FB_REF_VALID_OPTION_KEYS)
234
+ validate_fb_ref_has_either_url_or_handle(options)
235
+ validate_fb_ref_does_not_have_both_url_and_handle(options)
236
+ tag("fb:ref", stringify_vals(options))
237
+ end
238
+
239
+ def validate_fb_ref_has_either_url_or_handle(options)
240
+ unless options.has_key?(:url) || options.has_key?(:handle)
241
+ raise ArgumentError, "fb_ref requires :url or :handle"
242
+ end
243
+ end
244
+
245
+ def validate_fb_ref_does_not_have_both_url_and_handle(options)
246
+ if options.has_key?(:url) && options.has_key?(:handle)
247
+ raise ArgumentError, "fb_ref may not have both :url and :handle"
248
+ end
249
+ end
250
+
251
+ FB_REF_VALID_OPTION_KEYS = [:url, :handle]
252
+
253
+ # Render an <fb:profile-pic> for the specified user.
254
+ #
255
+ # You can optionally specify the size using the :size=> option.
256
+ #
257
+ # Valid sizes are :thumb, :small, :normal and :square
258
+ def fb_profile_pic(user, options={})
259
+ options = options.dup
260
+ validate_fb_profile_pic_size(options)
261
+ options.merge!(:uid => cast_to_facebook_id(user))
262
+ tag("fb:profile-pic", stringify_vals(options))
263
+ end
264
+
265
+ # Render an fb:photo tag.
266
+ # photo is either a Facebooker::Photo or an id of a Facebook photo or an object that responds to photo_id.
267
+ # <em> See: </em> http://wiki.developers.facebook.com/index.php/Fb:photo for complete list of options.
268
+ def fb_photo(photo, options={})
269
+ options = options.dup
270
+ options.assert_valid_keys(FB_PHOTO_VALID_OPTION_KEYS)
271
+ options.merge!(:pid => cast_to_photo_id(photo))
272
+ validate_fb_photo_size(options)
273
+ validate_fb_photo_align_value(options)
274
+ tag("fb:photo", stringify_vals(options))
275
+ end
276
+
277
+ FB_PHOTO_VALID_OPTION_KEYS = [:uid, :size, :align]
278
+
279
+ def cast_to_photo_id(object)
280
+ object.respond_to?(:photo_id) ? object.photo_id : object
281
+ end
282
+
283
+ VALID_FB_SHARED_PHOTO_SIZES = [:thumb, :small, :normal, :square]
284
+ VALID_FB_PHOTO_SIZES = VALID_FB_SHARED_PHOTO_SIZES
285
+ VALID_FB_PROFILE_PIC_SIZES = VALID_FB_SHARED_PHOTO_SIZES
286
+ VALID_PERMISSIONS=[:email, :offline_access, :status_update, :photo_upload, :create_listing]
287
+
288
+ # Render an fb:tabs tag containing some number of fb:tab_item tags.
289
+ # Example:
290
+ # <% fb_tabs do %>
291
+ # <%= fb_tab_item("Home", "home") %>
292
+ # <%= fb_tab_item("Office", "office") %>
293
+ # <% end %>
294
+ def fb_tabs(&block)
295
+ content = capture(&block)
296
+ concat(content_tag("fb:tabs", content), block.binding)
297
+ end
298
+
299
+ # Render an fb:tab_item tag.
300
+ # Use this in conjunction with fb_tabs
301
+ # Options can contains :selected => true to indicate that a tab is the current tab.
302
+ # <em> See: </em> http://wiki.developers.facebook.com/index.php/Fb:tab-item for complete list of options
303
+ def fb_tab_item(title, url, options={})
304
+ options= options.dup
305
+ options.assert_valid_keys(FB_TAB_ITEM_VALID_OPTION_KEYS)
306
+ options.merge!(:title => title, :href => url)
307
+ validate_fb_tab_item_align_value(options)
308
+ tag("fb:tab-item", stringify_vals(options))
309
+ end
310
+
311
+ FB_TAB_ITEM_VALID_OPTION_KEYS = [:align, :selected]
312
+
313
+ def validate_fb_tab_item_align_value(options)
314
+ if options.has_key?(:align) && !VALID_FB_TAB_ITEM_ALIGN_VALUES.include?(options[:align].to_sym)
315
+ raise(ArgumentError, "Unkown value for align: #{options[:align]}")
316
+ end
317
+ end
318
+
319
+ def validate_fb_photo_align_value(options)
320
+ if options.has_key?(:align) && !VALID_FB_PHOTO_ALIGN_VALUES.include?(options[:align].to_sym)
321
+ raise(ArgumentError, "Unkown value for align: #{options[:align]}")
322
+ end
323
+ end
324
+
325
+ VALID_FB_SHARED_ALIGN_VALUES = [:left, :right]
326
+ VALID_FB_PHOTO_ALIGN_VALUES = VALID_FB_SHARED_ALIGN_VALUES
327
+ VALID_FB_TAB_ITEM_ALIGN_VALUES = VALID_FB_SHARED_ALIGN_VALUES
328
+
329
+
330
+ # Create a Facebook wall. It can contain fb_wall_posts
331
+ #
332
+ # For Example:
333
+ # <% fb_wall do %>
334
+ # <%= fb_wall_post(@user,"This is my message") %>
335
+ # <%= fb_wall_post(@otheruser,"This is another message") %>
336
+ # <% end %>
337
+ def fb_wall(&proc)
338
+ content = capture(&proc)
339
+ concat(content_tag("fb:wall",content,{}),proc.binding)
340
+ end
341
+
342
+ # Render an <fb:wallpost> tag
343
+ # TODO: Optionally takes a time parameter t = int The current time, which is displayed in epoch seconds.
344
+ def fb_wallpost(user,message)
345
+ content_tag("fb:wallpost",message,:uid=>cast_to_facebook_id(user))
346
+ end
347
+ alias_method :fb_wall_post, :fb_wallpost
348
+
349
+ # Render an <fb:error> tag
350
+ # If message and text are present then this will render fb:error and fb:message tag
351
+ # TODO: Optionally takes a decoration tag with value of 'no_padding' or 'shorten'
352
+ def fb_error(message, text=nil)
353
+ fb_status_msg("error", message, text)
354
+ end
355
+
356
+ # Render an <fb:explanation> tag
357
+ # If message and text are present then this will render fb:error and fb:message tag
358
+ # TODO: Optionally takes a decoration tag with value of 'no_padding' or 'shorten'
359
+ def fb_explanation(message, text=nil)
360
+ fb_status_msg("explanation", message, text)
361
+ end
362
+
363
+ # Render an <fb:success> tag
364
+ # If message and text are present then this will render fb:error and fb:message tag
365
+ # TODO: Optionally takes a decoration tag with value of 'no_padding' or 'shorten'
366
+ def fb_success(message, text=nil)
367
+ fb_status_msg("success", message, text)
368
+ end
369
+
370
+ # Render flash values as <fb:message> and <fb:error> tags
371
+ #
372
+ # values in flash[:notice] will be rendered as an <fb:message>
373
+ #
374
+ # values in flash[:error] will be rendered as an <fb:error>
375
+ # TODO: Allow flash[:info] to render fb_explanation
376
+ def facebook_messages
377
+ message=""
378
+ unless flash[:notice].blank?
379
+ message += fb_success(flash[:notice])
380
+ end
381
+ unless flash[:error].blank?
382
+ message += fb_error(flash[:error])
383
+ end
384
+ message
385
+ end
386
+
387
+ # Create a dashboard. It can contain fb_action, fb_help, and fb_create_button
388
+ #
389
+ # For Example:
390
+ # <% fb_dashboard do %>
391
+ # <%= APP_NAME %>
392
+ # <%= fb_action 'My Matches', search_path %>
393
+ # <%= fb_help 'Feedback', "http://www.facebook.com/apps/application.php?id=6236036681" %>
394
+ # <%= fb_create_button 'Invite Friends', main_path %>
395
+ # <% end %>
396
+ def fb_dashboard(&proc)
397
+ if block_given?
398
+ content = capture(&proc)
399
+ concat(content_tag("fb:dashboard",content,{}),proc.binding)
400
+ else
401
+ content_tag("fb:dashboard",content,{})
402
+ end
403
+ end
404
+
405
+ # Content for the wide profile box goes in this tag
406
+ def fb_wide(&proc)
407
+ content = capture(&proc)
408
+ concat(content_tag("fb:wide", content, {}), proc.binding)
409
+ end
410
+
411
+ # Content for the narrow profile box goes in this tag
412
+ def fb_narrow(&proc)
413
+ content = capture(&proc)
414
+ concat(content_tag("fb:narrow", content, {}), proc.binding)
415
+ end
416
+
417
+ # Renders an action using the <fb:action> tag
418
+ def fb_action(name, url)
419
+ "<fb:action href=\"#{url_for(url)}\">#{name}</fb:action>"
420
+ end
421
+
422
+ # Render a <fb:help> tag
423
+ # For use inside <fb:dashboard>
424
+ def fb_help(name, url)
425
+ "<fb:help href=\"#{url_for(url)}\">#{name}</fb:help>"
426
+ end
427
+
428
+ # Render a <fb:create-button> tag
429
+ # For use inside <fb:dashboard>
430
+ def fb_create_button(name, url)
431
+ "<fb:create-button href=\"#{url_for(url)}\">#{name}</fb:create-button>"
432
+ end
433
+
434
+ # Create a comment area
435
+ # All the data for this content area is stored on the facebook servers.
436
+ # <em>See:</em> http://wiki.developers.facebook.com/index.php/Fb:comments for full details
437
+ def fb_comments(xid,canpost=true,candelete=false,numposts=5,options={})
438
+ options = options.dup
439
+ title = (title = options.delete(:title)) ? fb_title(title) : nil
440
+ content_tag "fb:comments",title,stringify_vals(options.merge(:xid=>xid,:canpost=>canpost.to_s,:candelete=>candelete.to_s,:numposts=>numposts))
441
+ end
442
+
443
+ # Adds a title to the title bar
444
+ #
445
+ # Facebook | App Name | This is the canvas page window title
446
+ #
447
+ # +title+: This is the canvas page window
448
+ def fb_title(title)
449
+ "<fb:title>#{title}</fb:title>"
450
+ end
451
+
452
+ # Create a Google Analytics tag
453
+ #
454
+ # +uacct+: Your Urchin/Google Analytics account ID.
455
+ def fb_google_analytics(uacct, options={})
456
+ options = options.dup
457
+ tag "fb:google-analytics", stringify_vals(options.merge(:uacct => uacct))
458
+ end
459
+
460
+ # Render if-is-app-user tag
461
+ # This tag renders the enclosing content only if the user specified has accepted the terms of service for the application.
462
+ # Use fb_if_user_has_added_app to determine wether the user has added the app.
463
+ # Example:
464
+ # <% fb_if_is_app_user(@facebook_user) do %>
465
+ # Thanks for accepting our terms of service!
466
+ # <% fb_else do %>
467
+ # Hey you haven't agreed to our terms. <%= link_to("Please accept our terms of service.", :action => "terms_of_service") %>
468
+ # <% end %>
469
+ #<% end %>
470
+ def fb_if_is_app_user(user=nil,options={},&proc)
471
+ content = capture(&proc)
472
+ options = options.dup
473
+ options.merge!(:uid=>cast_to_facebook_id(user)) if user
474
+ concat(content_tag("fb:if-is-app-user",content,stringify_vals(options)),proc.binding)
475
+ end
476
+
477
+ # Render if-user-has-added-app tag
478
+ # This tag renders the enclosing content only if the user specified has installed the application
479
+ #
480
+ # Example:
481
+ # <% fb_if_user_has_added_app(@facebook_user) do %>
482
+ # Hey you are an app user!
483
+ # <% fb_else do %>
484
+ # Hey you aren't an app user. <%= link_to("Add App and see the other side.", :action => "added_app") %>
485
+ # <% end %>
486
+ #<% end %>
487
+ def fb_if_user_has_added_app(user,options={},&proc)
488
+ content = capture(&proc)
489
+ options = options.dup
490
+ concat(content_tag("fb:if-user-has-added-app",content,stringify_vals(options.merge(:uid=>cast_to_facebook_id(user)))),proc.binding)
491
+ end
492
+
493
+ # Render fb:if-is-user tag
494
+ # This tag only renders enclosing content if the user is one of those specified
495
+ # user can be a single user or an Array of users
496
+ # Example:
497
+ # <% fb_if_is_user(@check_user) do %>
498
+ # <%= fb_name(@facebook_user) %> are one of the users. <%= link_to("Check the other side", :action => "friend") %>
499
+ # <% fb_else do %>
500
+ # <%= fb_name(@facebook_user) %> are not one of the users <%= fb_name(@check_user) %>
501
+ # <%= link_to("Check the other side", :action => "you") %>
502
+ # <% end %>
503
+ # <% end %>
504
+ def fb_if_is_user(user,&proc)
505
+ content = capture(&proc)
506
+ user = [user] unless user.is_a? Array
507
+ user_list=user.map{|u| cast_to_facebook_id(u)}.join(",")
508
+ concat(content_tag("fb:if-is-user",content,{:uid=>user_list}),proc.binding)
509
+ end
510
+
511
+ # Render fb:else tag
512
+ # Must be used within if block such as fb_if_is_user or fb_if_is_app_user . See example in fb_if_is_app_user
513
+ def fb_else(&proc)
514
+ content = capture(&proc)
515
+ concat(content_tag("fb:else",content),proc.binding)
516
+ end
517
+
518
+ #
519
+ # Return the URL for the about page of the application
520
+ def fb_about_url
521
+ "http://#{Facebooker.www_server_base_url}/apps/application.php?api_key=#{Facebooker.api_key}"
522
+ end
523
+
524
+ #
525
+ # Embed a discussion board named xid on the current page
526
+ #
527
+ def fb_board(xid,options={})
528
+ options = options.dup
529
+ tag("fb:board",stringify_vals(options.merge(:xid=>xid)))
530
+ end
531
+
532
+ def fb_add_profile_section
533
+ tag "fb:add-section-button",:section=>"profile"
534
+ end
535
+
536
+ def fb_add_info_section
537
+ tag "fb:add-section-button",:section=>"info"
538
+ end
539
+
540
+ def fb_prompt_permission(permission,message,callback=nil)
541
+ raise(ArgumentError, "Unknown value for permission: #{permission}") unless VALID_PERMISSIONS.include?(permission.to_sym)
542
+ args={:perms=>permission}
543
+ args[:next_fbjs]=callback unless callback.nil?
544
+ content_tag("fb:prompt-permission",message,args)
545
+ end
546
+
547
+ protected
548
+
549
+ def cast_to_facebook_id(object)
550
+ Facebooker::User.cast_to_facebook_id(object)
551
+ end
552
+
553
+ def validate_fb_profile_pic_size(options)
554
+ if options.has_key?(:size) && !VALID_FB_PROFILE_PIC_SIZES.include?(options[:size].to_sym)
555
+ raise(ArgumentError, "Unkown value for size: #{options[:size]}")
556
+ end
557
+ end
558
+
559
+ def validate_fb_photo_size(options)
560
+ if options.has_key?(:size) && !VALID_FB_PHOTO_SIZES.include?(options[:size].to_sym)
561
+ raise(ArgumentError, "Unkown value for size: #{options[:size]}")
562
+ end
563
+ end
564
+
565
+ private
566
+ def stringify_vals(hash)
567
+ result={}
568
+ hash.each do |key,value|
569
+ result[key]=value.to_s
570
+ end
571
+ result
572
+ end
573
+
574
+ def fb_status_msg(type, message, text)
575
+ if text.blank?
576
+ tag("fb:#{type}", :message => message)
577
+ else
578
+ content_tag("fb:#{type}", content_tag("fb:message", message) + text)
579
+ end
580
+ end
581
+
582
+ def token_tag
583
+ unless protect_against_forgery?
584
+ ''
585
+ else
586
+ tag(:input, :type => "hidden", :name => request_forgery_protection_token.to_s, :value => form_authenticity_token)
587
+ end
588
+ end
589
+ end
590
+ end
591
+ end
592
+
593
+ class Hash
594
+ def transform_keys!(transformation_hash)
595
+ transformation_hash.each_pair{|key, value| transform_key!(key, value)}
596
+ end
597
+
598
+
599
+ def transform_key!(old_key, new_key)
600
+ swapkey!(new_key, old_key)
601
+ end
602
+
603
+ ### This method is lifted from Ruby Facets core
604
+ def swapkey!( newkey, oldkey )
605
+ self[newkey] = self.delete(oldkey) if self.has_key?(oldkey)
606
+ self
607
+ end
608
+
609
+ # We can allow css attributes.
610
+ FB_ALWAYS_VALID_OPTION_KEYS = [:class, :style]
611
+ def assert_valid_keys(*valid_keys)
612
+ unknown_keys = keys - [valid_keys + FB_ALWAYS_VALID_OPTION_KEYS].flatten
613
+ raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty?
614
+ end
615
+ end