sorcery 0.8.1 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +56 -0
  3. data/.travis.yml +130 -1
  4. data/CHANGELOG.md +279 -0
  5. data/Gemfile +18 -23
  6. data/README.md +372 -0
  7. data/Rakefile +3 -78
  8. data/gemfiles/active_record-rails40.gemfile +7 -0
  9. data/gemfiles/active_record-rails41.gemfile +7 -0
  10. data/gemfiles/mongo_mapper-rails40.gemfile +9 -0
  11. data/gemfiles/mongo_mapper-rails41.gemfile +9 -0
  12. data/gemfiles/mongoid-rails40.gemfile +9 -0
  13. data/gemfiles/mongoid-rails41.gemfile +9 -0
  14. data/gemfiles/mongoid3-rails32.gemfile +9 -0
  15. data/lib/generators/sorcery/USAGE +1 -1
  16. data/lib/generators/sorcery/helpers.rb +40 -0
  17. data/lib/generators/sorcery/install_generator.rb +38 -20
  18. data/lib/generators/sorcery/templates/initializer.rb +53 -16
  19. data/lib/generators/sorcery/templates/migration/activity_logging.rb +3 -10
  20. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -7
  21. data/lib/generators/sorcery/templates/migration/core.rb +5 -8
  22. data/lib/generators/sorcery/templates/migration/external.rb +3 -5
  23. data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -9
  24. data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -10
  25. data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -10
  26. data/lib/sorcery/adapters/active_record_adapter.rb +120 -0
  27. data/lib/sorcery/adapters/base_adapter.rb +30 -0
  28. data/lib/sorcery/adapters/data_mapper_adapter.rb +176 -0
  29. data/lib/sorcery/adapters/mongo_mapper_adapter.rb +110 -0
  30. data/lib/sorcery/adapters/mongoid_adapter.rb +97 -0
  31. data/lib/sorcery/controller/config.rb +65 -0
  32. data/lib/sorcery/controller/submodules/activity_logging.rb +27 -21
  33. data/lib/sorcery/controller/submodules/brute_force_protection.rb +6 -6
  34. data/lib/sorcery/controller/submodules/external.rb +107 -75
  35. data/lib/sorcery/controller/submodules/remember_me.rb +5 -5
  36. data/lib/sorcery/controller/submodules/session_timeout.rb +11 -7
  37. data/lib/sorcery/controller.rb +27 -76
  38. data/lib/sorcery/model/config.rb +96 -0
  39. data/lib/sorcery/model/submodules/activity_logging.rb +32 -12
  40. data/lib/sorcery/model/submodules/brute_force_protection.rb +36 -36
  41. data/lib/sorcery/model/submodules/external.rb +53 -9
  42. data/lib/sorcery/model/submodules/remember_me.rb +15 -19
  43. data/lib/sorcery/model/submodules/reset_password.rb +36 -33
  44. data/lib/sorcery/model/submodules/user_activation.rb +51 -48
  45. data/lib/sorcery/model/temporary_token.rb +4 -4
  46. data/lib/sorcery/model.rb +85 -175
  47. data/lib/sorcery/protocols/oauth.rb +42 -0
  48. data/lib/sorcery/protocols/oauth2.rb +47 -0
  49. data/lib/sorcery/providers/base.rb +38 -0
  50. data/lib/sorcery/providers/facebook.rb +74 -0
  51. data/lib/sorcery/providers/github.rb +60 -0
  52. data/lib/sorcery/providers/google.rb +51 -0
  53. data/lib/sorcery/providers/heroku.rb +57 -0
  54. data/lib/sorcery/providers/jira.rb +77 -0
  55. data/lib/sorcery/providers/linkedin.rb +66 -0
  56. data/lib/sorcery/providers/liveid.rb +53 -0
  57. data/lib/sorcery/providers/salesforce.rb +50 -0
  58. data/lib/sorcery/providers/twitter.rb +59 -0
  59. data/lib/sorcery/providers/vk.rb +63 -0
  60. data/lib/sorcery/providers/xing.rb +64 -0
  61. data/lib/sorcery/railties/tasks.rake +1 -7
  62. data/lib/sorcery/test_helpers/internal/rails.rb +17 -6
  63. data/lib/sorcery/test_helpers/internal.rb +27 -6
  64. data/lib/sorcery/test_helpers/rails/controller.rb +21 -0
  65. data/lib/sorcery/test_helpers/rails/integration.rb +26 -0
  66. data/lib/sorcery/version.rb +3 -0
  67. data/lib/sorcery.rb +83 -57
  68. data/sorcery.gemspec +24 -363
  69. data/spec/active_record/user_activation_spec.rb +18 -0
  70. data/spec/active_record/user_activity_logging_spec.rb +17 -0
  71. data/spec/{rails3/spec → active_record}/user_brute_force_protection_spec.rb +6 -5
  72. data/spec/{rails3/spec → active_record}/user_oauth_spec.rb +6 -5
  73. data/spec/{rails3/spec → active_record}/user_remember_me_spec.rb +5 -4
  74. data/spec/{rails3/spec → active_record}/user_reset_password_spec.rb +7 -7
  75. data/spec/active_record/user_spec.rb +37 -0
  76. data/spec/controllers/controller_activity_logging_spec.rb +124 -0
  77. data/spec/controllers/controller_brute_force_protection_spec.rb +43 -0
  78. data/spec/controllers/controller_http_basic_auth_spec.rb +68 -0
  79. data/spec/controllers/controller_oauth2_spec.rb +429 -0
  80. data/spec/controllers/controller_oauth_spec.rb +240 -0
  81. data/spec/controllers/controller_remember_me_spec.rb +117 -0
  82. data/spec/controllers/controller_session_timeout_spec.rb +80 -0
  83. data/spec/controllers/controller_spec.rb +218 -0
  84. data/spec/data_mapper/user_activation_spec.rb +10 -0
  85. data/spec/data_mapper/user_activity_logging_spec.rb +14 -0
  86. data/spec/data_mapper/user_brute_force_protection_spec.rb +9 -0
  87. data/spec/data_mapper/user_oauth_spec.rb +9 -0
  88. data/spec/data_mapper/user_remember_me_spec.rb +8 -0
  89. data/spec/data_mapper/user_reset_password_spec.rb +8 -0
  90. data/spec/data_mapper/user_spec.rb +27 -0
  91. data/spec/mongo_mapper/user_activation_spec.rb +9 -0
  92. data/spec/mongo_mapper/user_activity_logging_spec.rb +8 -0
  93. data/spec/mongo_mapper/user_brute_force_protection_spec.rb +8 -0
  94. data/spec/mongo_mapper/user_oauth_spec.rb +8 -0
  95. data/spec/mongo_mapper/user_remember_me_spec.rb +8 -0
  96. data/spec/mongo_mapper/user_reset_password_spec.rb +8 -0
  97. data/spec/mongo_mapper/user_spec.rb +37 -0
  98. data/spec/mongoid/user_activation_spec.rb +9 -0
  99. data/spec/mongoid/user_activity_logging_spec.rb +8 -0
  100. data/spec/mongoid/user_brute_force_protection_spec.rb +8 -0
  101. data/spec/mongoid/user_oauth_spec.rb +8 -0
  102. data/spec/mongoid/user_remember_me_spec.rb +8 -0
  103. data/spec/mongoid/user_reset_password_spec.rb +8 -0
  104. data/spec/mongoid/user_spec.rb +51 -0
  105. data/spec/orm/active_record.rb +21 -0
  106. data/spec/orm/data_mapper.rb +48 -0
  107. data/spec/orm/mongo_mapper.rb +10 -0
  108. data/spec/orm/mongoid.rb +22 -0
  109. data/spec/{rails3/app/models → rails_app/app/active_record}/user.rb +1 -2
  110. data/spec/rails_app/app/active_record/user_provider.rb +3 -0
  111. data/spec/rails_app/app/controllers/sorcery_controller.rb +285 -0
  112. data/spec/rails_app/app/data_mapper/authentication.rb +8 -0
  113. data/spec/rails_app/app/data_mapper/user.rb +7 -0
  114. data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/user.rb +2 -0
  115. data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/user.rb +2 -0
  116. data/spec/rails_app/app/views/sorcery_mailer/send_unlock_token_email.text.erb +1 -0
  117. data/spec/{rails3_mongo_mapper → rails_app}/config/application.rb +13 -8
  118. data/spec/rails_app/config/boot.rb +4 -0
  119. data/spec/rails_app/config/database.yml +22 -0
  120. data/spec/{rails3_mongo_mapper → rails_app}/config/environments/test.rb +2 -0
  121. data/spec/{rails3_mongoid → rails_app}/config/initializers/session_store.rb +4 -0
  122. data/spec/rails_app/config/routes.rb +51 -0
  123. data/spec/{rails3_mongo_mapper → rails_app}/config.ru +1 -1
  124. data/spec/{rails3 → rails_app}/db/migrate/activation/20101224223622_add_activation_to_users.rb +3 -3
  125. data/spec/{rails3 → rails_app}/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +2 -0
  126. data/spec/{rails3 → rails_app}/db/migrate/core/20101224223620_create_users.rb +2 -2
  127. data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +22 -0
  128. data/spec/rails_app/log/development.log +1791 -0
  129. data/spec/shared_examples/user_activation_shared_examples.rb +137 -98
  130. data/spec/shared_examples/user_activity_logging_shared_examples.rb +86 -13
  131. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +140 -21
  132. data/spec/shared_examples/user_oauth_shared_examples.rb +21 -16
  133. data/spec/shared_examples/user_remember_me_shared_examples.rb +36 -24
  134. data/spec/shared_examples/user_reset_password_shared_examples.rb +163 -130
  135. data/spec/shared_examples/user_shared_examples.rb +370 -195
  136. data/spec/sorcery_crypto_providers_spec.rb +74 -72
  137. data/spec/spec_helper.rb +32 -4
  138. metadata +259 -425
  139. data/Gemfile.lock +0 -192
  140. data/README.rdoc +0 -261
  141. data/VERSION +0 -1
  142. data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +0 -35
  143. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +0 -45
  144. data/lib/sorcery/controller/submodules/external/providers/facebook.rb +0 -97
  145. data/lib/sorcery/controller/submodules/external/providers/github.rb +0 -91
  146. data/lib/sorcery/controller/submodules/external/providers/google.rb +0 -90
  147. data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +0 -101
  148. data/lib/sorcery/controller/submodules/external/providers/liveid.rb +0 -91
  149. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +0 -92
  150. data/lib/sorcery/controller/submodules/external/providers/vk.rb +0 -99
  151. data/lib/sorcery/model/adapters/active_record.rb +0 -49
  152. data/lib/sorcery/model/adapters/mongo_mapper.rb +0 -56
  153. data/lib/sorcery/model/adapters/mongoid.rb +0 -88
  154. data/lib/sorcery/test_helpers/rails.rb +0 -16
  155. data/lib/sorcery/test_helpers.rb +0 -5
  156. data/spec/Gemfile +0 -12
  157. data/spec/Gemfile.lock +0 -129
  158. data/spec/README.md +0 -31
  159. data/spec/Rakefile +0 -12
  160. data/spec/rails3/.gitignore +0 -4
  161. data/spec/rails3/.rspec +0 -1
  162. data/spec/rails3/Gemfile +0 -15
  163. data/spec/rails3/Gemfile.lock +0 -162
  164. data/spec/rails3/README +0 -256
  165. data/spec/rails3/Rakefile +0 -11
  166. data/spec/rails3/app/controllers/application_controller.rb +0 -208
  167. data/spec/rails3/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -1
  168. data/spec/rails3/config/application.rb +0 -46
  169. data/spec/rails3/config/boot.rb +0 -13
  170. data/spec/rails3/config/database.yml +0 -27
  171. data/spec/rails3/config/environments/development.rb +0 -26
  172. data/spec/rails3/config/environments/in_memory.rb +0 -35
  173. data/spec/rails3/config/environments/production.rb +0 -49
  174. data/spec/rails3/config/environments/test.rb +0 -35
  175. data/spec/rails3/config/initializers/session_store.rb +0 -8
  176. data/spec/rails3/config/routes.rb +0 -59
  177. data/spec/rails3/config.ru +0 -4
  178. data/spec/rails3/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  179. data/spec/rails3/lib/tasks/.gitkeep +0 -0
  180. data/spec/rails3/public/404.html +0 -26
  181. data/spec/rails3/public/422.html +0 -26
  182. data/spec/rails3/public/500.html +0 -26
  183. data/spec/rails3/public/favicon.ico +0 -0
  184. data/spec/rails3/public/images/rails.png +0 -0
  185. data/spec/rails3/public/javascripts/application.js +0 -2
  186. data/spec/rails3/public/javascripts/controls.js +0 -965
  187. data/spec/rails3/public/javascripts/dragdrop.js +0 -974
  188. data/spec/rails3/public/javascripts/effects.js +0 -1123
  189. data/spec/rails3/public/javascripts/prototype.js +0 -6001
  190. data/spec/rails3/public/javascripts/rails.js +0 -175
  191. data/spec/rails3/public/robots.txt +0 -5
  192. data/spec/rails3/public/stylesheets/.gitkeep +0 -0
  193. data/spec/rails3/script/rails +0 -6
  194. data/spec/rails3/spec/controller_activity_logging_spec.rb +0 -115
  195. data/spec/rails3/spec/controller_brute_force_protection_spec.rb +0 -88
  196. data/spec/rails3/spec/controller_http_basic_auth_spec.rb +0 -50
  197. data/spec/rails3/spec/controller_oauth2_spec.rb +0 -380
  198. data/spec/rails3/spec/controller_oauth_spec.rb +0 -206
  199. data/spec/rails3/spec/controller_remember_me_spec.rb +0 -96
  200. data/spec/rails3/spec/controller_session_timeout_spec.rb +0 -55
  201. data/spec/rails3/spec/controller_spec.rb +0 -177
  202. data/spec/rails3/spec/integration_spec.rb +0 -23
  203. data/spec/rails3/spec/spec.opts +0 -2
  204. data/spec/rails3/spec/spec_helper.orig.rb +0 -27
  205. data/spec/rails3/spec/spec_helper.rb +0 -71
  206. data/spec/rails3/spec/user_activation_spec.rb +0 -16
  207. data/spec/rails3/spec/user_activity_logging_spec.rb +0 -8
  208. data/spec/rails3/spec/user_spec.rb +0 -36
  209. data/spec/rails3/vendor/plugins/.gitkeep +0 -0
  210. data/spec/rails3_mongo_mapper/.gitignore +0 -4
  211. data/spec/rails3_mongo_mapper/.rspec +0 -1
  212. data/spec/rails3_mongo_mapper/Gemfile +0 -16
  213. data/spec/rails3_mongo_mapper/Gemfile.lock +0 -156
  214. data/spec/rails3_mongo_mapper/Rakefile +0 -11
  215. data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +0 -122
  216. data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +0 -2
  217. data/spec/rails3_mongo_mapper/app/mailers/sorcery_mailer.rb +0 -25
  218. data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +0 -14
  219. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  220. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  221. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  222. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  223. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  224. data/spec/rails3_mongo_mapper/config/boot.rb +0 -13
  225. data/spec/rails3_mongo_mapper/config/environment.rb +0 -5
  226. data/spec/rails3_mongo_mapper/config/environments/development.rb +0 -30
  227. data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
  228. data/spec/rails3_mongo_mapper/config/environments/production.rb +0 -49
  229. data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +0 -7
  230. data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +0 -10
  231. data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +0 -5
  232. data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +0 -2
  233. data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +0 -7
  234. data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +0 -8
  235. data/spec/rails3_mongo_mapper/config/locales/en.yml +0 -5
  236. data/spec/rails3_mongo_mapper/config/routes.rb +0 -59
  237. data/spec/rails3_mongo_mapper/db/schema.rb +0 -23
  238. data/spec/rails3_mongo_mapper/db/seeds.rb +0 -7
  239. data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
  240. data/spec/rails3_mongo_mapper/public/404.html +0 -26
  241. data/spec/rails3_mongo_mapper/public/422.html +0 -26
  242. data/spec/rails3_mongo_mapper/public/500.html +0 -26
  243. data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
  244. data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
  245. data/spec/rails3_mongo_mapper/public/javascripts/application.js +0 -2
  246. data/spec/rails3_mongo_mapper/public/javascripts/controls.js +0 -965
  247. data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +0 -974
  248. data/spec/rails3_mongo_mapper/public/javascripts/effects.js +0 -1123
  249. data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +0 -6001
  250. data/spec/rails3_mongo_mapper/public/javascripts/rails.js +0 -175
  251. data/spec/rails3_mongo_mapper/public/robots.txt +0 -5
  252. data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
  253. data/spec/rails3_mongo_mapper/script/rails +0 -6
  254. data/spec/rails3_mongo_mapper/spec/controller_spec.rb +0 -170
  255. data/spec/rails3_mongo_mapper/spec/spec.opts +0 -2
  256. data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +0 -27
  257. data/spec/rails3_mongo_mapper/spec/spec_helper.rb +0 -55
  258. data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +0 -9
  259. data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +0 -8
  260. data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +0 -8
  261. data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +0 -8
  262. data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +0 -8
  263. data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +0 -8
  264. data/spec/rails3_mongo_mapper/spec/user_spec.rb +0 -37
  265. data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
  266. data/spec/rails3_mongoid/.gitignore +0 -4
  267. data/spec/rails3_mongoid/.rspec +0 -1
  268. data/spec/rails3_mongoid/Gemfile +0 -15
  269. data/spec/rails3_mongoid/Gemfile.lock +0 -146
  270. data/spec/rails3_mongoid/Rakefile +0 -11
  271. data/spec/rails3_mongoid/app/controllers/application_controller.rb +0 -127
  272. data/spec/rails3_mongoid/app/helpers/application_helper.rb +0 -2
  273. data/spec/rails3_mongoid/app/mailers/sorcery_mailer.rb +0 -25
  274. data/spec/rails3_mongoid/app/views/layouts/application.html.erb +0 -14
  275. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  276. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  277. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
  278. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  279. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  280. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  281. data/spec/rails3_mongoid/config/application.rb +0 -51
  282. data/spec/rails3_mongoid/config/boot.rb +0 -13
  283. data/spec/rails3_mongoid/config/environment.rb +0 -5
  284. data/spec/rails3_mongoid/config/environments/development.rb +0 -26
  285. data/spec/rails3_mongoid/config/environments/in_memory.rb +0 -0
  286. data/spec/rails3_mongoid/config/environments/production.rb +0 -49
  287. data/spec/rails3_mongoid/config/environments/test.rb +0 -35
  288. data/spec/rails3_mongoid/config/initializers/backtrace_silencers.rb +0 -7
  289. data/spec/rails3_mongoid/config/initializers/inflections.rb +0 -10
  290. data/spec/rails3_mongoid/config/initializers/mime_types.rb +0 -5
  291. data/spec/rails3_mongoid/config/initializers/secret_token.rb +0 -7
  292. data/spec/rails3_mongoid/config/locales/en.yml +0 -5
  293. data/spec/rails3_mongoid/config/mongoid.yml +0 -7
  294. data/spec/rails3_mongoid/config/routes.rb +0 -59
  295. data/spec/rails3_mongoid/config.ru +0 -4
  296. data/spec/rails3_mongoid/db/schema.rb +0 -23
  297. data/spec/rails3_mongoid/db/seeds.rb +0 -7
  298. data/spec/rails3_mongoid/lib/tasks/.gitkeep +0 -0
  299. data/spec/rails3_mongoid/public/404.html +0 -26
  300. data/spec/rails3_mongoid/public/422.html +0 -26
  301. data/spec/rails3_mongoid/public/500.html +0 -26
  302. data/spec/rails3_mongoid/public/favicon.ico +0 -0
  303. data/spec/rails3_mongoid/public/images/rails.png +0 -0
  304. data/spec/rails3_mongoid/public/javascripts/application.js +0 -2
  305. data/spec/rails3_mongoid/public/javascripts/controls.js +0 -965
  306. data/spec/rails3_mongoid/public/javascripts/dragdrop.js +0 -974
  307. data/spec/rails3_mongoid/public/javascripts/effects.js +0 -1123
  308. data/spec/rails3_mongoid/public/javascripts/prototype.js +0 -6001
  309. data/spec/rails3_mongoid/public/javascripts/rails.js +0 -175
  310. data/spec/rails3_mongoid/public/robots.txt +0 -5
  311. data/spec/rails3_mongoid/public/stylesheets/.gitkeep +0 -0
  312. data/spec/rails3_mongoid/script/rails +0 -6
  313. data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +0 -105
  314. data/spec/rails3_mongoid/spec/controller_spec.rb +0 -181
  315. data/spec/rails3_mongoid/spec/spec.opts +0 -2
  316. data/spec/rails3_mongoid/spec/spec_helper.orig.rb +0 -27
  317. data/spec/rails3_mongoid/spec/spec_helper.rb +0 -55
  318. data/spec/rails3_mongoid/spec/user_activation_spec.rb +0 -9
  319. data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +0 -8
  320. data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +0 -8
  321. data/spec/rails3_mongoid/spec/user_oauth_spec.rb +0 -8
  322. data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +0 -8
  323. data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +0 -8
  324. data/spec/rails3_mongoid/spec/user_spec.rb +0 -38
  325. data/spec/rails3_mongoid/vendor/plugins/.gitkeep +0 -0
  326. data/spec/shared_examples/controller_oauth2_shared_examples.rb +0 -56
  327. data/spec/shared_examples/controller_oauth_shared_examples.rb +0 -55
  328. /data/lib/sorcery/{controller/submodules/external/protocols → protocols}/certs/ca-bundle.crt +0 -0
  329. /data/spec/{rails3/app/models → rails_app/app/active_record}/authentication.rb +0 -0
  330. /data/spec/{rails3 → rails_app}/app/helpers/application_helper.rb +0 -0
  331. /data/spec/{rails3 → rails_app}/app/mailers/sorcery_mailer.rb +0 -0
  332. /data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/authentication.rb +0 -0
  333. /data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/authentication.rb +0 -0
  334. /data/spec/{rails3 → rails_app}/app/views/application/index.html.erb +0 -0
  335. /data/spec/{rails3 → rails_app}/app/views/layouts/application.html.erb +0 -0
  336. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.html.erb +0 -0
  337. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.text.erb +0 -0
  338. /data/spec/{rails3/app/views/sorcery_mailer/activation_success_email.html.erb → rails_app/app/views/sorcery_mailer/activation_needed_email.html.erb} +0 -0
  339. /data/spec/{rails3_mongo_mapper → rails_app}/app/views/sorcery_mailer/activation_success_email.html.erb +0 -0
  340. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_success_email.text.erb +0 -0
  341. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.html.erb +0 -0
  342. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.text.erb +0 -0
  343. /data/spec/{rails3 → rails_app}/config/environment.rb +0 -0
  344. /data/spec/{rails3 → rails_app}/config/initializers/backtrace_silencers.rb +0 -0
  345. /data/spec/{rails3 → rails_app}/config/initializers/inflections.rb +0 -0
  346. /data/spec/{rails3 → rails_app}/config/initializers/mime_types.rb +0 -0
  347. /data/spec/{rails3 → rails_app}/config/initializers/secret_token.rb +0 -0
  348. /data/spec/{rails3 → rails_app}/config/locales/en.yml +0 -0
  349. /data/spec/{rails3 → rails_app}/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
  350. /data/spec/{rails3 → rails_app}/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
  351. /data/spec/{rails3 → rails_app}/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
  352. /data/spec/{rails3 → rails_app}/db/schema.rb +0 -0
  353. /data/spec/{rails3 → rails_app}/db/seeds.rb +0 -0
