user_plane 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +30 -0
  4. data/app/assets/javascripts/user_plane/application.js +13 -0
  5. data/app/assets/stylesheets/user_plane/application.css +15 -0
  6. data/app/concerns/null_object_persistable.rb +62 -0
  7. data/app/controllers/user/confirm_email_addresses_controller.rb +17 -0
  8. data/app/controllers/user/details_controller.rb +48 -0
  9. data/app/controllers/user/invites_controller.rb +69 -0
  10. data/app/controllers/user/reset_passwords_controller.rb +50 -0
  11. data/app/controllers/user/sign_ins_controller.rb +53 -0
  12. data/app/controllers/user/sign_ups_controller.rb +47 -0
  13. data/app/controllers/user_plane/application_controller.rb +5 -0
  14. data/app/helpers/user_plane/application_helper.rb +4 -0
  15. data/app/mailers/user_plane/application_mailer.rb +8 -0
  16. data/app/mailers/user_plane/invite_mailer.rb +14 -0
  17. data/app/mailers/user_plane/verification_mailer.rb +25 -0
  18. data/app/models/session_manager.rb +100 -0
  19. data/app/models/user.rb +5 -0
  20. data/app/models/user/account.rb +26 -0
  21. data/app/models/user/confirm_email_address.rb +55 -0
  22. data/app/models/user/guest.rb +18 -0
  23. data/app/models/user/identities.rb +5 -0
  24. data/app/models/user/identities/email.rb +98 -0
  25. data/app/models/user/identities/email_verification.rb +70 -0
  26. data/app/models/user/identities/facebook.rb +5 -0
  27. data/app/models/user/identities/github.rb +5 -0
  28. data/app/models/user/identities/id_token.rb +7 -0
  29. data/app/models/user/identities/o_auth.rb +67 -0
  30. data/app/models/user/identities/o_auth_endpoint.rb +28 -0
  31. data/app/models/user/identities/twitter.rb +5 -0
  32. data/app/models/user/identity.rb +26 -0
  33. data/app/models/user/reset_password.rb +59 -0
  34. data/app/models/user/send_password_reset.rb +25 -0
  35. data/app/models/user/send_sign_up_invite.rb +27 -0
  36. data/app/models/user/sign_in.rb +42 -0
  37. data/app/models/user/sign_up.rb +47 -0
  38. data/app/models/user/sign_up_invites.rb +5 -0
  39. data/app/models/user/sign_up_invites/invite.rb +46 -0
  40. data/app/models/user/sign_up_invites/stack.rb +22 -0
  41. data/app/models/user/sign_up_with_invite.rb +45 -0
  42. data/app/models/user/suspension.rb +7 -0
  43. data/app/models/user/update_details.rb +103 -0
  44. data/app/views/layouts/user_plane/application.html.erb +14 -0
  45. data/app/views/user/details/edit.html.erb +37 -0
  46. data/app/views/user/invites/edit.html.erb +34 -0
  47. data/app/views/user/invites/new.html.erb +21 -0
  48. data/app/views/user/reset_passwords/edit.html.erb +26 -0
  49. data/app/views/user/reset_passwords/new.html.erb +21 -0
  50. data/app/views/user/sign_ins/new.html.erb +25 -0
  51. data/app/views/user/sign_ups/new.html.erb +33 -0
  52. data/app/views/user_plane/invite_mailer/invite.html.erb +2 -0
  53. data/app/views/user_plane/invite_mailer/invite.text.erb +3 -0
  54. data/app/views/user_plane/verification_mailer/address_verification.html.erb +2 -0
  55. data/app/views/user_plane/verification_mailer/address_verification.text.erb +4 -0
  56. data/app/views/user_plane/verification_mailer/password_reset.html.erb +2 -0
  57. data/app/views/user_plane/verification_mailer/password_reset.text.erb +4 -0
  58. data/config/initializers/inflections.rb +3 -0
  59. data/config/locales/en.yml +63 -0
  60. data/config/locales/it.yml +62 -0
  61. data/config/routes.rb +5 -0
  62. data/db/migrate/20121128143404_create_user_accounts.rb +11 -0
  63. data/db/migrate/20121226202553_create_user_identities_o_auths.rb +12 -0
  64. data/db/migrate/20121226203032_create_user_identities_emails.rb +13 -0
  65. data/db/migrate/20121227144617_create_user_identities_email_verifications.rb +15 -0
  66. data/db/migrate/20130113120152_create_user_identities_id_tokens.rb +12 -0
  67. data/db/migrate/20141025230304_create_user_sign_up_invites_stacks.rb +10 -0
  68. data/db/migrate/20141025230500_create_user_sign_up_invites_invites.rb +13 -0
  69. data/db/migrate/20141026230208_create_user_suspensions.rb +13 -0
  70. data/lib/generators/user_plane/view/details_generator.rb +22 -0
  71. data/lib/generators/user_plane/view/helpers.rb +68 -0
  72. data/lib/generators/user_plane/view/invites_generator.rb +23 -0
  73. data/lib/generators/user_plane/view/reset_passwords_generator.rb +22 -0
  74. data/lib/generators/user_plane/view/sign_ins_generator.rb +18 -0
  75. data/lib/generators/user_plane/view/sign_ups_generator.rb +22 -0
  76. data/lib/generators/user_plane/views_generator.rb +32 -0
  77. data/lib/tasks/user_plane_tasks.rake +4 -0
  78. data/lib/user_plane.rb +43 -0
  79. data/lib/user_plane/command.rb +24 -0
  80. data/lib/user_plane/engine.rb +27 -0
  81. data/lib/user_plane/fresh_validator.rb +9 -0
  82. data/lib/user_plane/omniauth.rb +50 -0
  83. data/lib/user_plane/redirect_to_sign_in.rb +22 -0
  84. data/lib/user_plane/route_concerns.rb +167 -0
  85. data/lib/user_plane/session_manager_concern.rb +9 -0
  86. data/lib/user_plane/signed_in_constraint.rb +11 -0
  87. data/lib/user_plane/token_segment.rb +52 -0
  88. data/lib/user_plane/version.rb +3 -0
  89. data/spec/controllers/user/confirm_email_addresses_controller_spec.rb +5 -0
  90. data/spec/controllers/user/details_controller_spec.rb +5 -0
  91. data/spec/controllers/user/invites_controller_spec.rb +19 -0
  92. data/spec/controllers/user/reset_passwords_controller_spec.rb +5 -0
  93. data/spec/controllers/user/sign_ins_controller_spec.rb +34 -0
  94. data/spec/controllers/user/sign_ups_controller_spec.rb +5 -0
  95. data/spec/dummy/README.rdoc +28 -0
  96. data/spec/dummy/Rakefile +6 -0
  97. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  98. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  99. data/spec/dummy/app/controllers/application_controller.rb +7 -0
  100. data/spec/dummy/app/controllers/welcome_controller.rb +3 -0
  101. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  102. data/spec/dummy/app/views/layouts/application.html.erb +30 -0
  103. data/spec/dummy/app/views/welcome/index.html.erb +1 -0
  104. data/spec/dummy/bin/bundle +3 -0
  105. data/spec/dummy/bin/rails +4 -0
  106. data/spec/dummy/bin/rake +4 -0
  107. data/spec/dummy/config.ru +4 -0
  108. data/spec/dummy/config/application.rb +30 -0
  109. data/spec/dummy/config/boot.rb +5 -0
  110. data/spec/dummy/config/database.yml +49 -0
  111. data/spec/dummy/config/environment.rb +5 -0
  112. data/spec/dummy/config/environments/development.rb +37 -0
  113. data/spec/dummy/config/environments/production.rb +78 -0
  114. data/spec/dummy/config/environments/test.rb +39 -0
  115. data/spec/dummy/config/initializers/assets.rb +8 -0
  116. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  117. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  118. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  119. data/spec/dummy/config/initializers/inflections.rb +16 -0
  120. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  121. data/spec/dummy/config/initializers/session_store.rb +3 -0
  122. data/spec/dummy/config/initializers/user_plane.rb +5 -0
  123. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  124. data/spec/dummy/config/locales/en.yml +23 -0
  125. data/spec/dummy/config/routes.rb +43 -0
  126. data/spec/dummy/config/secrets.yml +22 -0
  127. data/spec/dummy/db/schema.rb +101 -0
  128. data/spec/dummy/log/development.log +0 -0
  129. data/spec/dummy/log/test.log +20185 -0
  130. data/spec/dummy/public/404.html +67 -0
  131. data/spec/dummy/public/422.html +67 -0
  132. data/spec/dummy/public/500.html +66 -0
  133. data/spec/dummy/public/favicon.ico +0 -0
  134. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/-pOuxJZhYk_qXqMNKgm23KfvzyUW71NynNLlcNBOubE.cache +0 -0
  135. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/3AV9ywHBH56Leqey5LeznxK9vu4HD8fF3zSTk4MiDJA.cache +1 -0
  136. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/5fzR1G0D8ukHkPkLXsUu6rP6qV82aIdx3hugKkDy6nM.cache +0 -0
  137. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/9bKtJ2lkHPqtboGfbyknZ1OyH4xYO-aml7U3qhv-3kk.cache +0 -0
  138. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/HjDmE9SFP2wimdNHU8Nff9cm3vFZ5soO1iw7Jdlb6z8.cache +0 -0
  139. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/J9j6OdatarYW7VzVCVttmGphOhJKL0QXasdheyrgsTE.cache +2 -0
  140. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/KqrOQSlg0Th0N3XXx-h4p5BVJCfN0D8rRLoA9VxvXrc.cache +1 -0
  141. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/UCB1W65KwVU8ttOY8jnPRDp8HyyYYEjeTwwPD6R4qy8.cache +1 -0
  142. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/YmMSaaBmIcNZWPVF9jXcGBi-kwEzMuxzwPT_Zrcj1Bo.cache +2 -0
  143. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/g3wU8ajFWb5ZLPvujEt5l9DesbFCiAwqjx1WQgwTtHA.cache +1 -0
  144. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/i5pp88VHKoqlxQJdgmQd_lkgX1-4em_uHqNDjQ4nyHA.cache +0 -0
  145. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jL74yXjxf8cb6Olkjbw1C28MH_HbZe221l8AI6WVeH0.cache +3 -0
  146. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/puh7X4rfS3eDN9oHTXoQdAgqxivonrwAAdYZ4UB3GIg.cache +1 -0
  147. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qxPWFIWnE6gOCY-SsdBJe7Cgm5D3YUwaEne78Y7XdRg.cache +1 -0
  148. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rM9s67WgzKMZ1bRhUdA0yhPZDlyRE5a1kmdt7cS6m4c.cache +3 -0
  149. data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rVoG8EHlrCOgY4ZkzOj64f0jiTcbteQ_SYNzq9RqY0I.cache +0 -0
  150. data/spec/fabricators/user_account_fabricator.rb +11 -0
  151. data/spec/fabricators/user_guest_fabricator.rb +2 -0
  152. data/spec/fabricators/user_identities_email_fabricator.rb +8 -0
  153. data/spec/fabricators/user_identities_email_verification_fabricator.rb +5 -0
  154. data/spec/fabricators/user_identities_id_token_fabricator.rb +2 -0
  155. data/spec/fabricators/user_sign_up_fabricator.rb +51 -0
  156. data/spec/fabricators/user_sign_up_invites_invite_fabricator.rb +3 -0
  157. data/spec/fabricators/user_sign_up_invites_stack_fabricator.rb +4 -0
  158. data/spec/fabricators/user_suspension_fabricator.rb +4 -0
  159. data/spec/fabricators/user_update_detail_fabricator.rb +2 -0
  160. data/spec/features/user_plane/user_plane_invites_spec.rb +31 -0
  161. data/spec/features/user_plane/user_plane_reset_passwords_spec.rb +31 -0
  162. data/spec/features/user_plane/user_plane_sign_ins_spec.rb +44 -0
  163. data/spec/features/user_plane/user_plane_signed_in_only_spec.rb +31 -0
  164. data/spec/features/user_plane/user_plane_update_details_spec.rb +43 -0
  165. data/spec/fixtures/user_plane/invite_mailer/invite +3 -0
  166. data/spec/fixtures/user_plane/verification_mailer/address_verification +3 -0
  167. data/spec/fixtures/user_plane/verification_mailer/password_reset +3 -0
  168. data/spec/lib/generators/views_generator_spec.rb +16 -0
  169. data/spec/lib/route_concerns_spec.rb +54 -0
  170. data/spec/mailers/previews/user_plane/invite_mailer_preview.rb +11 -0
  171. data/spec/mailers/previews/user_plane/verification_mailer_preview.rb +16 -0
  172. data/spec/mailers/user_plane/invite_mailer_spec.rb +25 -0
  173. data/spec/mailers/user_plane/verification_mailer_spec.rb +52 -0
  174. data/spec/models/session_manager_spec.rb +28 -0
  175. data/spec/models/user/account_spec.rb +26 -0
  176. data/spec/models/user/confirm_email_address_spec.rb +101 -0
  177. data/spec/models/user/guest_spec.rb +5 -0
  178. data/spec/models/user/identities/email_spec.rb +5 -0
  179. data/spec/models/user/identities/email_verification_spec.rb +42 -0
  180. data/spec/models/user/identities/facebook_spec.rb +5 -0
  181. data/spec/models/user/identities/github_spec.rb +5 -0
  182. data/spec/models/user/identities/id_token_spec.rb +5 -0
  183. data/spec/models/user/identities/o_auth_spec.rb +12 -0
  184. data/spec/models/user/identities/twitter_spec.rb +5 -0
  185. data/spec/models/user/reset_password_spec.rb +141 -0
  186. data/spec/models/user/send_password_reset_spec.rb +44 -0
  187. data/spec/models/user/send_sign_up_invite_spec.rb +30 -0
  188. data/spec/models/user/sign_in_spec.rb +31 -0
  189. data/spec/models/user/sign_up_invites/invite_spec.rb +13 -0
  190. data/spec/models/user/sign_up_invites/stack_spec.rb +21 -0
  191. data/spec/models/user/sign_up_spec.rb +58 -0
  192. data/spec/models/user/sign_up_with_invite_spec.rb +83 -0
  193. data/spec/models/user/suspension_spec.rb +5 -0
  194. data/spec/models/user/update_details_spec.rb +98 -0
  195. data/spec/routing/invites_spec.rb +49 -0
  196. data/spec/routing/reset_passwords_spec.rb +31 -0
  197. data/spec/routing/sign_ins_spec.rb +36 -0
  198. data/spec/routing/update_details_spec.rb +30 -0
  199. data/spec/shared_contexts/feature_helpers.rb +12 -0
  200. data/spec/shared_contexts/routing.rb +8 -0
  201. data/spec/shared_contexts/user.rb +67 -0
  202. data/spec/spec_helper.rb +38 -0
  203. data/spec/support/fabrication.rb +7 -0
  204. data/spec/support/omniauth.rb +4 -0
  205. metadata +770 -0
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe User::Suspension, :type => :model do
4
+ pending "add some examples to (or delete) #{__FILE__}"
5
+ end
@@ -0,0 +1,98 @@
1
+ require 'spec_helper'
2
+ require 'shared_contexts/user'
3
+
4
+ describe User::UpdateDetails do
5
+ include_context 'user'
6
+
7
+ let (:new_address) { Faker::Internet.safe_email }
8
+
9
+ it 'errors if the new email is already taken' do
10
+ conflicting_signup = Fabricate(:user_sign_up, email: new_address)
11
+ conflicting_signup.perform!
12
+
13
+ update_details = described_class.new(account: a_user, email: new_address)
14
+
15
+ expect(update_details).not_to be_valid
16
+ end
17
+
18
+ context 'after changing the email address' do
19
+
20
+ let! (:old_address) { a_user.email.address }
21
+ let! (:old_login_token) {a_user.email.serialize}
22
+
23
+ subject (:update_details) {described_class.new(account: a_user, email: new_address)}
24
+
25
+ let! :email_verification do
26
+ update_details.perform!
27
+ verification = update_details.email_verification
28
+ a_user.reload
29
+ verification
30
+ end
31
+
32
+
33
+ it 'updates the address once verified' do
34
+ User::Identities::Email.verify_address! email_verification.token
35
+ a_user.reload
36
+ expect(a_user.email.address).to eql(new_address)
37
+ end
38
+
39
+ it 'does not take effect until verified' do
40
+ expect(a_user.email.address).to eql(old_address)
41
+ end
42
+
43
+ context 'the old login token' do
44
+
45
+ it 'expires when the address is confirmed' do
46
+ User::Identities::Email.verify_address! email_verification.token
47
+ a_user.reload
48
+ expect { User::Identity.deserialize!(old_login_token) }.to raise_error
49
+ end
50
+
51
+ it 'is sitll valid before the change is confirmed' do
52
+ expect { User::Identity.deserialize!(old_login_token) }.not_to raise_error
53
+ end
54
+ end
55
+ end
56
+
57
+ context 'when updating the password' do
58
+ let! (:current_password) { a_user.email.password }
59
+
60
+ context 'providing the current password' do
61
+ subject :update_details do
62
+ described_class.new(account: a_user,
63
+ current_password: current_password,
64
+ password: new_password,
65
+ password_confirmation: new_password)
66
+ end
67
+
68
+ it {is_expected.to be_valid}
69
+
70
+ it 'can be used to log in' do
71
+ update_details.perform!
72
+ expect(a_user.email.authenticate(new_password)).not_to be false
73
+ end
74
+ end
75
+
76
+ context 'providing the wrong password' do
77
+ subject :update_details do
78
+ described_class.new(account: a_user,
79
+ current_password: 'not the old password',
80
+ password: new_password,
81
+ password_confirmation: new_password)
82
+ end
83
+
84
+ it {is_expected.not_to be_valid}
85
+
86
+ it 'the new password cannot be used to log in' do
87
+ expect {update_details.perform!}.to raise_error
88
+ expect(a_user.email.authenticate(new_password)).to be false
89
+ end
90
+
91
+ it 'the old password can still be used to log in' do
92
+ expect {update_details.perform!}.to raise_error
93
+ expect(a_user.email.authenticate(current_password)).not_to be false
94
+ end
95
+ end
96
+ end
97
+
98
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+ require 'shared_contexts/user'
3
+ require 'shared_contexts/routing'
4
+
5
+ describe "routest for Invite" do
6
+ include_context 'user'
7
+ include_context 'routing'
8
+
9
+ context 'redeeming' do
10
+ subject :sign_up_with_invite do
11
+ User::SignUpWithInvite.new(invite: a_sign_up_invite)
12
+ end
13
+
14
+
15
+ it "is routed" do
16
+ path = polymorphic_path([:edit, sign_up_with_invite])
17
+ expect(get: path).to route_to("user/invites#edit", code: a_sign_up_invite.code)
18
+ end
19
+
20
+ it "can be routed with the oauth callback path" do
21
+ path = polymorphic_path([:edit, sign_up_with_invite, User::Identities::OAuthEndpoint.new(:facebook)])
22
+ expect(get: path).to route_to("user/invites#oauth_callback",
23
+ sign_up_with_invite_code: a_sign_up_invite.code,
24
+ provider: 'facebook',
25
+ on: :member)
26
+ end
27
+
28
+ it "can be routed with the oauth request path" do
29
+ path = polymorphic_path([sign_up_with_invite, User::Identities::OAuthEndpoint.new(:facebook)])
30
+ expect(get: path).to route_to("user/invites#oauth_request",
31
+ sign_up_with_invite_code: a_sign_up_invite.code,
32
+ provider: 'facebook',
33
+ on: :member)
34
+ end
35
+ end
36
+
37
+ context 'creating' do
38
+ subject :send_sign_up_invite do
39
+ User::SendSignUpInvite.new(recipient: Faker::Internet.safe_email)
40
+ end
41
+
42
+ it "routes sending sign up invites" do
43
+ path = polymorphic_path([send_sign_up_invite], action: :new)
44
+ passing_signed_in_constraint
45
+ expect(get: path).to route_to("user/invites#new")
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'shared_contexts/user'
3
+
4
+ describe "routest for ResetPassword" do
5
+ include_context 'user'
6
+
7
+ context 'sending' do
8
+ subject :send_password_reset do
9
+ User::SendPasswordReset.new(recipient: a_user.email.address)
10
+ end
11
+
12
+ it "routes sending password reset codes" do
13
+ path = polymorphic_path([send_password_reset], action: :new)
14
+ expect(get: path).to route_to("user/reset_passwords#new")
15
+ end
16
+ end
17
+
18
+ context 'redeeming' do
19
+
20
+ subject :reset_password do
21
+ User::ResetPassword.new(verification: a_user.email.reset_password!)
22
+ end
23
+
24
+ it "is routed" do
25
+ path = polymorphic_path([:edit, reset_password])
26
+ expect(get: path).to route_to("user/reset_passwords#edit", code: reset_password.code)
27
+ end
28
+ end
29
+
30
+
31
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'shared_contexts/user'
3
+
4
+ describe "routes for SignIn" do
5
+ include_context 'user'
6
+
7
+ it "routes to the sign in page" do
8
+ path = polymorphic_path([:new, User::SignIn.new])
9
+ expect(get: path).to route_to('user/sign_ins#new')
10
+ end
11
+
12
+ it "routes when posting the sign in" do
13
+ path = polymorphic_path([User::SignIn.new])
14
+ expect(post: path).to route_to('user/sign_ins#create')
15
+ end
16
+
17
+ it "routes to the oauth request endpoint" do
18
+ endpoint = User::Identities::OAuthEndpoint.new(:facebook)
19
+ # TODO: Would be nice to use User::SignIn as the collection token, rather
20
+ # than it's model name as a symbol.
21
+ path = polymorphic_path([:user_sign_in, endpoint])
22
+
23
+ expect(get: path).to route_to('user/sign_ins#oauth_request',
24
+ on: :collection,
25
+ provider: 'facebook')
26
+ end
27
+
28
+ it "routes to the oauth callback endpoint" do
29
+ endpoint = User::Identities::OAuthEndpoint.new(:facebook)
30
+ path = polymorphic_path([:user_sign_in, endpoint], action: :edit)
31
+ expect(get: path).to route_to('user/sign_ins#oauth_callback',
32
+ on: :collection,
33
+ provider: 'facebook')
34
+ end
35
+
36
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'shared_contexts/user'
3
+ require 'shared_contexts/routing'
4
+
5
+
6
+
7
+ describe "routest for UpdateDetails" do
8
+ include_context 'user'
9
+ include_context 'routing'
10
+
11
+ context 'updating details' do
12
+
13
+ subject :update_details do
14
+ User::UpdateDetails.new
15
+ end
16
+
17
+ it "is available once signed in" do
18
+ path = polymorphic_path(User::UpdateDetails.new, action: :edit)
19
+ passing_signed_in_constraint
20
+ expect(get: path).to route_to('user/details#edit')
21
+ end
22
+
23
+ it "is not available when not signed in" do
24
+ path = polymorphic_path(User::UpdateDetails.new, action: :edit)
25
+ expect(get: path).not_to be_routable
26
+ end
27
+ end
28
+
29
+
30
+ end
@@ -0,0 +1,12 @@
1
+ RSpec.shared_context 'feature_helpers' do
2
+
3
+ # TODO: find a better way to mock being signed in
4
+ def sign_in(account)
5
+ visit polymorphic_path([User::SignIn.new], action: :new)
6
+
7
+ fill_in 'Email', with: account.email.address
8
+ fill_in 'Password', with: account.email.password
9
+ click_button 'Sign In'
10
+ end
11
+
12
+ end
@@ -0,0 +1,8 @@
1
+ RSpec.shared_context 'routing' do
2
+
3
+ # TODO: find a better way to mock being signed in
4
+ def passing_signed_in_constraint
5
+ expect_any_instance_of(SessionManager).to receive(:signed_in?).and_return(:true)
6
+ allow_any_instance_of(SessionManager).to receive(:refresh!)
7
+ end
8
+ end
@@ -0,0 +1,67 @@
1
+ RSpec.shared_context 'user' do
2
+
3
+ def make_singed_up_user
4
+ sign_up = Fabricate(:user_sign_up)
5
+ sign_up.perform!
6
+ sign_up.account
7
+ end
8
+
9
+ let(:a_user) {make_singed_up_user}
10
+
11
+ def perform_signup_via_oatuh
12
+ sign_up = Fabricate(:oauth_user_sign_up)
13
+ sign_up.perform!
14
+ return sign_up
15
+ end
16
+
17
+ let(:an_oauth_sign_up) {perform_signup_via_oatuh}
18
+
19
+ let (:new_password) { 'new shiny password' }
20
+
21
+ let :invite_recipient_user_name do
22
+ Faker::Internet.user_name
23
+ end
24
+
25
+ let :invite_recipient do
26
+ "#{invite_recipient_user_name}@example.com"
27
+ end
28
+
29
+ let :a_sign_up_invite do
30
+ User::SignUpInvites::Invite.create(sender: make_singed_up_user,
31
+ recipient: invite_recipient)
32
+ end
33
+
34
+ let :facebook_oauth_data do
35
+ oauth_data = {provider: 'facebook',
36
+ uid: '1234567',
37
+ info: {
38
+ nickname: 'jbloggs',
39
+ email: 'joe@bloggs.com',
40
+ name: 'Joe Bloggs',
41
+ first_name: 'Joe',
42
+ last_name: 'Bloggs',
43
+ image: 'http://graph.facebook.com/1234567/picture?type=square',
44
+ urls: { :Facebook => 'http://www.facebook.com/jbloggs' },
45
+ location: 'Palo Alto, California',
46
+ verified: true},
47
+ credentials: {
48
+ token: 'ABCDEF...', # OAuth 2.0 access_token, which you may wish to store
49
+ expires_at: 1321747205, # when the access token expires (it always will)
50
+ expires: true}, # this will always be true
51
+ extra: {
52
+ raw_info: {
53
+ id: '1234567',
54
+ name: 'Joe Bloggs',
55
+ first_name: 'Joe',
56
+ last_name: 'Bloggs',
57
+ link: 'http://www.facebook.com/jbloggs',
58
+ username: 'jbloggs',
59
+ location: { id: '123456789', name: 'Palo Alto, California' },
60
+ gender: 'male',
61
+ email: 'joe@bloggs.com',
62
+ timezone: -8,
63
+ locale: 'en_US',
64
+ verified: true,
65
+ updated_time: '2011-11-11T06:21:03+0000'}}}
66
+ end
67
+ end
@@ -0,0 +1,38 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
3
+ require 'rspec/rails'
4
+ require 'capybara/rspec'
5
+ require 'capybara/poltergeist'
6
+ require 'capybara/email/rspec'
7
+
8
+ require 'fabrication'
9
+ require 'timecop'
10
+ require 'pry'
11
+
12
+ require 'generator_spec'
13
+
14
+ Capybara.javascript_driver = :poltergeist
15
+
16
+ Rails.backtrace_cleaner.remove_silencers!
17
+ # Load support files
18
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
19
+
20
+ RSpec.configure do |config|
21
+ config.mock_with :rspec
22
+ config.use_transactional_fixtures = true
23
+ config.infer_base_class_for_anonymous_controllers = false
24
+ config.order = "random"
25
+ config.infer_spec_type_from_file_location!
26
+
27
+ config.before type: :controller do
28
+ routes { UserPlane::Engine.routes }
29
+ end
30
+
31
+ # These two have been switched on to test redirects:
32
+ Rails.application.config.consider_all_requests_local = true
33
+ Rails.application.config.action_dispatch.show_exceptions = true
34
+ end
35
+
36
+ RSpec::Rails::RoutingExampleGroup.include Rails.application.routes.url_helpers
37
+ RSpec::Rails::ControllerExampleGroup.include Rails.application.routes.url_helpers
38
+ Rails.configuration.action_mailer.default_url_options = { host: 'example.com' }
@@ -0,0 +1,7 @@
1
+ require 'faker'
2
+
3
+ Fabrication.configure do |config|
4
+ config.fabricator_path = "fabricators"
5
+ config.path_prefix = File.expand_path('../..', __FILE__)
6
+ config.sequence_start = 10000
7
+ end
@@ -0,0 +1,4 @@
1
+ require 'omniauth'
2
+ require 'omniauth-facebook'
3
+
4
+ OmniAuth.config.test_mode = true
metadata ADDED
@@ -0,0 +1,770 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: user_plane
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.15
5
+ platform: ruby
6
+ authors:
7
+ - Leandro Pedroni
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bcrypt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: imperator
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: email_validator
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: support_segment
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: omniauth-github
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: omniauth-facebook
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: omniauth-twitter
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pg
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec-rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: generator_spec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec-activemodel-mocks
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rspec-collection_matchers
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: capybara
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: capybara-email
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: launchy
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: poltergeist
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: brainsome_jasminerice
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: fabrication-rails
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: faker
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: timecop
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: rb-fsevent
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: guard-rspec
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - ">="
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :development
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ - !ruby/object:Gem::Dependency
336
+ name: thor
337
+ requirement: !ruby/object:Gem::Requirement
338
+ requirements:
339
+ - - ">="
340
+ - !ruby/object:Gem::Version
341
+ version: '0'
342
+ type: :development
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - ">="
347
+ - !ruby/object:Gem::Version
348
+ version: '0'
349
+ - !ruby/object:Gem::Dependency
350
+ name: guard-jasmine
351
+ requirement: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - ">="
354
+ - !ruby/object:Gem::Version
355
+ version: '0'
356
+ type: :development
357
+ prerelease: false
358
+ version_requirements: !ruby/object:Gem::Requirement
359
+ requirements:
360
+ - - ">="
361
+ - !ruby/object:Gem::Version
362
+ version: '0'
363
+ - !ruby/object:Gem::Dependency
364
+ name: pry
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - ">="
368
+ - !ruby/object:Gem::Version
369
+ version: '0'
370
+ type: :development
371
+ prerelease: false
372
+ version_requirements: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - ">="
375
+ - !ruby/object:Gem::Version
376
+ version: '0'
377
+ - !ruby/object:Gem::Dependency
378
+ name: pry-doc
379
+ requirement: !ruby/object:Gem::Requirement
380
+ requirements:
381
+ - - ">="
382
+ - !ruby/object:Gem::Version
383
+ version: '0'
384
+ type: :development
385
+ prerelease: false
386
+ version_requirements: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - ">="
389
+ - !ruby/object:Gem::Version
390
+ version: '0'
391
+ - !ruby/object:Gem::Dependency
392
+ name: pry-rescue
393
+ requirement: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - ">="
396
+ - !ruby/object:Gem::Version
397
+ version: '0'
398
+ type: :development
399
+ prerelease: false
400
+ version_requirements: !ruby/object:Gem::Requirement
401
+ requirements:
402
+ - - ">="
403
+ - !ruby/object:Gem::Version
404
+ version: '0'
405
+ - !ruby/object:Gem::Dependency
406
+ name: pry-byebug
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - ">="
410
+ - !ruby/object:Gem::Version
411
+ version: '0'
412
+ type: :development
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - ">="
417
+ - !ruby/object:Gem::Version
418
+ version: '0'
419
+ description: User component for Rails applications.
420
+ email:
421
+ - ilpoldo@gmail.com
422
+ executables: []
423
+ extensions: []
424
+ extra_rdoc_files: []
425
+ files:
426
+ - MIT-LICENSE
427
+ - Rakefile
428
+ - app/assets/javascripts/user_plane/application.js
429
+ - app/assets/stylesheets/user_plane/application.css
430
+ - app/concerns/null_object_persistable.rb
431
+ - app/controllers/user/confirm_email_addresses_controller.rb
432
+ - app/controllers/user/details_controller.rb
433
+ - app/controllers/user/invites_controller.rb
434
+ - app/controllers/user/reset_passwords_controller.rb
435
+ - app/controllers/user/sign_ins_controller.rb
436
+ - app/controllers/user/sign_ups_controller.rb
437
+ - app/controllers/user_plane/application_controller.rb
438
+ - app/helpers/user_plane/application_helper.rb
439
+ - app/mailers/user_plane/application_mailer.rb
440
+ - app/mailers/user_plane/invite_mailer.rb
441
+ - app/mailers/user_plane/verification_mailer.rb
442
+ - app/models/session_manager.rb
443
+ - app/models/user.rb
444
+ - app/models/user/account.rb
445
+ - app/models/user/confirm_email_address.rb
446
+ - app/models/user/guest.rb
447
+ - app/models/user/identities.rb
448
+ - app/models/user/identities/email.rb
449
+ - app/models/user/identities/email_verification.rb
450
+ - app/models/user/identities/facebook.rb
451
+ - app/models/user/identities/github.rb
452
+ - app/models/user/identities/id_token.rb
453
+ - app/models/user/identities/o_auth.rb
454
+ - app/models/user/identities/o_auth_endpoint.rb
455
+ - app/models/user/identities/twitter.rb
456
+ - app/models/user/identity.rb
457
+ - app/models/user/reset_password.rb
458
+ - app/models/user/send_password_reset.rb
459
+ - app/models/user/send_sign_up_invite.rb
460
+ - app/models/user/sign_in.rb
461
+ - app/models/user/sign_up.rb
462
+ - app/models/user/sign_up_invites.rb
463
+ - app/models/user/sign_up_invites/invite.rb
464
+ - app/models/user/sign_up_invites/stack.rb
465
+ - app/models/user/sign_up_with_invite.rb
466
+ - app/models/user/suspension.rb
467
+ - app/models/user/update_details.rb
468
+ - app/views/layouts/user_plane/application.html.erb
469
+ - app/views/user/details/edit.html.erb
470
+ - app/views/user/invites/edit.html.erb
471
+ - app/views/user/invites/new.html.erb
472
+ - app/views/user/reset_passwords/edit.html.erb
473
+ - app/views/user/reset_passwords/new.html.erb
474
+ - app/views/user/sign_ins/new.html.erb
475
+ - app/views/user/sign_ups/new.html.erb
476
+ - app/views/user_plane/invite_mailer/invite.html.erb
477
+ - app/views/user_plane/invite_mailer/invite.text.erb
478
+ - app/views/user_plane/verification_mailer/address_verification.html.erb
479
+ - app/views/user_plane/verification_mailer/address_verification.text.erb
480
+ - app/views/user_plane/verification_mailer/password_reset.html.erb
481
+ - app/views/user_plane/verification_mailer/password_reset.text.erb
482
+ - config/initializers/inflections.rb
483
+ - config/locales/en.yml
484
+ - config/locales/it.yml
485
+ - config/routes.rb
486
+ - db/migrate/20121128143404_create_user_accounts.rb
487
+ - db/migrate/20121226202553_create_user_identities_o_auths.rb
488
+ - db/migrate/20121226203032_create_user_identities_emails.rb
489
+ - db/migrate/20121227144617_create_user_identities_email_verifications.rb
490
+ - db/migrate/20130113120152_create_user_identities_id_tokens.rb
491
+ - db/migrate/20141025230304_create_user_sign_up_invites_stacks.rb
492
+ - db/migrate/20141025230500_create_user_sign_up_invites_invites.rb
493
+ - db/migrate/20141026230208_create_user_suspensions.rb
494
+ - lib/generators/user_plane/view/details_generator.rb
495
+ - lib/generators/user_plane/view/helpers.rb
496
+ - lib/generators/user_plane/view/invites_generator.rb
497
+ - lib/generators/user_plane/view/reset_passwords_generator.rb
498
+ - lib/generators/user_plane/view/sign_ins_generator.rb
499
+ - lib/generators/user_plane/view/sign_ups_generator.rb
500
+ - lib/generators/user_plane/views_generator.rb
501
+ - lib/tasks/user_plane_tasks.rake
502
+ - lib/user_plane.rb
503
+ - lib/user_plane/command.rb
504
+ - lib/user_plane/engine.rb
505
+ - lib/user_plane/fresh_validator.rb
506
+ - lib/user_plane/omniauth.rb
507
+ - lib/user_plane/redirect_to_sign_in.rb
508
+ - lib/user_plane/route_concerns.rb
509
+ - lib/user_plane/session_manager_concern.rb
510
+ - lib/user_plane/signed_in_constraint.rb
511
+ - lib/user_plane/token_segment.rb
512
+ - lib/user_plane/version.rb
513
+ - spec/controllers/user/confirm_email_addresses_controller_spec.rb
514
+ - spec/controllers/user/details_controller_spec.rb
515
+ - spec/controllers/user/invites_controller_spec.rb
516
+ - spec/controllers/user/reset_passwords_controller_spec.rb
517
+ - spec/controllers/user/sign_ins_controller_spec.rb
518
+ - spec/controllers/user/sign_ups_controller_spec.rb
519
+ - spec/dummy/README.rdoc
520
+ - spec/dummy/Rakefile
521
+ - spec/dummy/app/assets/javascripts/application.js
522
+ - spec/dummy/app/assets/stylesheets/application.css
523
+ - spec/dummy/app/controllers/application_controller.rb
524
+ - spec/dummy/app/controllers/welcome_controller.rb
525
+ - spec/dummy/app/helpers/application_helper.rb
526
+ - spec/dummy/app/views/layouts/application.html.erb
527
+ - spec/dummy/app/views/welcome/index.html.erb
528
+ - spec/dummy/bin/bundle
529
+ - spec/dummy/bin/rails
530
+ - spec/dummy/bin/rake
531
+ - spec/dummy/config.ru
532
+ - spec/dummy/config/application.rb
533
+ - spec/dummy/config/boot.rb
534
+ - spec/dummy/config/database.yml
535
+ - spec/dummy/config/environment.rb
536
+ - spec/dummy/config/environments/development.rb
537
+ - spec/dummy/config/environments/production.rb
538
+ - spec/dummy/config/environments/test.rb
539
+ - spec/dummy/config/initializers/assets.rb
540
+ - spec/dummy/config/initializers/backtrace_silencers.rb
541
+ - spec/dummy/config/initializers/cookies_serializer.rb
542
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
543
+ - spec/dummy/config/initializers/inflections.rb
544
+ - spec/dummy/config/initializers/mime_types.rb
545
+ - spec/dummy/config/initializers/session_store.rb
546
+ - spec/dummy/config/initializers/user_plane.rb
547
+ - spec/dummy/config/initializers/wrap_parameters.rb
548
+ - spec/dummy/config/locales/en.yml
549
+ - spec/dummy/config/routes.rb
550
+ - spec/dummy/config/secrets.yml
551
+ - spec/dummy/db/schema.rb
552
+ - spec/dummy/log/development.log
553
+ - spec/dummy/log/test.log
554
+ - spec/dummy/public/404.html
555
+ - spec/dummy/public/422.html
556
+ - spec/dummy/public/500.html
557
+ - spec/dummy/public/favicon.ico
558
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/-pOuxJZhYk_qXqMNKgm23KfvzyUW71NynNLlcNBOubE.cache
559
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/3AV9ywHBH56Leqey5LeznxK9vu4HD8fF3zSTk4MiDJA.cache
560
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/5fzR1G0D8ukHkPkLXsUu6rP6qV82aIdx3hugKkDy6nM.cache
561
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/9bKtJ2lkHPqtboGfbyknZ1OyH4xYO-aml7U3qhv-3kk.cache
562
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/HjDmE9SFP2wimdNHU8Nff9cm3vFZ5soO1iw7Jdlb6z8.cache
563
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/J9j6OdatarYW7VzVCVttmGphOhJKL0QXasdheyrgsTE.cache
564
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/KqrOQSlg0Th0N3XXx-h4p5BVJCfN0D8rRLoA9VxvXrc.cache
565
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/UCB1W65KwVU8ttOY8jnPRDp8HyyYYEjeTwwPD6R4qy8.cache
566
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/YmMSaaBmIcNZWPVF9jXcGBi-kwEzMuxzwPT_Zrcj1Bo.cache
567
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/g3wU8ajFWb5ZLPvujEt5l9DesbFCiAwqjx1WQgwTtHA.cache
568
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/i5pp88VHKoqlxQJdgmQd_lkgX1-4em_uHqNDjQ4nyHA.cache
569
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jL74yXjxf8cb6Olkjbw1C28MH_HbZe221l8AI6WVeH0.cache
570
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/puh7X4rfS3eDN9oHTXoQdAgqxivonrwAAdYZ4UB3GIg.cache
571
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qxPWFIWnE6gOCY-SsdBJe7Cgm5D3YUwaEne78Y7XdRg.cache
572
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rM9s67WgzKMZ1bRhUdA0yhPZDlyRE5a1kmdt7cS6m4c.cache
573
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rVoG8EHlrCOgY4ZkzOj64f0jiTcbteQ_SYNzq9RqY0I.cache
574
+ - spec/fabricators/user_account_fabricator.rb
575
+ - spec/fabricators/user_guest_fabricator.rb
576
+ - spec/fabricators/user_identities_email_fabricator.rb
577
+ - spec/fabricators/user_identities_email_verification_fabricator.rb
578
+ - spec/fabricators/user_identities_id_token_fabricator.rb
579
+ - spec/fabricators/user_sign_up_fabricator.rb
580
+ - spec/fabricators/user_sign_up_invites_invite_fabricator.rb
581
+ - spec/fabricators/user_sign_up_invites_stack_fabricator.rb
582
+ - spec/fabricators/user_suspension_fabricator.rb
583
+ - spec/fabricators/user_update_detail_fabricator.rb
584
+ - spec/features/user_plane/user_plane_invites_spec.rb
585
+ - spec/features/user_plane/user_plane_reset_passwords_spec.rb
586
+ - spec/features/user_plane/user_plane_sign_ins_spec.rb
587
+ - spec/features/user_plane/user_plane_signed_in_only_spec.rb
588
+ - spec/features/user_plane/user_plane_update_details_spec.rb
589
+ - spec/fixtures/user_plane/invite_mailer/invite
590
+ - spec/fixtures/user_plane/verification_mailer/address_verification
591
+ - spec/fixtures/user_plane/verification_mailer/password_reset
592
+ - spec/lib/generators/views_generator_spec.rb
593
+ - spec/lib/route_concerns_spec.rb
594
+ - spec/mailers/previews/user_plane/invite_mailer_preview.rb
595
+ - spec/mailers/previews/user_plane/verification_mailer_preview.rb
596
+ - spec/mailers/user_plane/invite_mailer_spec.rb
597
+ - spec/mailers/user_plane/verification_mailer_spec.rb
598
+ - spec/models/session_manager_spec.rb
599
+ - spec/models/user/account_spec.rb
600
+ - spec/models/user/confirm_email_address_spec.rb
601
+ - spec/models/user/guest_spec.rb
602
+ - spec/models/user/identities/email_spec.rb
603
+ - spec/models/user/identities/email_verification_spec.rb
604
+ - spec/models/user/identities/facebook_spec.rb
605
+ - spec/models/user/identities/github_spec.rb
606
+ - spec/models/user/identities/id_token_spec.rb
607
+ - spec/models/user/identities/o_auth_spec.rb
608
+ - spec/models/user/identities/twitter_spec.rb
609
+ - spec/models/user/reset_password_spec.rb
610
+ - spec/models/user/send_password_reset_spec.rb
611
+ - spec/models/user/send_sign_up_invite_spec.rb
612
+ - spec/models/user/sign_in_spec.rb
613
+ - spec/models/user/sign_up_invites/invite_spec.rb
614
+ - spec/models/user/sign_up_invites/stack_spec.rb
615
+ - spec/models/user/sign_up_spec.rb
616
+ - spec/models/user/sign_up_with_invite_spec.rb
617
+ - spec/models/user/suspension_spec.rb
618
+ - spec/models/user/update_details_spec.rb
619
+ - spec/routing/invites_spec.rb
620
+ - spec/routing/reset_passwords_spec.rb
621
+ - spec/routing/sign_ins_spec.rb
622
+ - spec/routing/update_details_spec.rb
623
+ - spec/shared_contexts/feature_helpers.rb
624
+ - spec/shared_contexts/routing.rb
625
+ - spec/shared_contexts/user.rb
626
+ - spec/spec_helper.rb
627
+ - spec/support/fabrication.rb
628
+ - spec/support/omniauth.rb
629
+ homepage: https://github.com/ilpoldo/user_plane
630
+ licenses:
631
+ - MIT
632
+ metadata: {}
633
+ post_install_message:
634
+ rdoc_options: []
635
+ require_paths:
636
+ - lib
637
+ required_ruby_version: !ruby/object:Gem::Requirement
638
+ requirements:
639
+ - - ">="
640
+ - !ruby/object:Gem::Version
641
+ version: '0'
642
+ required_rubygems_version: !ruby/object:Gem::Requirement
643
+ requirements:
644
+ - - ">="
645
+ - !ruby/object:Gem::Version
646
+ version: '0'
647
+ requirements: []
648
+ rubyforge_project:
649
+ rubygems_version: 2.2.2
650
+ signing_key:
651
+ specification_version: 4
652
+ summary: User component for Rails applications.
653
+ test_files:
654
+ - spec/controllers/user/confirm_email_addresses_controller_spec.rb
655
+ - spec/controllers/user/details_controller_spec.rb
656
+ - spec/controllers/user/invites_controller_spec.rb
657
+ - spec/controllers/user/reset_passwords_controller_spec.rb
658
+ - spec/controllers/user/sign_ins_controller_spec.rb
659
+ - spec/controllers/user/sign_ups_controller_spec.rb
660
+ - spec/dummy/app/assets/javascripts/application.js
661
+ - spec/dummy/app/assets/stylesheets/application.css
662
+ - spec/dummy/app/controllers/application_controller.rb
663
+ - spec/dummy/app/controllers/welcome_controller.rb
664
+ - spec/dummy/app/helpers/application_helper.rb
665
+ - spec/dummy/app/views/layouts/application.html.erb
666
+ - spec/dummy/app/views/welcome/index.html.erb
667
+ - spec/dummy/bin/bundle
668
+ - spec/dummy/bin/rails
669
+ - spec/dummy/bin/rake
670
+ - spec/dummy/config/application.rb
671
+ - spec/dummy/config/boot.rb
672
+ - spec/dummy/config/database.yml
673
+ - spec/dummy/config/environment.rb
674
+ - spec/dummy/config/environments/development.rb
675
+ - spec/dummy/config/environments/production.rb
676
+ - spec/dummy/config/environments/test.rb
677
+ - spec/dummy/config/initializers/assets.rb
678
+ - spec/dummy/config/initializers/backtrace_silencers.rb
679
+ - spec/dummy/config/initializers/cookies_serializer.rb
680
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
681
+ - spec/dummy/config/initializers/inflections.rb
682
+ - spec/dummy/config/initializers/mime_types.rb
683
+ - spec/dummy/config/initializers/session_store.rb
684
+ - spec/dummy/config/initializers/user_plane.rb
685
+ - spec/dummy/config/initializers/wrap_parameters.rb
686
+ - spec/dummy/config/locales/en.yml
687
+ - spec/dummy/config/routes.rb
688
+ - spec/dummy/config/secrets.yml
689
+ - spec/dummy/config.ru
690
+ - spec/dummy/db/schema.rb
691
+ - spec/dummy/log/development.log
692
+ - spec/dummy/log/test.log
693
+ - spec/dummy/public/404.html
694
+ - spec/dummy/public/422.html
695
+ - spec/dummy/public/500.html
696
+ - spec/dummy/public/favicon.ico
697
+ - spec/dummy/Rakefile
698
+ - spec/dummy/README.rdoc
699
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/-pOuxJZhYk_qXqMNKgm23KfvzyUW71NynNLlcNBOubE.cache
700
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/3AV9ywHBH56Leqey5LeznxK9vu4HD8fF3zSTk4MiDJA.cache
701
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/5fzR1G0D8ukHkPkLXsUu6rP6qV82aIdx3hugKkDy6nM.cache
702
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/9bKtJ2lkHPqtboGfbyknZ1OyH4xYO-aml7U3qhv-3kk.cache
703
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/g3wU8ajFWb5ZLPvujEt5l9DesbFCiAwqjx1WQgwTtHA.cache
704
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/HjDmE9SFP2wimdNHU8Nff9cm3vFZ5soO1iw7Jdlb6z8.cache
705
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/i5pp88VHKoqlxQJdgmQd_lkgX1-4em_uHqNDjQ4nyHA.cache
706
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/J9j6OdatarYW7VzVCVttmGphOhJKL0QXasdheyrgsTE.cache
707
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/jL74yXjxf8cb6Olkjbw1C28MH_HbZe221l8AI6WVeH0.cache
708
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/KqrOQSlg0Th0N3XXx-h4p5BVJCfN0D8rRLoA9VxvXrc.cache
709
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/puh7X4rfS3eDN9oHTXoQdAgqxivonrwAAdYZ4UB3GIg.cache
710
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qxPWFIWnE6gOCY-SsdBJe7Cgm5D3YUwaEne78Y7XdRg.cache
711
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rM9s67WgzKMZ1bRhUdA0yhPZDlyRE5a1kmdt7cS6m4c.cache
712
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/rVoG8EHlrCOgY4ZkzOj64f0jiTcbteQ_SYNzq9RqY0I.cache
713
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/UCB1W65KwVU8ttOY8jnPRDp8HyyYYEjeTwwPD6R4qy8.cache
714
+ - spec/dummy/tmp/cache/assets/test/sprockets/v3.0/YmMSaaBmIcNZWPVF9jXcGBi-kwEzMuxzwPT_Zrcj1Bo.cache
715
+ - spec/fabricators/user_account_fabricator.rb
716
+ - spec/fabricators/user_guest_fabricator.rb
717
+ - spec/fabricators/user_identities_email_fabricator.rb
718
+ - spec/fabricators/user_identities_email_verification_fabricator.rb
719
+ - spec/fabricators/user_identities_id_token_fabricator.rb
720
+ - spec/fabricators/user_sign_up_fabricator.rb
721
+ - spec/fabricators/user_sign_up_invites_invite_fabricator.rb
722
+ - spec/fabricators/user_sign_up_invites_stack_fabricator.rb
723
+ - spec/fabricators/user_suspension_fabricator.rb
724
+ - spec/fabricators/user_update_detail_fabricator.rb
725
+ - spec/features/user_plane/user_plane_invites_spec.rb
726
+ - spec/features/user_plane/user_plane_reset_passwords_spec.rb
727
+ - spec/features/user_plane/user_plane_sign_ins_spec.rb
728
+ - spec/features/user_plane/user_plane_signed_in_only_spec.rb
729
+ - spec/features/user_plane/user_plane_update_details_spec.rb
730
+ - spec/fixtures/user_plane/invite_mailer/invite
731
+ - spec/fixtures/user_plane/verification_mailer/address_verification
732
+ - spec/fixtures/user_plane/verification_mailer/password_reset
733
+ - spec/lib/generators/views_generator_spec.rb
734
+ - spec/lib/route_concerns_spec.rb
735
+ - spec/mailers/previews/user_plane/invite_mailer_preview.rb
736
+ - spec/mailers/previews/user_plane/verification_mailer_preview.rb
737
+ - spec/mailers/user_plane/invite_mailer_spec.rb
738
+ - spec/mailers/user_plane/verification_mailer_spec.rb
739
+ - spec/models/session_manager_spec.rb
740
+ - spec/models/user/account_spec.rb
741
+ - spec/models/user/confirm_email_address_spec.rb
742
+ - spec/models/user/guest_spec.rb
743
+ - spec/models/user/identities/email_spec.rb
744
+ - spec/models/user/identities/email_verification_spec.rb
745
+ - spec/models/user/identities/facebook_spec.rb
746
+ - spec/models/user/identities/github_spec.rb
747
+ - spec/models/user/identities/id_token_spec.rb
748
+ - spec/models/user/identities/o_auth_spec.rb
749
+ - spec/models/user/identities/twitter_spec.rb
750
+ - spec/models/user/reset_password_spec.rb
751
+ - spec/models/user/send_password_reset_spec.rb
752
+ - spec/models/user/send_sign_up_invite_spec.rb
753
+ - spec/models/user/sign_in_spec.rb
754
+ - spec/models/user/sign_up_invites/invite_spec.rb
755
+ - spec/models/user/sign_up_invites/stack_spec.rb
756
+ - spec/models/user/sign_up_spec.rb
757
+ - spec/models/user/sign_up_with_invite_spec.rb
758
+ - spec/models/user/suspension_spec.rb
759
+ - spec/models/user/update_details_spec.rb
760
+ - spec/routing/invites_spec.rb
761
+ - spec/routing/reset_passwords_spec.rb
762
+ - spec/routing/sign_ins_spec.rb
763
+ - spec/routing/update_details_spec.rb
764
+ - spec/shared_contexts/feature_helpers.rb
765
+ - spec/shared_contexts/routing.rb
766
+ - spec/shared_contexts/user.rb
767
+ - spec/spec_helper.rb
768
+ - spec/support/fabrication.rb
769
+ - spec/support/omniauth.rb
770
+ has_rdoc: