permits 0.3.0 → 1.0.0

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
  SHA256:
3
- metadata.gz: d330b1a5acfacc191ccffec7849305d517a1c70e50bc5e9937a07b15239f950c
4
- data.tar.gz: 4f3c2df1fec8854571ab7d57abc7129662679fbc7d53b70704ca92b8915a82a6
3
+ metadata.gz: 17d6289fc58da4116cf85b5cf7853ebfe67d6366a4e9c96b64b0d0d42533d1a4
4
+ data.tar.gz: '08f713827ae201b471163040ce273e2b7f5beb5e59f31c9af0d808e3d1248f7e'
5
5
  SHA512:
6
- metadata.gz: '0842937fcd45b32c6cb384e7c26fc2fb8556abbae9ef9cfdb5a429fad034a6b1c82d2e85d3d50747b6375359b67e55adffb6f6000f06162640d8c622ff5defa6'
7
- data.tar.gz: b6f0a89a8b057fb960517622affcbab9911c222af51449eccfe4691488d2bac4c939eafba235d624a5f7f5f98ee29c8564514a02b61ae0e7b4bfe8992a5a5976
6
+ metadata.gz: 45c24dc5c7c076e30644f57a9779d50d252551921fa3e7eb7de6d21fe588f5e5217c5f90638cf98bc570ec9daf75526f910f0f015bf4e72ec923e860f0ecb420
7
+ data.tar.gz: 4bec82908bb725ea9a36fac20d0d1ee091923509b2f3a52b2ce59649fb011a586e67e70c7d93e3ad1ce480f496432af84354787ea285753a75bc8eda67d3b8a3
data/README.md CHANGED
@@ -76,6 +76,23 @@ CustomPolicy.authorize!(owner, resource, :some_action)
76
76
  CustomPolicy.authorized?(owner, resource, :some_action)
77
77
  ```
78
78
 
79
+ ### Invites
80
+ `Permits` provides a simple pre-permissioned Invite system, with a `Permits::Invite` model, a `Permits::Form::NewInviteForm` form object for creating new invites, and a `Permits::Form::InviteForm` form object for accepting, declining and revoking invites. Invites can be pre-assigned permissions, so that when the invite is accepted, the invitee is automatically granted the permissions.
81
+
82
+ ```irb
83
+ group = Group.create(name: "Group 1")
84
+ group_user = User.create(name: "User 1")
85
+ user_permission = Permits::Permission.create(owner: group_user, resource: group, action: :super_user)
86
+
87
+ NewInviteForm.new(
88
+ invited_by: group_user,
89
+ email: "invitee@email-address.com",
90
+ permission_attributes: {
91
+ group => [:read, :edit]
92
+ }
93
+ ).save!
94
+ ```
95
+
79
96
  ## Installation
80
97
  Add this line to your application's Gemfile:
81
98
 
@@ -0,0 +1,65 @@
1
+ module Permits
2
+ module Forms
3
+ class InviteForm
4
+ include ActiveModel::Model
5
+ include ActiveModel::Attributes
6
+ include ActiveModel::Validations
7
+
8
+ attribute :invite_id
9
+ attribute :invited
10
+ attribute :token
11
+
12
+ validates :invite_id, presence: true
13
+ validates :invited, presence: true
14
+ validates :token, presence: true
15
+
16
+ def accept
17
+ return false unless valid_invite?
18
+
19
+ ActiveRecord::Base.transaction do
20
+ invite.accept!
21
+ end
22
+ true
23
+ end
24
+
25
+ def decline
26
+ return false unless valid_invite?
27
+
28
+ ActiveRecord::Base.transaction do
29
+ invite.decline!
30
+ end
31
+ true
32
+ end
33
+
34
+ def destroy
35
+ ActiveRecord::Base.transaction do
36
+ invite.permissions.destroy_all
37
+ invite.destroy
38
+ end
39
+ true
40
+ end
41
+
42
+ private
43
+
44
+ def valid_invite?
45
+ return false unless valid?
46
+
47
+ valid_email? && valid_token?
48
+ end
49
+
50
+ def valid_email?
51
+ raise I18n.t("errors.invited_does_not_respond_to_email") unless invited.respond_to?(:email)
52
+
53
+ invite.email == invited.email
54
+ end
55
+
56
+ def valid_token?
57
+ invite.slug == token
58
+ end
59
+
60
+ def invite
61
+ @invite ||= ::Permits::Invite.find(invite_id)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,6 +1,6 @@
1
1
  module Permits
2
2
  module Forms
3
- class NewInvite
3
+ class NewInviteForm
4
4
  include ActiveModel::Model
5
5
  include ActiveModel::Attributes
6
6
  include ActiveModel::Validations
@@ -17,7 +17,7 @@ module Permits
17
17
  def permits_is_permissable
18
18
  return if Permits.config.permits&.include?(permits&.to_sym)
19
19
 
20
- errors.add(:permits, "is not a valid permits for #{resource.class}")
20
+ errors.add(:permits, I18n.t("errors.invalid_permits_param", class: resource.class.name))
21
21
  end
22
22
 
23
23
  scope :permits_any, -> { all }
@@ -1,3 +1,3 @@
1
1
  module Permits
2
- VERSION = "0.3.0"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/permits.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require "active_support/configurable"
2
2
  require "aasm"
3
3
  require "permits/concerns/has_permissions"
4
- require "permits/forms/new_invite"
4
+ require "permits/forms/new_invite_form"
5
+ require "permits/forms/invite_form"
5
6
  require "permits/invite"
6
7
  require "permits/permission"
7
8
  require "permits/policy/unauthorized_error"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: permits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Gilchrist
@@ -152,7 +152,8 @@ files:
152
152
  - lib/generators/permits/install/templates/create_permits_permissions.rb
153
153
  - lib/permits.rb
154
154
  - lib/permits/concerns/has_permissions.rb
155
- - lib/permits/forms/new_invite.rb
155
+ - lib/permits/forms/invite_form.rb
156
+ - lib/permits/forms/new_invite_form.rb
156
157
  - lib/permits/invite.rb
157
158
  - lib/permits/permission.rb
158
159
  - lib/permits/policy/base.rb