papers_please 0.0.3.beta → 0.1.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
- SHA256:
3
- metadata.gz: dfc4c5fd0a8edd23d0befb5b369c2c87247927230893534ddd338d504eccf72f
4
- data.tar.gz: aa89dd7a72410900567bbd3b44f7ea7cd57abd44821d478499310fd8b99b7cd0
2
+ SHA1:
3
+ metadata.gz: c2eae718044ec1bc5ae95e4a7cadb9bd5046cd8e
4
+ data.tar.gz: '0759782832b9706d6c59cdde394035731372d1d8'
5
5
  SHA512:
6
- metadata.gz: a427adc6461f8d3e3641afcb1778e737811404bac92dd5637d621c88c9dc7c3d4b52d4fd745d9272fc5e5a2848a2e8c24c2302527921bf4e5013ad9acdf14cfb
7
- data.tar.gz: ae00489c552cf58bfaa20555fcde4e0d84b9356b8d835d2e9d015bcfd683afce7f57dcb2f1880d801137f1aab443e2dbdca39938cc4907b42224b991d0623a23
6
+ metadata.gz: dc8356f4e7dc50c80a9d754a5b6e411448dcaad7e1a3f05d4016f3d89a6999837b0528b74b584648367f6b233589fcfea0994e5e6116dd7daef580138e4f2b98
7
+ data.tar.gz: e13e12d51105db39fb14c72d6999e80d5d099f511afc4bcabc82c668bc018f5c414ecd33f0fbc146f12430e328739c364bd2ed5f869b37b460cd4907f90030c6
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ .byebug_history
13
+ .DS_Store
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in papers_please.gemspec
6
6
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- papers_please (0.0.3.beta)
4
+ papers_please (0.1.0)
5
+ terminal-table
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
@@ -29,12 +30,15 @@ GEM
29
30
  json (>= 1.8, < 3)
30
31
  simplecov-html (~> 0.10.0)
31
32
  simplecov-html (0.10.2)
33
+ terminal-table (1.8.0)
34
+ unicode-display_width (~> 1.1, >= 1.1.1)
35
+ unicode-display_width (1.4.0)
32
36
 
33
37
  PLATFORMS
34
38
  ruby
35
39
 
36
40
  DEPENDENCIES
37
- bundler (~> 1.16)
41
+ bundler (~> 2.0)
38
42
  byebug
39
43
  papers_please!
40
44
  rake (~> 10.0)
@@ -42,4 +46,4 @@ DEPENDENCIES
42
46
  simplecov
43
47
 
44
48
  BUNDLED WITH
45
- 1.16.1
49
+ 2.0.1
data/README.md CHANGED
@@ -4,41 +4,40 @@ A roles and permissions gem from Apsis Labs.
4
4
 
5
5
  **NOTE**: Still under heavy development, definitely not suitable for anything remotely resembling production usage. Very unlikely to even work.
6
6
 
7
+
7
8
  ## Example
8
9
 