data/README.md ADDED
@@ -0,0 +1,372 @@
1
+ [![Build Status](https://travis-ci.org/NoamB/sorcery.svg?branch=master)](https://travis-ci.org/NoamB/sorcery)
2
+ [![Code Climate](https://codeclimate.com/github/NoamB/sorcery.png)](https://codeclimate.com/github/NoamB/sorcery)
3
+ [![Inline docs](http://inch-ci.org/github/NoamB/sorcery.png?branch=master)](http://inch-ci.org/github/NoamB/sorcery)
4
+
5
+ # sorcery
6
+ Magical Authentication for Rails 3 and 4. Supports ActiveRecord,
7
+ DataMapper, Mongoid and MongoMapper.
8
+
9
+ Inspired by restful_authentication, Authlogic and Devise. Crypto code taken
10
+ almost unchanged from Authlogic. OAuth code inspired by OmniAuth and Ryan
11
+ Bates's railscasts about it.
12
+
13
+ **What's happening now?** We are working on 1.0 version, which will include some API-breaking changes. It should be released about April 2015.
14
+ Until then we'll continue releasing `0.9.x` version with bug fixed.
15
+
16
+ **Rails 4 status:** [Sorcery 0.9.0](http://rubygems.org/gems/sorcery/versions/0.9.0) is fully tested and ready for Rails 4.0, 4.1 and 4.2.
17
+ **Mongoid status:** Version 0.9.0 works with Mongoid 4.
18
+
19
+ https://github.com/NoamB/sorcery/wiki/Simple-Password-Authentication
20
+
21
+ ## Philosophy
22
+
23
+ Sorcery is a stripped-down, bare-bones authentication library, with which you
24
+ can write your own authentication flow. It was built with a few goals in mind:
25
+
26
+ * Less is more - less than 20 public methods to remember for the entire
27
+ feature-set make the lib easy to 'get'.
28
+ * No built-in or generated code - use the library's methods inside *your
29
+ own* MVC structures, and don't fight to fix someone else's.
30
+ * Magic yes, Voodoo no - the lib should be easy to hack for most developers.
31
+ * Configuration over Confusion - Centralized (1 file), Simple & short
32
+ configuration as possible, not drowning in syntactic sugar.
33
+ * Keep MVC cleanly separated - DB is for models, sessions are for
34
+ controllers. Models stay unaware of sessions.
35
+
36
+
37
+ Hopefully, I've achieved this. If not, let me know.
38
+
39
+ ## Useful Links
40
+
41
+ [Documentation](http://rubydoc.info/gems/sorcery) |
42
+ [Railscast](http://railscasts.com/episodes/283-authentication-with-sorcery) | [Simple tutorial](https://github.com/NoamB/sorcery/wiki/Simple-Password-Authentication) | [Example Rails 3 app](https://github.com/NoamB/sorcery-example-app)
43
+
44
+ Check out the tutorials in the [Wiki](https://github.com/NoamB/sorcery/wiki) for more!
45
+
46
+ ## API Summary
47
+
48
+ Below is a summary of the library methods. Most method names are self
49
+ explaining and the rest are commented:
50
+
51
+
52
+ ### core
53
+ ```ruby
54
+ require_login # this is a before filter
55
+ login(email, password, remember_me = false)
56
+ auto_login(user)# login without credentials
57
+ logout
58
+ logged_in? # available to view
59
+ current_user # available to view
60
+ redirect_back_or_to # used when a user tries to access a page while logged out, is asked to login, and we want to return him back to the page he originally wanted.
61
+ @user.external? # external users, such as facebook/twitter etc.
62
+ @user.active_for_authentication? # add this method to define behaviour that will prevent selected users from signing in
63
+ User.authenticates_with_sorcery!
64
+ ```
65
+
66
+ ### http basic auth
67
+ ```ruby
68
+ require_login_from_http_basic # this is a before filter
69
+ ```
70
+
71
+ ### external
72
+ ```ruby
73
+ login_at(provider) # sends the user to an external service (twitter etc.) to authenticate.
74
+ login_from(provider) # tries to login from the external provider's callback.
75
+ create_from(provider) # create the user in the local app db.
76
+ ```
77
+
78
+ ### remember me
79
+ ```ruby
80
+ auto_login(user, should_remember=false) # login without credentials, optional remember_me
81
+ remember_me!
82
+ forget_me!
83
+ ```
84
+
85
+ ### reset password
86
+ ```ruby
87
+ User.load_from_reset_password_token(token)
88
+ @user.generate_reset_password_token! # if you want to send the email by youself
89
+ @user.deliver_reset_password_instructions! # generates the token and sends the email
90
+ @user.change_password!(new_password)
91
+ ```
92
+
93
+ ### user activation
94
+ ```ruby
95
+ User.load_from_activation_token(token)
96
+ @user.setup_activation
97
+ @user.activate!
98
+ ```
99
+
100
+ Please see the tutorials in the github wiki for detailed usage information.
101
+
102
+ ## Installation
103
+
104
+ If using bundler, first add 'sorcery' to your Gemfile:
105
+
106
+ ```ruby
107
+ gem "sorcery"
108
+ ```
109
+
110
+ And run
111
+
112
+ ```ruby
113
+ bundle install
114
+ ```
115
+
116
+ Otherwise simply
117
+
118
+ ```ruby
119
+ gem install sorcery
120
+ ```
121
+
122
+ ## Rails configuration
123
+
124
+ ```bash
125
+ rails generate sorcery:install
126
+ ```
127
+
128
+ This will generate the core migration file, the initializer file and the
129
+ 'User' model class.
130
+
131
+ ```bash
132
+ rails generate sorcery:install remember_me reset_password
133
+ ```
134
+
135
+ This will generate the migrations files for remember_me and reset_password
136
+ submodules and will create the initializer file (and add submodules to it),
137
+ and create the 'User' model class.
138
+
139
+ ```bash
140
+ rails generate sorcery:install --model Person
141
+ ```
142
+
143
+ This will generate the core migration file, the initializer and change the
144
+ model class (in the initializer and migration files) to the class 'Person'
145
+ (and its pluralized version, 'people')
146
+
147
+ ```bash
148
+ rails generate sorcery:install http_basic_auth external remember_me --only-submodules
149
+ ```
150
+
151
+ This will generate only the migration files for the specified submodules and
152
+ will add them to the initializer file.
153
+
154
+ Inside the initializer, the comments will tell you what each setting does.
155
+
156
+ ## DelayedJob Integration
157
+
158
+ By default emails are sent synchronously. You can send them asynchronously by
159
+ using the [delayed_job gem](https://github.com/collectiveidea/delayed_job).
160
+
161
+ After implementing the `delayed_job` into your project add the code below at
162
+ the end of the `config/initializers/sorcery.rb` file. After that all emails
163
+ will be sent asynchronously.
164
+
165
+ ```ruby
166
+ module Sorcery
167
+ module Model
168
+ module InstanceMethods
169
+ def generic_send_email(method, mailer)
170
+ config = sorcery_config
171
+ mail = config.send(mailer).delay.send(config.send(method), self)
172
+ end
173
+ end
174
+ end
175
+ end
176
+ ```
177
+
178
+ Sidekiq and Resque integrations are coming soon.
179
+
180
+ ## Single Table Inheritance (STI) Support
181
+ STI is supported via a single setting in config/initializers/sorcery.rb.
182
+
183
+ ## Full Features List by module
184
+
185
+ **Core** (see [lib/sorcery/model.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model.rb) and
186
+ [lib/sorcery/controller.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller.rb)):
187
+
188
+ * login/logout, optional return user to requested url on login, configurable
189
+ redirect for non-logged-in users.
190
+ * password encryption, algorithms: bcrypt(default), md5, sha1, sha256,
191
+ sha512, aes256, custom(yours!), none. Configurable stretches and salt.
192
+ * configurable attribute names for username, password and email.
193
+ * allow multiple fields to serve as username.
194
+
195
+
196
+ **User Activation** (see [lib/sorcery/model/submodules/user_activation.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/user_activation.rb)):
197
+
198
+ * User activation by email with optional success email.
199
+ * configurable attribute names.
200
+ * configurable mailer, method name, and attribute name.
201
+ * configurable temporary token expiration.
202
+ * Optionally prevent non-active users to login.
203
+
204
+
205
+ **Reset Password** (see [lib/sorcery/model/submodules/reset_password.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/reset_password.rb)):
206
+
207
+ * Reset password with email verification.
208
+ * configurable mailer, method name, and attribute name.
209
+ * configurable temporary token expiration.
210
+ * configurable time between emails (hammering protection).
211
+
212
+
213
+ **Remember Me** (see [lib/sorcery/model/submodules/remember_me.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/remember_me.rb)):
214
+
215
+ * Remember me with configurable expiration.
216
+ * configurable attribute names.
217
+
218
+
219
+ **Session Timeout** (see [lib/sorcery/controller/submodules/session_timeout.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller/submodules/session_timeout.rb)):
220
+
221
+ * Configurable session timeout.
222
+ * Optionally session timeout will be calculated from last user action.
223
+
224
+
225
+ **Brute Force Protection** (see [lib/sorcery/model/submodules/brute_force_protection.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/brute_force_protection.rb)):
226
+
227
+ * Brute force login hammering protection.
228
+ * configurable logins before lock and lock duration.
229
+
230
+
231
+ **Basic HTTP Authentication** (see [lib/sorcery/controller/submodules/http_basic_auth.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller/submodules/http_basic_auth.rb)):
232
+
233
+ * A before filter for requesting authentication with HTTP Basic.
234
+ * automatic login from HTTP Basic.
235
+ * automatic login is disabled if session key changed.
236
+
237
+
238
+ **Activity Logging** (see [lib/sorcery/model/submodules/activity_logging.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/activity_logging.rb)):
239
+
240
+ * automatic logging of last login, last logout, last activity time and IP
241
+ address for last login.
242
+ * an easy method of collecting the list of currently logged in users.
243
+ * configurable timeout by which to decide whether to include a user in the
244
+ list of logged in users.
245
+
246
+
247
+ **External** (see [lib/sorcery/controller/submodules/external.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller/submodules/external.rb)):
248
+
249
+ * OAuth1 and OAuth2 support (currently: Twitter, Facebook, Github, Google, Heroku,
250
+ LinkedIn, VK, LiveID, Xing, and Salesforce)
251
+ * configurable db field names and authentications table.
252
+
253
+
254
+ ## Next Planned Features
255
+
256
+ I've got some thoughts which include (unordered):
257
+
258
+ * Passing a block to encrypt, allowing the developer to define his own mix
259
+ of salting and encrypting
260
+ * Forgot username, maybe as part of the reset_password module
261
+ * Scoping logins (to a subdomain or another arbitrary field)
262
+ * Allowing storing the salt and crypted password in the same DB field for
263
+ extra security
264
+ * Other reset password strategies (security questions?)
265
+ * Other brute force protection strategies (captcha)
266
+
267
+
268
+ Have an idea? Let me know, and it might get into the gem!
269
+
270
+ ## Backward compatibility
271
+
272
+ While the lib is young and evolving fast I'm breaking backward compatibility
273
+ quite often. I'm constantly finding better ways to do things and throwing away
274
+ old ways. To let you know when things are changing in a non-compatible way,
275
+ I'm bumping the minor version of the gem. The patch version changes are
276
+ backward compatible.
277
+
278
+ In short, an app that works with x.3.1 should be able to upgrade to x.3.2 with
279
+ no code changes. The same cannot be said about upgrading to x.4.0 and above,
280
+ however.
281
+
282
+ ## DataMapper Support
283
+
284
+ Important notes:
285
+
286
+ * Expected to work with DM adapters: dm-mysql-adapter,
287
+ dm-redis-adapter.
288
+ * Submodules DM adapter dependent: activity_logging (dm-mysql-adapter)
289
+ * Usage: include DataMapper::Resource in user model, follow sorcery
290
+ instructions (remember to add property id, validators and accessor
291
+ attributes such as password and password_confirmation)
292
+ * Option downcase__username_before_authenticating and dm-mysql,
293
+ http://datamapper.lighthouseapp.com/projects/20609/tickets/1105-add-support-for-definingchanging-default-collation
294
+
295
+ ## Upgrading
296
+
297
+ Important notes while upgrading:
298
+
299
+ * If you are upgrading from <= **0.8.6** and you use Sorcery model methods in your app,
300
+ you might need to change them from `user.method` to `user.sorcery_adapter.method` and from
301
+ `User.method` to `User.sorcery_adapter_method`
302
+
303
+ * If you are upgrading from <= **0.8.5** and you're using Sorcery test helpers,
304
+ you need to change the way you include them to following code:
305
+
306
+ ```ruby
307
+ RSpec.configure do |config|
308
+ config.include Sorcery::TestHelpers::Rails::Controller, type: :controller
309
+ config.include Sorcery::TestHelpers::Rails::Integration, type: :feature
310
+ end
311
+ ```
312
+
313
+ * If are upgrading to **0.8.2** and use activity_logging feature with
314
+ ActiveRecord, you will have to add a new column
315
+ `last_login_from_ip_address`
316
+ [#465](https://github.com/NoamB/sorcery/issues/465)
317
+ * Sinatra support existed until **v0.7.0** (including), but was dropped
318
+ later due to being a maintenance nightmare.
319
+ * If upgrading from <= **0.6.1 to >= **0.7.0** you need to change
320
+ 'username
321
+ _attribute_name' to 'username_attribute_names' in initializer.
322
+ * If upgrading from <= **v0.5.1** to >= **v0.5.2** you need to explicitly
323
+ set your user_class model in the initializer file.
324
+
325
+ ```ruby
326
+ # This line must come after the 'user config' block.
327
+ config.user_class = User
328
+ ```
329
+
330
+
331
+ ## Contributing to sorcery
332
+
333
+ Your feedback is very welcome and will make this gem much much better for you,
334
+ me and everyone else. Besides feedback on code, features, suggestions and bug
335
+ reports, you may want to actually make an impact on the code. For this:
336
+
337
+ * Fork it.
338
+ * Fix it.
339
+ * Test it.
340
+ * Commit it.
341
+ * Send me a pull request so I'll... Pull it.
342
+
343
+
344
+ If you feel sorcery has made your life easier, and you would like to express
345
+ your thanks via a donation, my paypal email is in the contact details.
346
+
347
+ ## Contact
348
+
349
+ Feel free to ask questions using these contact details:
350
+
351
+ #### Noam Ben-Ari
352
+
353
+ email: nbenari@gmail.com ( also for paypal )
354
+
355
+ twitter: @nbenari
356
+
357
+ #### Kir Shatrov
358
+
359
+ email: shatrov@me.com
360
+
361
+ twitter: @Kiiiir
362
+
363
+ #### Grzegorz Witek
364
+
365
+ email: arnvald.to@gmail.com
366
+
367
+ twitter: @arnvald
368
+
369
+ ## Copyright
370
+
371
+ Copyright (c) 2010-2014 Noam Ben Ari (nbenari@gmail.com). See LICENSE.txt for
372
+ further details.
data/Rakefile CHANGED
@@ -1,81 +1,6 @@
1
- # require 'bundler'
2
- # -- Commented because it's slow
3
- # begin
4
- # Bundler.setup(:default, :development)
5
- # rescue Bundler::BundlerError => e
6
- # $stderr.puts e.message
7
- # $stderr.puts "Run `bundle install` to install missing gems"
8
- # exit e.status_code
9
- # end
10
- # --
1
+ require "bundler/gem_tasks"
11
2
 
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "sorcery"
18
- gem.homepage = "http://github.com/NoamB/sorcery"
19
- gem.license = "MIT"
20
- gem.summary = "Magical authentication for Rails 3 applications"
21
- gem.description = "Provides common authentication needs such as signing in/out, activating by email and resetting password."
22
- gem.email = "nbenari@gmail.com"
23
- gem.authors = ["Noam Ben Ari"]
24
- # Include your dependencies below. Runtime dependencies are required when using your gem,
25
- # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
26
- # gem.add_runtime_dependency 'jabber4r', '> 0.1'
27
- # gem.add_development_dependency 'rspec', '> 1.2.3'
28
- end
29
- Jeweler::RubygemsDotOrgTasks.new
30
-
31
- require 'rspec/core'
32
3
  require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
33
5
 
34
- RSpec::Core::RakeTask.new(:spec) do |spec|
35
- spec.pattern = FileList['spec/**/*_spec.rb']
36
- end
37
-
38
- require 'yard'
39
- YARD::Rake::YardocTask.new
40
-
41
- desc 'Default: Run all sorcery specs.'
42
- task :default => :all_sorcery_specs
43
-
44
- desc "Run all sorcery specs"
45
- task :all_sorcery_specs do
46
- # we need to be empty, otherwise bundler will use parent bundler.
47
- env = {
48
- 'BUNDLE_GEMFILE' => nil,
49
- 'GEM_HOME' => nil
50
- }
51
- Dir['spec/**/Rakefile'].each do |rakefile|
52
- directory_name = File.dirname(rakefile)
53
- system(env, "cd #{directory_name} && bundle && bundle exec rake")
54
- end
55
- end
56
-
57
- desc "Bundle all folders"
58
- task :bundle do
59
- sh "bundle"
60
- Dir['spec', 'spec/**'].each do |dir|
61
- if Dir.exists?(dir) && File.exists?(dir + "/Gemfile")
62
- sh <<-CMD
63
- cd #{dir}
64
- bundle
65
- CMD
66
- end
67
- end
68
- end
69
-
70
- desc "Bundle update all folders"
71
- task :bundle_update do
72
- sh "bundle update"
73
- Dir['spec', 'spec/**'].each do |dir|
74
- if Dir.exists?(dir) && File.exists?(dir + "/Gemfile")
75
- sh <<-CMD
76
- cd #{dir}
77
- bundle update
78
- CMD
79
- end
80
- end
81
- end
6
+ task :default => :spec
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'sqlite3', platform: :mri
4
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
5
+ gem 'rails', '~> 4.0.1'
6
+
7
+ gemspec path: '..'
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'sqlite3', platform: :mri
4
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
5
+ gem 'rails', '~> 4.1.0'
6
+
7
+ gemspec path: '..'
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '~> 4.0.0'
4
+
5
+ gem 'mongo_mapper', github: 'mongomapper/mongomapper'
6
+ gem 'sqlite3', platform: :mri
7
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
8
+
9
+ gemspec path: '..'
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '~> 4.1.0'
4
+
5
+ gem 'mongo_mapper', github: 'mongomapper/mongomapper'
6
+ gem 'sqlite3', platform: :mri
7
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
8
+
9
+ gemspec path: '..'
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '~> 4.0.0'
4
+
5
+ gem 'mongoid', '~> 4.0.0'
6
+ gem 'sqlite3', platform: :mri
7
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
8
+
9
+ gemspec path: '..'
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '~> 4.1.0'
4
+
5
+ gem 'mongoid', '~> 4.0.0'
6
+ gem 'sqlite3', platform: :mri
7
+ gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
8
+
9
+ gemspec path: '..'
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '~> 3.2.0'
4
+
5
+ gem 'mongoid', '~> 3.0'
6
+ gem 'bson_ext'
7
+ gem 'sqlite3'
8
+
9
+ gemspec path: '..'
@@ -16,7 +16,7 @@ Examples:
16
16
  This will generate the core migration file, the initializer and change the model class
17
17
  (in the initializer and migration files) to the class 'Person' (and it's pluralized version, 'people')
18
18
 
19
- rails generate sorcery:install http_basic_auth external remember_me --migrations
19
+ rails generate sorcery:install http_basic_auth external remember_me --only-submodules
20
20
 
21
21
  This will generate only the migration files for the specified submodules and will
22
22
  add them to the initializer file.
@@ -0,0 +1,40 @@
1
+ module Sorcery
2
+ module Generators
3
+ module Helpers
4
+ private
5
+
6
+ def sorcery_config_path
7
+ "config/initializers/sorcery.rb"
8
+ end
9
+
10
+ # Either return the model passed in a classified form or return the default "User".
11
+ def model_class_name
12
+ options[:model] ? options[:model].classify : "User"
13
+ end
14
+
15
+ def model_path
16
+ @model_path ||= File.join("app", "models", "#{file_path}.rb")
17
+ end
18
+
19
+ def file_path
20
+ model_name.underscore
21
+ end
22
+
23
+ def namespace
24
+ Rails::Generators.namespace if Rails::Generators.respond_to?(:namespace)
25
+ end
26
+
27
+ def namespaced?
28
+ !!namespace
29
+ end
30
+
31
+ def model_name
32
+ if namespaced?
33
+ [namespace.to_s] + [model_class_name]
34
+ else
35
+ [model_class_name]
36
+ end.join("::")
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,24 +1,35 @@
1
1
  require 'rails/generators/migration'
2
+ require 'generators/sorcery/helpers'
2
3
 
3
4
  module Sorcery
4
5
  module Generators
5
6
  class InstallGenerator < Rails::Generators::Base
6
7
  include Rails::Generators::Migration
7
-
8
+ include Sorcery::Generators::Helpers
9
+
8
10
  source_root File.expand_path('../templates', __FILE__)
9
-
11
+
10
12
  argument :submodules, :optional => true, :type => :array, :banner => "submodules"
11
-
13
+
12
14
  class_option :model, :optional => true, :type => :string, :banner => "model",
13
15
  :desc => "Specify the model class name if you will use anything other than 'User'"
14
-
16
+
15
17
  class_option :migrations, :optional => true, :type => :boolean, :banner => "migrations",
18
+ :desc => "[DEPRECATED] Please use --only-submodules option instead"
19
+
20
+ class_option :only_submodules, :optional => true, :type => :boolean, :banner => "only-submodules",
16
21
  :desc => "Specify if you want to add submodules to an existing model\n\t\t\t # (will generate migrations files, and add submodules to config file)"
17
-
18
-
22
+
23
+
24
+ def check_deprecated_options
25
+ if options[:migrations]
26
+ warn("[DEPRECATED] `--migrations` option is deprecated, please use `--only-submodules` instead")
27
+ end
28
+ end
29
+
19
30
  # Copy the initializer file to config/initializers folder.
20
31
  def copy_initializer_file
21
- template "initializer.rb", "config/initializers/sorcery.rb" unless options[:migrations]
32
+ template "initializer.rb", sorcery_config_path unless only_submodules?
22
33
  end
23
34
 
24
35
  def configure_initializer_file
@@ -26,24 +37,33 @@ module Sorcery
26
37
  if submodules
27
38
  submodule_names = submodules.collect{ |submodule| ':' + submodule }
28
39
 
29
- gsub_file "config/initializers/sorcery.rb", /submodules = \[.*\]/ do |str|
40
+ gsub_file sorcery_config_path, /submodules = \[.*\]/ do |str|
30
41
  current_submodule_names = (str =~ /\[(.*)\]/ ? $1 : '').delete(' ').split(',')
31
42
  "submodules = [#{(current_submodule_names | submodule_names).join(', ')}]"
32
43
  end
33
44
  end
45
+ end
34
46
 
35
- # Generate the model and add 'authenticates_with_sorcery!' unless you passed --migrations
36
- unless options[:migrations]
47
+ def configure_model
48
+ # Generate the model and add 'authenticates_with_sorcery!' unless you passed --only-submodules
49
+ unless only_submodules?
37
50
  generate "model #{model_class_name} --skip-migration"
38
- insert_into_file "app/models/#{model_class_name.underscore}.rb", " authenticates_with_sorcery!\n", :after => "class #{model_class_name} < ActiveRecord::Base\n"
51
+
52
+ inject_sorcery_to_model
39
53
  end
40
54
  end
41
55
 
56
+ def inject_sorcery_to_model
57
+ indents = " " * (namespaced? ? 2 : 1)
58
+
59
+ inject_into_class(model_path, model_class_name, "#{indents}authenticates_with_sorcery!\n")
60
+ end
61
+
42
62
  # Copy the migrations files to db/migrate folder
43
63
  def copy_migration_files
44
- # Copy core migration file in all cases except when you pass --migrations.
64
+ # Copy core migration file in all cases except when you pass --only-submodules.
45
65
  return unless defined?(Sorcery::Generators::InstallGenerator::ActiveRecord)
46
- migration_template "migration/core.rb", "db/migrate/sorcery_core.rb" unless options[:migrations]
66
+ migration_template "migration/core.rb", "db/migrate/sorcery_core.rb" unless only_submodules?
47
67
 
48
68
  if submodules
49
69
  submodules.each do |submodule|
@@ -52,10 +72,9 @@ module Sorcery
52
72
  end
53
73
  end
54
74
  end
55
-
56
75
 
57
76
  end
58
-
77
+
59
78
  # Define the next_migration_number method (necessary for the migration_template method to work)
60
79
  def self.next_migration_number(dirname)
61
80
  if ActiveRecord::Base.timestamped_migrations
@@ -65,13 +84,12 @@ module Sorcery
65
84
  "%.3d" % (current_migration_number(dirname) + 1)
66
85
  end
67
86
  end
68
-
69
- private
70
87
 
71
- # Either return the model passed in a classified form or return the default "User".
72
- def model_class_name
73
- options[:model] ? options[:model].classify : "User"
88
+ private
89
+ def only_submodules?
90
+ options[:migrations] || options[:only_submodules]
74
91
  end
92
+
75
93
  end
76
94
  end
77
95
  end