permits 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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