9
10
  ```ruby
10
11
  # app/policies/access_policy.rb
11
12
  class AccessPolicy < PapersPlease::Policy
12
13
  def configure
13
- # Define a role in a block
14
- role :admin, (proc { |u| u.admin? }) do
15
- grant [:manage, :archive], Post
14
+ # Define your roles
15
+ role :super, (proc { |u| u.super? })
16
+ role :admin, (proc { |u| u.admin? })
17
+ role :member, (proc { |u| u.member? })
18
+ role :guest
19
+
20
+ permit :super do |role|
21
+ role.grant [:manage], User
16
22
  end
17
23
 
18
- # Define a role in a class
19
- role :member, MemberRole
20
-
21
- # Define a role with no predicate
22
- role :guest do
23
- grant [:read], Post, predicate: (proc { |u, post| !post.archived? })
24
+ permit :admin, :super do |role|
25
+ role.grant [:manage, :archive], Post
24
26
  end
25
- end
26
- end
27
-
28
- # app/policies/roles/member_role.rb
29
- class MemberRole < PapersPlease::Role
30
- predicate { |user| user.member? }
31
27
 
32
- config do
33
- grant :create, Post
34
- grant [:read, :update], Post, query: (proc { |u| u.posts })
35
- grant :archive, Post, query: method(:published_posts)
36
- end
28
+ permit :member do |role|
29
+ role.grant [:create], Post
30
+ role.grant [:update, :read], Post, query: (proc { |u| u.posts })
31
+ role.grant [:archive], Post, query: (proc { |u| u.posts }), predicate: (proc { |u, post| !post.archived? })
32
+ end
37
33
 
38
- private
34
+ permit :guest do |role|
35
+ role.grant [:read], Post, predicate: (proc { |u, post| !post.archived? })
36
+ end
39
37
 
40
- def published_posts(user, klass)
41
- user.posts.where(status: :published)
38
+ permit :member, :guest do |role|
39
+ role.grant [:read], Attachment, granted_by: [Post, (proc { |u, attachment| attachment.post })]
40
+ end
42
41
  end
43
42
  end
44
43
 
@@ -67,6 +66,16 @@ class PostsController < ApplicationController
67
66
  render json: @post
68
67
  end
69
68
  end
69
+
70
+ class AttachmentsController < ApplicationController
71
+ # GET /attachments/:id
72
+ def show
73
+ @attachment = Attachment.find([:id])
74
+ policy.authorize! :read, @attachment # => proxied to Post permission check
75
+
76
+ send_data @attachment.data, type: @attachment.content_type
77
+ end
78
+ end
70
79
  ```
71
80
 
72
81
  ## A helpful CLI
@@ -75,24 +84,34 @@ end
75
84
  $ rails papers_please:roles
76
85
 
77
86
  # =>
78
- # | role | permission | object |
79
- # | :------ | :--------- | :----- |
80
- # | :admin | :create | Post |
81
- # | | :read | Post |
82
- # | | :update | Post |
83
- # | | :destroy | Post |
84
- # | | :archive | Post |
85
- # | | | |
86
- # | :member | :create | Post |
87
- # | | :read | Post |
88
- # | | :update | Post |
89
- # | | :archive | Post |
90
- # | | | |
91
- # | :guest | :read | Post |
92
-
93
- $ rails papers_please:annotate [app/policies/access_policy.rb]
94
-
95
- # => output roles table to top of AccessPolicy file
87
+ # +---------+------------+------------+------------+----------------+-------------------+
88
+ # | role | subject | permission | has query? | has predicate? | granted by other? |
89
+ # +---------+------------+------------+------------+----------------+-------------------+
90
+ # | admin | Post | create | yes | yes | no |
91
+ # | | Post | read | yes | yes | no |
92
+ # | | Post | update | yes | yes | no |
93
+ # | | Post | destroy | yes | yes | no |
94
+ # | | Attachment | create | yes | yes | no |
95
+ # | | Attachment | read | yes | yes | no |
96
+ # | | Attachment | update | yes | yes | no |
97
+ # | | Attachment | destroy | yes | yes | no |
98
+ # +---------+------------+------------+------------+----------------+-------------------+
99
+ # | manager | Post | create | yes | yes | no |
100
+ # | | Post | read | yes | yes | no |
101
+ # | | Post | update | yes | yes | no |
102
+ # | | Post | destroy | yes | yes | no |
103
+ # | | Attachment | create | yes | yes | yes |
104
+ # | | Attachment | read | yes | yes | yes |
105
+ # | | Attachment | update | yes | yes | yes |
106
+ # | | Attachment | destroy | yes | yes | yes |
107
+ # +---------+------------+------------+------------+----------------+-------------------+
108
+ # | member | Post | create | yes | yes | no |
109
+ # | | Post | read | yes | yes | no |
110
+ # | | Post | update | yes | yes | no |
111
+ # | | Attachment | create | yes | yes | yes |
112
+ # | | Attachment | read | yes | yes | yes |
113
+ # | | Attachment | update | yes | yes | yes |
114
+ # +---------+------------+------------+------------+----------------+-------------------+
96
115
  ```
97
116
 
98
117
  ## Installation
@@ -141,3 +160,11 @@ This owes its existence to [`AccessGranted`](https://github.com/chaps-io/access-
141
160
  ## License
142
161
 
143
162
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
163
+
164
+ ---
165
+
166
+ # Built by Apsis
167
+
168
+ [![apsis](https://s3-us-west-2.amazonaws.com/apsiscdn/apsis.png)](https://www.apsis.io)
169
+
170
+ `papers_please` was built by Apsis Labs. We love sharing what we build! Check out our [other libraries on Github](https://github.com/apsislabs), and if you like our work you can [hire us](https://www.apsis.io/work-with-us/) to build your vision.
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "papers_please"
3
+ require 'bundler/setup'
4
+ require 'papers_please'
5
+ Dir['spec/fixtures/**/*.rb'].each { |f| require File.expand_path(f) }
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "papers_please"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
@@ -3,6 +3,11 @@ module PapersPlease
3
3
 
4
4
  class AccessDenied < Error; end
5
5
 
6
+ class InvalidGrant < Error; end
7
+
8
+ class DuplicateRole < Error; end
9
+ class MissingRole < Error; end
10
+
6
11
  class DuplicatePermission < Error; end
7
12
  class InvalidPermission < Error; end
8
13
 
@@ -1,12 +1,18 @@
1
1
  module PapersPlease
2
2
  class Permission
3
- attr_accessor :key, :subject, :query, :predicate
3
+ attr_accessor :key, :subject, :query, :predicate, :granted_by, :granting_class
4
4
 
5
- def initialize(key, subject, query: nil, predicate: nil)
6
- @key = key
7
- @subject = subject
8
- @query = query
9
- @predicate = predicate
5
+ def initialize(key, subject, query: nil, predicate: nil, granted_by: nil, granting_class: nil)
6
+ self.key = key
7
+ self.subject = subject
8
+ self.query = query
9
+ self.predicate = predicate
10
+ self.granted_by = granted_by
11
+ self.granting_class = granting_class
12
+ end
13
+
14
+ def granted_by_other?
15
+ @granting_class.is_a?(Class) && @granted_by.is_a?(Proc)
10
16
  end
11
17
 
12
18
  def matches?(key, subject)
@@ -15,14 +21,44 @@ module PapersPlease
15
21
 
16
22
  def granted?(*args)
17
23
  return predicate.call(*args) if predicate.is_a? Proc
24
+
25
+ # :nocov:
26
+ # as far as we can tell this line is unreachable, but just in case...
18
27
  false
28
+ # :nocov:
19
29
  end
20
30
 
21
31
  def fetch(*args)
22
32
  return query.call(*args) if query.is_a? Proc
33
+
23
34
  nil
24
35
  end
25
36
 
37
+ # Setters
38
+ def query=(val)
39
+ raise ArgumentError, "query must be a Proc, #{val.class} given" if val && !val.is_a?(Proc)
40
+
41
+ @query = val
42
+ end
43
+
44
+ def predicate=(val)
45
+ raise ArgumentError, "predicate must be a Proc, #{val.class} given" if val && !val.is_a?(Proc)
46
+
47
+ @predicate = val
48
+ end
49
+
50
+ def granted_by=(val)
51
+ raise ArgumentError, "granted_by must be a Proc, #{val.class} given" if val && !val.is_a?(Proc)
52
+
53
+ @granted_by = val
54
+ end
55
+
56
+ def granting_class=(val)
57
+ raise ArgumentError, "granting_class must be a Class, #{val.class} given" if val && !val.is_a?(Class)
58
+
59
+ @granting_class = val
60
+ end
61
+
26
62
  private
27
63
 
28
64
  def key_matches?(key)
@@ -12,7 +12,7 @@ module PapersPlease
12
12
  end
13
13
 
14
14
  def configure
15
- raise NotImplementedError, "The #configure method of the access policy was not implemented"
15
+ raise NotImplementedError, 'The #configure method of the access policy was not implemented'
16
16
  end
17
17
 
18
18
  # Add a role to the Policy
@@ -27,11 +27,35 @@ module PapersPlease
27
27
  end
28
28
  alias role add_role
29
29
 
30
+ # Add permissions to the Role
31
+ def add_permissions(keys)
32
+ return unless block_given?
33
+
34
+ Array(keys).each do |key|
35
+ raise MissingRole unless roles.key?(key)
36
+
37
+ yield roles[key]
38
+ end
39
+ end
40
+ alias permit add_permissions
41
+
30
42
  # Look up a stored permission block and call with
31
43
  # the current user and subject
32
44
  def can?(action, subject = nil)
33
45
  applicable_roles.each do |_, role|
34
46
  permission = role.find_permission(action, subject)
47
+ next if permission.nil?
48
+
49
+ # Proxy permission check if granted by other
50
+ if permission.granted_by_other?
51
+ # Get proxied subject
52
+ subject = subject.is_a?(Class) ? permission.granting_class : permission.granted_by.call(user, subject)
53
+
54
+ # Get proxied permission
55
+ permission = role.find_permission(action, subject)
56
+ end
57
+
58
+ # Check permission
35
59
  return permission.granted?(user, subject, action) unless permission.nil?
36
60
  end
37
61
 
@@ -43,7 +67,8 @@ module PapersPlease
43
67
  end
44
68
 
45
69
  def authorize!(action, subject)
46
- raise AccessDenied.new("Access denied for #{action} on #{subject}") if cannot?(action, subject)
70
+ raise AccessDenied, "Access denied for #{action} on #{subject}" if cannot?(action, subject)
71
+
47
72
  subject
48
73
  end
49
74
 
@@ -57,6 +82,7 @@ module PapersPlease
57
82
 
58
83
  nil
59
84
  end
85
+ alias query scope_for
60
86
 
61
87
  # Fetch roles that apply to the current user
62
88
  def applicable_roles
@@ -0,0 +1,25 @@
1
+ module PapersPlease
2
+ module Rails
3
+ module ControllerMethods
4
+ def self.included(base)
5
+ base.helper_method :can?, :cannot?, :policy if base.respond_to? :helper_method
6
+ end
7
+
8
+ def policy
9
+ @policy ||= ::PapersPlease.new(current_user)
10
+ end
11
+
12
+ def can?(*args)
13
+ policy.can?(*args)
14
+ end
15
+
16
+ def cannot?(*args)
17
+ policy.cannot?(*args)
18
+ end
19
+
20
+ def authorize!(*args)
21
+ policy.authorize!(*args)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ require 'rails/railtie'
2
+
3
+ module PapersPlease
4
+ class Railtie < ::Rails::Railtie
5
+ rake_tasks do
6
+ Dir[File.join(File.dirname(__FILE__), 'tasks/*.rake')].each { |f| load f }
7
+ end
8
+
9
+ initializer :papers_plesae do
10
+ if defined? ActionController::Base
11
+ ActionController::Base.class_eval do
12
+ include PapersPlease::Rails::ControllerMethods
13
+ end
14
+ end
15
+
16
+ if defined? ActionController::API
17
+ ActionController::API.class_eval do
18
+ include PapersPlease::Rails::ControllerMethods
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -6,23 +6,28 @@ module PapersPlease
6
6
  @name = name
7
7
  @predicate = predicate
8
8
  @permissions = []
9
-
10
- instance_eval(&definition) unless definition.nil?
11
9
  end
12
10
 
13
11
  def applies_to?(user)
14
12
  return @predicate.call(user) if @predicate.is_a? Proc
13
+
15
14
  true
16
15
  end
17
16
 
18
- def add_permission(actions, klass, query: nil, predicate: nil)
17
+ def add_permission(actions, klass, query: nil, predicate: nil, granted_by: nil)
19
18
  prepare_actions(actions).each do |action|
20
19
  raise DuplicatePermission if permission_exists?(action, klass)
20
+ raise InvalidGrant, 'granted_by must be an array of [Class, Proc]' if !granted_by.nil? && !valid_grant?(granted_by)
21
21
 
22
22
  has_query = query.is_a?(Proc)
23
23
  has_predicate = predicate.is_a?(Proc)
24
24
  permission = Permission.new(action, klass)
25
25
 
26
+ if granted_by
27
+ permission.granting_class = granted_by[0]
28
+ permission.granted_by = granted_by[1]
29
+ end
30
+
26
31
  if has_query && has_predicate
27
32
  # Both query & predicate provided
28
33
 
@@ -30,7 +35,6 @@ module PapersPlease
30
35
  permission.predicate = predicate
31
36
  elsif has_query && !has_predicate
32
37
  # Only query provided
33
-
34
38
  permission.query = query
35
39
 
36
40
  if action == :create && actions == :manage
@@ -47,7 +51,6 @@ module PapersPlease
47
51
  end
48
52
  elsif !has_query && has_predicate
49
53
  # Only predicate provided
50
-
51
54
  permission.predicate = predicate
52
55
  else
53
56
  # Neither provided
@@ -72,10 +75,19 @@ module PapersPlease
72
75
 
73
76
  private
74
77
 
78
+ def valid_grant?(tuple)
79
+ return false unless tuple.is_a? Array
80
+ return false unless tuple.length == 2
81
+ return false unless tuple[0].is_a? Class
82
+ return false unless tuple[1].is_a? Proc
83
+
84
+ true
85
+ end
86
+
75
87
  # Wrap actions, translating :manage into :crud
76
88
  def prepare_actions(action)
77
- Array(*[action]).flat_map do |a|
78
- a == :manage ? [:create, :read, :update, :destroy] : [a]
89
+ Array(action).flat_map do |a|
90
+ a == :manage ? %i[create read update destroy] : [a]
79
91
  end
80
92
  end
81
93
  end
@@ -1,3 +1,3 @@
1
1
  module PapersPlease
2
- VERSION = "0.0.3.beta"
2
+ VERSION = '0.1.0'.freeze
3
3
  end
data/lib/papers_please.rb CHANGED
@@ -3,7 +3,44 @@ require 'papers_please/errors'
3
3
  require 'papers_please/policy'
4
4
  require 'papers_please/role'
5
5
  require 'papers_please/permission'
6
+ require 'papers_please/railtie' if defined? Rails
6
7
 
7
8
  module PapersPlease
8
- # Your code goes here...
9
+ def self.permissions_table(policy_klass)
10
+ require 'terminal-table'
11
+
12
+ policy = policy_klass.new(:system)
13
+
14
+ table = ::Terminal::Table.new do |t|
15
+ t.headings = [
16
+ 'role',
17
+ 'subject',
18
+ 'permission',
19
+ 'has query?',
20
+ 'has predicate?',
21
+ 'granted by other?'
22
+ ]
23
+
24
+ policy.roles.each_with_index do |(name, role), index|
25
+ t.add_separator unless index.zero?
26
+ first_line_of_role = true
27
+
28
+ role.permissions.group_by(&:subject).each do |subject, permissions|
29
+ permissions.each do |permission|
30
+ t.add_row [
31
+ first_line_of_role ? name : nil,
32
+ subject,
33
+ permission.key,
34
+ permission.query ? 'yes' : 'no',
35
+ permission.predicate ? 'yes' : 'no',
36
+ permission.granted_by_other? ? 'yes' : 'no',
37
+ ]
38
+
39
+ first_line_of_role = false
40
+ end
41
+ end
42
+ end
43
+ end
44
+ puts table
45
+ end
9
46
  end
@@ -1,29 +1,30 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "papers_please/version"
3
+ require 'papers_please/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "papers_please"
6
+ spec.name = 'papers_please'
8
7
  spec.version = PapersPlease::VERSION
9
- spec.authors = ["Apsis Labs"]
10
- spec.email = ["wyatt@apsis.io"]
8
+ spec.authors = ['Apsis Labs']
9
+ spec.email = ['wyatt@apsis.io']
11
10
 
12
- spec.summary = %q{A roles & permissions gem for ruby applications.}
13
- spec.homepage = "http://apsis.io"
14
- spec.license = "MIT"
11
+ spec.summary = 'A roles & permissions gem for ruby applications.'
12
+ spec.homepage = 'http://apsis.io'
13
+ spec.license = 'MIT'
15
14
 
16
15
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
16
  f.match(%r{^(test|spec|features)/})
18
17
  end
19
18
 
20
- spec.bindir = "exe"
19
+ spec.bindir = 'exe'
21
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_dependency 'terminal-table'
23
24
 
24
- spec.add_development_dependency "bundler", "~> 1.16"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "byebug"
25
+ spec.add_development_dependency 'bundler', '~> 2.0'
26
+ spec.add_development_dependency 'byebug'
27
+ spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.0'
28
29
  spec.add_development_dependency 'simplecov'
29
30
  end
metadata CHANGED
@@ -1,71 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: papers_please
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.beta
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Apsis Labs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-03 00:00:00.000000000 Z
11
+ date: 2019-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: terminal-table
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '1.16'
33
+ version: '2.0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '1.16'
40
+ version: '2.0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: rake
42
+ name: byebug
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '10.0'
47
+ version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '10.0'
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: rspec
56
+ name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '3.0'
61
+ version: '10.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '3.0'
68
+ version: '10.0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: byebug
70
+ name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0'
75
+ version: '3.0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0'
82
+ version: '3.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: simplecov
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -87,7 +101,6 @@ executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
- - ".byebug_history"
91
104
  - ".gitignore"
92
105
  - ".rspec"
93
106
  - ".travis.yml"
@@ -102,6 +115,8 @@ files:
102
115
  - lib/papers_please/errors.rb
103
116
  - lib/papers_please/permission.rb
104
117
  - lib/papers_please/policy.rb
118
+ - lib/papers_please/rails/controller_methods.rb
119
+ - lib/papers_please/railtie.rb
105
120
  - lib/papers_please/role.rb
106
121
  - lib/papers_please/version.rb
107
122
  - papers_please.gemspec
@@ -120,12 +135,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
135
  version: '0'
121
136
  required_rubygems_version: !ruby/object:Gem::Requirement
122
137
  requirements:
123
- - - ">"
138
+ - - ">="
124
139
  - !ruby/object:Gem::Version
125
- version: 1.3.1
140
+ version: '0'
126
141
  requirements: []
127
142
  rubyforge_project:
128
- rubygems_version: 2.7.6
143
+ rubygems_version: 2.6.13
129
144
  signing_key:
130
145
  specification_version: 4
131
146
  summary: A roles & permissions gem for ruby applications.
data/.byebug_history DELETED
@@ -1,60 +0,0 @@
1
- q
2
- @policy
3
- q
4
- permission
5
- c
6
- permission
7
- c
8
- permission
9
- c
10
- permission
11
- q
12
- res.include?(obj)
13
- posts.include?(obj)
14
- posts.include(obj)
15
- res
16
- obj
17
- c
18
- obj
19
- res.include?(obj)
20
- res.include?
21
- res
22
- c
23
- u.posts
24
- u
25
- c
26
- u
27
- c
28
- role
29
- q
30
- role
31
- q
32
- applicable_roles.count
33
- applicable_roles
34
- c
35
- q
36
- @user
37
- role.applies_to?(@user)
38
- role
39
- c
40
- q
41
- applicable_roles
42
- c
43
- q
44
- klass
45
- action
46
- permissions
47
- permission_exists?(action, klass)
48
- action
49
- q
50
- n
51
- s
52
- actions
53
- c
54
- n
55
- role
56
- c
57
- n
58
- roles.key?(:admin)
59
- roles
60
- name