invitation 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 354b452dc2fffa362fb324bd5f8ffce81aaed53f
4
- data.tar.gz: fe0c07886e04e48e3911e4e9be9eb0c3d361cda5
3
+ metadata.gz: 106aa33fdda1af6e4a185946e1f1eb05c2621d90
4
+ data.tar.gz: 23f8f4b5ab5927052b1258ec728cdb04af2c1028
5
5
  SHA512:
6
- metadata.gz: 69b001bd110f2ffd4b081d35def31a39a02adb452a96d3f3cae97660470ef4d6c9da5ecd80ec5168595d7c85e2308531c9d578158f0f3927392419eef7bcd7e0
7
- data.tar.gz: 3720cf91a52ec9ca0b7a9cb331d8590b3294336ab4bfeb0dd43f6ab2be50058b2461f6bdc0701c4007ca399f2d9ad3da608b24ae48c5318588e43e0443543230
6
+ metadata.gz: 1fd3cc4ca6941ebe309af5f616338d0f966bd627a3d0c5fd0f836ef2d07308ea5e437c2b3ec5632075a56d54edb9f9f8b2cc1dd4e20a26e236265c06245b5489
7
+ data.tar.gz: cbb961fc6d801a5983de88b10986ca0436d4fab2a2fde6515bc8ad292d87df6ad8b6eee705f2262770c2524cb86670045b20662f9bd4cd0d368e7586c09c8a62
@@ -1,14 +1,26 @@
1
+ #
2
+ # Invitation::InvitesController - issue invitations to users via email address.
3
+ #
4
+ # Controller uses an (inner class) Form object that is not a persisted model. The
5
+ # form can accept many email addresses, and creates on Invite per email address.
6
+ #
7
+ # Subclass and modify or extend, or copy the controller into your app with `rails generate invitation:controller`.
8
+ #
9
+ # Common extensions include:
10
+ # * add authorization checks: subclass and add before_actions to :new and :create.
11
+ # * override after_invite_existing_user or after_invite_new_user.
12
+ #
1
13
  class Invitation::InvitesController < ApplicationController
14
+
2
15
  def new
3
- attrs = params[:invite] ? params.require(:invite).permit(:invitable_id, :invitable_type, :email, emails: []) : {}
4
- @invite = Invite.new(attrs)
16
+ @invite = InviteForm.new(invite_params)
5
17
  render template: 'invites/new'
6
18
  end
7
19
 
8
20
  # invite: { invitable_id, invitable_type, email or emails:[] }
9
21
  def create
10
22
  failures = []
11
- invites = build_invites
23
+ invites = InviteForm.new(invite_params).build_invites(current_user)
12
24
  ActiveRecord::Base.transaction do
13
25
  invites.each{ |invite| invite.save ? do_invite(invite) : failures << invite.email }
14
26
  end
@@ -39,6 +51,42 @@ class Invitation::InvitesController < ApplicationController
39
51
  protected
40
52
 
41
53
 
54
+ # A form object pretends to be 'invite', but accepts both 'email' and 'emails'.
55
+ # It knows how to build all of the invite instances.
56
+ class InviteForm
57
+ include ActiveModel::Model
58
+ attr_accessor :invitable_id, :invitable_type, :email, :emails
59
+ attr_reader :invitable
60
+
61
+ def self.model_name # form masquerades as 'invite'
62
+ ActiveModel::Name.new(self, nil, 'Invite')
63
+ end
64
+
65
+ def initialize(attributes = {})
66
+ @emails ||= []
67
+ super
68
+ end
69
+
70
+ def invitable
71
+ @invitable ||= @invitable_type.classify.constantize.find(@invitable_id)
72
+ end
73
+
74
+ def build_invites(current_user)
75
+ all_emails.reject{ |e| e.blank? }.collect{ |e|
76
+ Invite.new(invitable_id: @invitable_id, invitable_type: @invitable_type, sender_id: current_user.id, email: e) }
77
+ end
78
+
79
+ private
80
+
81
+ def all_emails
82
+ @emails + [@email]
83
+ end
84
+ end
85
+
86
+
87
+ private
88
+
89
+
42
90
  # Override this if you want to do something more complicated for existing users.
43
91
  # For example, if you have a more complex permissions scheme than just a simple
44
92
  # has_many relationship, enable it here.
@@ -61,28 +109,10 @@ class Invitation::InvitesController < ApplicationController
61
109
  end
62
110
 
63
111
 
64
- private
65
-
66
- def build_invites
67
- attributes = invite_params_for_create
68
- attributes[:emails].collect{ |e| Invite.new(invitable_id: attributes[:invitable_id],
69
- invitable_type: attributes[:invitable_type],
70
- sender_id: current_user.id,
71
- email: e) }
72
- end
73
-
74
-
75
- # Paramsters used in #create. Allow :email or :emails in payload.
76
- # Copy :email scalar to :emails array, so we only have to process :emails attribute.
77
- def invite_params_for_create
78
- params[:invite][:emails] ||= []
79
- if params[:invite][:email]
80
- params[:invite][:emails] << params[:invite][:email]
81
- end
82
- params.require(:invite).permit(:invitable_id, :invitable_type, emails: [])
112
+ def invite_params
113
+ params[:invite] ? params.require(:invite).permit(:invitable_id, :invitable_type, :email, emails: []) : {}
83
114
  end
84
115
 
85
-
86
116
  # Invite user by sending email.
87
117
  # Existing users are granted permissions via #after_invite_existing_user.
88
118
  # New users are granted permissions via #after_invite_new_user, currently a null op.
@@ -1,6 +1,5 @@
1
1
  <div id="invitation" class="new">
2
2
 
3
-
4
3
  <p>
5
4
  Issue an invitation to join <%= @invite.invitable.invitable_name %>
6
5
  </p>
@@ -1,3 +1,3 @@
1
1
  module Invitation
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: invitation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Tomich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-19 00:00:00.000000000 Z
11
+ date: 2016-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails