rolypoly 0.1.2 → 0.2.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 +5 -13
 - data/.ruby-version +1 -1
 - data/README.md +43 -0
 - data/lib/rolypoly/controller_role_dsl.rb +13 -5
 - data/lib/rolypoly/role_gatekeeper.rb +19 -7
 - data/lib/rolypoly/version.rb +1 -1
 - data/rolypoly.gemspec +3 -3
 - data/spec/lib/rolypoly/controller_role_dsl_spec.rb +53 -5
 - data/spec/lib/rolypoly/role_gatekeeper_spec.rb +104 -62
 - data/spec/spec_helper.rb +0 -1
 - metadata +19 -17
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,15 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
              data.tar.gz: !binary |-
         
     | 
| 
       6 
     | 
    
         
            -
                ZjA1MmZkZmJhM2Q2NDAzZTdhNWI0YjQ5NzM3NjI2Y2MwYTQ5MDc4Yw==
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8cbaff5553d1ea031bdb189ab537a9ff7c72aadd
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 332873a3a06a886b821e12a0977ae9da8a13a781
         
     | 
| 
       7 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       8 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                NDNiMmJiMjFiZGQwOGM2MjgyOTlkNWJlOGYwNWMwMTlkMTY4NTdhN2YwOTdk
         
     | 
| 
       11 
     | 
    
         
            -
                YzJlZjQ5N2RjZjliNjE2M2JhNTVmNGRiMjE1MTUzNmFiMzYyMjM=
         
     | 
| 
       12 
     | 
    
         
            -
              data.tar.gz: !binary |-
         
     | 
| 
       13 
     | 
    
         
            -
                YTlhNWY1MzhjNDEzZDE5OTFmNWRiNzViZTY0NTM5OGQwNzI4YjIxYzc2NDNi
         
     | 
| 
       14 
     | 
    
         
            -
                N2Q4MjFiYTBlNjY2MTNkYWYyZTJlOTlhOGIxZTMwMmJmZDcxNjU3ODY1ZGY0
         
     | 
| 
       15 
     | 
    
         
            -
                ZGJjY2FlZDZjMTZmYzcxNTI4YmY4NWVjNGFlZjUzMGZkZWUzYWU=
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1e25dbecd6ba8902d65f210a800179c6e63908bd24daf6f77775c314ea22d9e3418abfbffc06c08f496157bcb1b7462faf30d73fef054844481026851496b0d5
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f76e7eebd9c64d69e4bc098a2730304dab04922dbe0e3206a77227ca4d0e1b3bc9ac838e8f3e4313393b17d972d3823566b840bbf72fdccb85d6d12c1c6c4f7e
         
     | 
    
        data/.ruby-version
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            2.2.0
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -93,6 +93,49 @@ class ProfilesController < ApplicationController 
     | 
|
| 
       93 
93 
     | 
    
         
             
            end
         
     | 
| 
       94 
94 
     | 
    
         
             
            ```
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
      
 96 
     | 
    
         
            +
            # Allow roles with a resource
         
     | 
| 
      
 97 
     | 
    
         
            +
            `allow_with_resource` acts similarly to `allow` but executes a resource check on the `SomeCustomerRoleObject` to access the endpoint.
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            This requires a method to be defined on `SomeCustomRoleObject` that checks if the resource is valid for that role.
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            The `role_resource` needs to be defined on the controller to pass the resource that the role will be validated against.
         
     | 
| 
      
 102 
     | 
    
         
            +
            If `role_resource` is not defined it will be defaulted to an empty hash `{}`.
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 106 
     | 
    
         
            +
            class SomeCustomRoleObject
         
     | 
| 
      
 107 
     | 
    
         
            +
              def resource?(resource)
         
     | 
| 
      
 108 
     | 
    
         
            +
                self.resources.includes?(resource)
         
     | 
| 
      
 109 
     | 
    
         
            +
              end
         
     | 
| 
      
 110 
     | 
    
         
            +
            end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            class ProfilesController < ApplicationController
         
     | 
| 
      
 113 
     | 
    
         
            +
              allow_with_resource(:admin).to_access(:index)
         
     | 
| 
      
 114 
     | 
    
         
            +
              allow_with_resource(:owner).to_access(:edit)
         
     | 
| 
      
 115 
     | 
    
         
            +
              publicize(:show)
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
              def index
         
     | 
| 
      
 118 
     | 
    
         
            +
                current_roles # => [#<SomeCustomRoleObject to_role_string: "admin", resource?: true >]
         
     | 
| 
      
 119 
     | 
    
         
            +
              end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
              def edit # Raises permission error before entering this
         
     | 
| 
      
 122 
     | 
    
         
            +
                current_roles # => []
         
     | 
| 
      
 123 
     | 
    
         
            +
              end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
              def show
         
     | 
| 
      
 126 
     | 
    
         
            +
                current_roles # => []
         
     | 
| 
      
 127 
     | 
    
         
            +
              end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
              private def current_user_roles
         
     | 
| 
      
 130 
     | 
    
         
            +
                current_user.roles # => [#<SomeCustomRoleObject to_role_string: "admin", resource?: true>, #<SomeCustomRoleObject to_role_string: "scorekeeper", resource?: false>]
         
     | 
| 
      
 131 
     | 
    
         
            +
              end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
              private def role_resource
         
     | 
| 
      
 134 
     | 
    
         
            +
                { resource: params[:resource_id] }
         
     | 
| 
      
 135 
     | 
    
         
            +
              end
         
     | 
| 
      
 136 
     | 
    
         
            +
            end
         
     | 
| 
      
 137 
     | 
    
         
            +
            ```
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
       96 
139 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       97 
140 
     | 
    
         | 
| 
       98 
141 
     | 
    
         
             
            1. Fork it
         
     | 
| 
         @@ -17,6 +17,10 @@ module Rolypoly 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  unless sub.method_defined? :current_user_roles
         
     | 
| 
       18 
18 
     | 
    
         
             
                    define_method(:current_user_roles) { [] }
         
     | 
| 
       19 
19 
     | 
    
         
             
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  unless sub.method_defined? :role_resource
         
     | 
| 
      
 22 
     | 
    
         
            +
                    define_method(:role_resource) { {} }
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
       20 
24 
     | 
    
         
             
                  sub.send :extend, ClassMethods
         
     | 
| 
       21 
25 
     | 
    
         
             
                end
         
     | 
| 
       22 
26 
     | 
    
         | 
| 
         @@ -31,8 +35,8 @@ module Rolypoly 
     | 
|
| 
       31 
35 
     | 
    
         
             
                def current_roles
         
     | 
| 
       32 
36 
     | 
    
         
             
                  return [] if rolypoly_gatekeepers.empty?
         
     | 
| 
       33 
37 
     | 
    
         
             
                  current_gatekeepers.reduce([]) { |array, gatekeeper|
         
     | 
| 
       34 
     | 
    
         
            -
                    if gatekeeper.role?  
     | 
| 
       35 
     | 
    
         
            -
                      array += Array(gatekeeper.allowed_roles(current_user_roles, action_name))
         
     | 
| 
      
 38 
     | 
    
         
            +
                    if gatekeeper.role?(current_user_roles, role_resource)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      array += Array(gatekeeper.allowed_roles(current_user_roles, action_name, role_resource))
         
     | 
| 
       36 
40 
     | 
    
         
             
                    end
         
     | 
| 
       37 
41 
     | 
    
         
             
                    array
         
     | 
| 
       38 
42 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -52,7 +56,7 @@ module Rolypoly 
     | 
|
| 
       52 
56 
     | 
    
         
             
                def rolypoly_role_access?
         
     | 
| 
       53 
57 
     | 
    
         
             
                  rolypoly_gatekeepers.empty? ||
         
     | 
| 
       54 
58 
     | 
    
         
             
                    rolypoly_gatekeepers.any? { |gatekeeper|
         
     | 
| 
       55 
     | 
    
         
            -
                      gatekeeper.allow? 
     | 
| 
      
 59 
     | 
    
         
            +
                      gatekeeper.allow?(current_roles, action_name, role_resource)
         
     | 
| 
       56 
60 
     | 
    
         
             
                    }
         
     | 
| 
       57 
61 
     | 
    
         
             
                end
         
     | 
| 
       58 
62 
     | 
    
         
             
                private :rolypoly_role_access?
         
     | 
| 
         @@ -75,6 +79,10 @@ module Rolypoly 
     | 
|
| 
       75 
79 
     | 
    
         
             
                    build_gatekeeper roles, nil
         
     | 
| 
       76 
80 
     | 
    
         
             
                  end
         
     | 
| 
       77 
81 
     | 
    
         | 
| 
      
 82 
     | 
    
         
            +
                  def allow_with_resource(*roles)
         
     | 
| 
      
 83 
     | 
    
         
            +
                    build_gatekeeper roles, nil, true
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
       78 
86 
     | 
    
         
             
                  def publicize(*actions)
         
     | 
| 
       79 
87 
     | 
    
         
             
                    restrict(*actions).to_none
         
     | 
| 
       80 
88 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -90,8 +98,8 @@ module Rolypoly 
     | 
|
| 
       90 
98 
     | 
    
         
             
                    end
         
     | 
| 
       91 
99 
     | 
    
         
             
                  end
         
     | 
| 
       92 
100 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
                  def build_gatekeeper(roles, actions)
         
     | 
| 
       94 
     | 
    
         
            -
                    RoleGatekeeper.new(roles, actions).tap { |gatekeeper|
         
     | 
| 
      
 101 
     | 
    
         
            +
                  def build_gatekeeper(roles, actions, require_resource = false)
         
     | 
| 
      
 102 
     | 
    
         
            +
                    RoleGatekeeper.new(roles, actions, require_resource).tap { |gatekeeper|
         
     | 
| 
       95 
103 
     | 
    
         
             
                      rolypoly_gatekeepers << gatekeeper
         
     | 
| 
       96 
104 
     | 
    
         
             
                    }
         
     | 
| 
       97 
105 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -2,9 +2,10 @@ require 'set' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            module Rolypoly
         
     | 
| 
       3 
3 
     | 
    
         
             
              class RoleGatekeeper
         
     | 
| 
       4 
4 
     | 
    
         
             
                attr_reader :roles
         
     | 
| 
       5 
     | 
    
         
            -
                def initialize(roles, actions)
         
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(roles, actions, require_resource)
         
     | 
| 
       6 
6 
     | 
    
         
             
                  self.roles = Set.new Array(roles).map(&:to_s)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  self.actions = Set.new Array(actions).map(&:to_s)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  self.require_resource = require_resource
         
     | 
| 
       8 
9 
     | 
    
         
             
                  self.all_actions = false
         
     | 
| 
       9 
10 
     | 
    
         
             
                  self.public = false
         
     | 
| 
       10 
11 
     | 
    
         
             
                end
         
     | 
| 
         @@ -31,14 +32,14 @@ module Rolypoly 
     | 
|
| 
       31 
32 
     | 
    
         
             
                  self.all_actions = true
         
     | 
| 
       32 
33 
     | 
    
         
             
                end
         
     | 
| 
       33 
34 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                def allow?(current_roles, action)
         
     | 
| 
      
 35 
     | 
    
         
            +
                def allow?(current_roles, action, resource)
         
     | 
| 
       35 
36 
     | 
    
         
             
                  action?(action) &&
         
     | 
| 
       36 
     | 
    
         
            -
                    role?(current_roles)
         
     | 
| 
      
 37 
     | 
    
         
            +
                    role?(current_roles, resource)
         
     | 
| 
       37 
38 
     | 
    
         
             
                end
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                def allowed_roles(current_roles, action)
         
     | 
| 
      
 40 
     | 
    
         
            +
                def allowed_roles(current_roles, action, resource)
         
     | 
| 
       40 
41 
     | 
    
         
             
                  return [] if public? || !action?(action)
         
     | 
| 
       41 
     | 
    
         
            -
                  match_roles(current_roles)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  match_roles(current_roles, resource)
         
     | 
| 
       42 
43 
     | 
    
         
             
                end
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
                def all_public
         
     | 
| 
         @@ -46,7 +47,8 @@ module Rolypoly 
     | 
|
| 
       46 
47 
     | 
    
         
             
                  self.all_actions = true
         
     | 
| 
       47 
48 
     | 
    
         
             
                end
         
     | 
| 
       48 
49 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                def role?(check_roles)
         
     | 
| 
      
 50 
     | 
    
         
            +
                def role?(check_roles, resource)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  check_roles = filter_roles_by_resource(check_roles, resource)
         
     | 
| 
       50 
52 
     | 
    
         
             
                  check_roles = Set.new sanitize_role_input(check_roles)
         
     | 
| 
       51 
53 
     | 
    
         
             
                  public? || !(check_roles & roles).empty?
         
     | 
| 
       52 
54 
     | 
    
         
             
                end
         
     | 
| 
         @@ -65,8 +67,10 @@ module Rolypoly 
     | 
|
| 
       65 
67 
     | 
    
         
             
                attr_accessor :actions
         
     | 
| 
       66 
68 
     | 
    
         
             
                attr_accessor :all_actions
         
     | 
| 
       67 
69 
     | 
    
         
             
                attr_accessor :public
         
     | 
| 
      
 70 
     | 
    
         
            +
                attr_accessor :require_resource
         
     | 
| 
       68 
71 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
                def match_roles(check_roles)
         
     | 
| 
      
 72 
     | 
    
         
            +
                def match_roles(check_roles, resource)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  check_roles = filter_roles_by_resource(check_roles, resource)
         
     | 
| 
       70 
74 
     | 
    
         
             
                  check_roles.reduce([]) { |array, role_object|
         
     | 
| 
       71 
75 
     | 
    
         
             
                    array << role_object if roles.include?(sanitize_role_object(role_object))
         
     | 
| 
       72 
76 
     | 
    
         
             
                    array
         
     | 
| 
         @@ -74,6 +78,14 @@ module Rolypoly 
     | 
|
| 
       74 
78 
     | 
    
         
             
                end
         
     | 
| 
       75 
79 
     | 
    
         
             
                private :match_roles
         
     | 
| 
       76 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
                def filter_roles_by_resource(check_roles, resource)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  return check_roles if check_roles.nil? || !require_resource
         
     | 
| 
      
 83 
     | 
    
         
            +
                  check_roles.select do |check_role|
         
     | 
| 
      
 84 
     | 
    
         
            +
                    check_role.respond_to?(:resource?) && check_role.resource?(resource)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
                private :filter_roles_by_resource
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
       77 
89 
     | 
    
         
             
                def sanitize_role_input(role_objects)
         
     | 
| 
       78 
90 
     | 
    
         
             
                  Array(role_objects).map { |r| sanitize_role_object(r) }
         
     | 
| 
       79 
91 
     | 
    
         
             
                end
         
     | 
    
        data/lib/rolypoly/version.rb
    CHANGED
    
    
    
        data/rolypoly.gemspec
    CHANGED
    
    | 
         @@ -6,8 +6,8 @@ require 'rolypoly/version' 
     | 
|
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       7 
7 
     | 
    
         
             
              spec.name          = "rolypoly"
         
     | 
| 
       8 
8 
     | 
    
         
             
              spec.version       = Rolypoly::VERSION
         
     | 
| 
       9 
     | 
    
         
            -
              spec.authors       = ["Jon Phenow"]
         
     | 
| 
       10 
     | 
    
         
            -
              spec.email         = ["j.phenow@gmail.com"]
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.authors       = ["Jon Phenow", "Jake Waletzko"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.email         = ["j.phenow@gmail.com", "jnwaletzko@gmail.com"]
         
     | 
| 
       11 
11 
     | 
    
         
             
              spec.description   = %q{Tools for handling per-action and per-app Role authorization}
         
     | 
| 
       12 
12 
     | 
    
         
             
              spec.summary       = %q{Tools for handling per-action and per-app Role authorization}
         
     | 
| 
       13 
13 
     | 
    
         
             
              spec.homepage      = "https://github.com/sportngin/rolypoly"
         
     | 
| 
         @@ -18,7 +18,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       18 
18 
     | 
    
         
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
       19 
19 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
              spec.add_development_dependency "bundler", "~> 1. 
     | 
| 
      
 21 
     | 
    
         
            +
              spec.add_development_dependency "bundler", "~> 1.8"
         
     | 
| 
       22 
22 
     | 
    
         
             
              spec.add_development_dependency "rake"
         
     | 
| 
       23 
23 
     | 
    
         
             
              spec.add_development_dependency "rspec"
         
     | 
| 
       24 
24 
     | 
    
         
             
            end
         
     | 
| 
         @@ -15,6 +15,7 @@ module Rolypoly 
     | 
|
| 
       15 
15 
     | 
    
         
             
                subject { example_controller }
         
     | 
| 
       16 
16 
     | 
    
         
             
                it { should respond_to :restrict }
         
     | 
| 
       17 
17 
     | 
    
         
             
                it { should respond_to :allow }
         
     | 
| 
      
 18 
     | 
    
         
            +
                it { should respond_to :allow_with_resource }
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
                describe "setting up with DSL" do
         
     | 
| 
       20 
21 
     | 
    
         
             
                  describe "from allow side" do
         
     | 
| 
         @@ -23,14 +24,15 @@ module Rolypoly 
     | 
|
| 
       23 
24 
     | 
    
         
             
                    before do
         
     | 
| 
       24 
25 
     | 
    
         
             
                      subject.allow(:admin).to_access(:index)
         
     | 
| 
       25 
26 
     | 
    
         
             
                      subject.publicize(:landing)
         
     | 
| 
       26 
     | 
    
         
            -
                      controller_instance. 
     | 
| 
      
 27 
     | 
    
         
            +
                      allow(controller_instance).to receive(:current_user_roles).and_return(current_user_roles)
         
     | 
| 
      
 28 
     | 
    
         
            +
                      allow(controller_instance).to receive(:action_name).and_return(action_name)
         
     | 
| 
       27 
29 
     | 
    
         
             
                    end
         
     | 
| 
       28 
30 
     | 
    
         | 
| 
       29 
31 
     | 
    
         
             
                    describe "#index" do
         
     | 
| 
       30 
32 
     | 
    
         
             
                      let(:action_name) { "index" }
         
     | 
| 
       31 
33 
     | 
    
         | 
| 
       32 
34 
     | 
    
         
             
                      it "is not public" do
         
     | 
| 
       33 
     | 
    
         
            -
                        controller_instance. 
     | 
| 
      
 35 
     | 
    
         
            +
                        expect(controller_instance).to_not be_public
         
     | 
| 
       34 
36 
     | 
    
         
             
                      end
         
     | 
| 
       35 
37 
     | 
    
         | 
| 
       36 
38 
     | 
    
         
             
                      it "allows admin access" do
         
     | 
| 
         @@ -39,7 +41,7 @@ module Rolypoly 
     | 
|
| 
       39 
41 
     | 
    
         
             
                      end
         
     | 
| 
       40 
42 
     | 
    
         | 
| 
       41 
43 
     | 
    
         
             
                      it "can get current_roles from controller" do
         
     | 
| 
       42 
     | 
    
         
            -
                        controller_instance.current_roles. 
     | 
| 
      
 44 
     | 
    
         
            +
                        expect(controller_instance.current_roles).to eq([RoleObject.new(:admin)])
         
     | 
| 
       43 
45 
     | 
    
         
             
                      end
         
     | 
| 
       44 
46 
     | 
    
         
             
                    end
         
     | 
| 
       45 
47 
     | 
    
         | 
| 
         @@ -51,7 +53,7 @@ module Rolypoly 
     | 
|
| 
       51 
53 
     | 
    
         
             
                      end
         
     | 
| 
       52 
54 
     | 
    
         | 
| 
       53 
55 
     | 
    
         
             
                      it "is not public" do
         
     | 
| 
       54 
     | 
    
         
            -
                        controller_instance. 
     | 
| 
      
 56 
     | 
    
         
            +
                        expect(controller_instance).to_not be_public
         
     | 
| 
       55 
57 
     | 
    
         
             
                      end
         
     | 
| 
       56 
58 
     | 
    
         
             
                    end
         
     | 
| 
       57 
59 
     | 
    
         | 
| 
         @@ -70,11 +72,57 @@ module Rolypoly 
     | 
|
| 
       70 
72 
     | 
    
         
             
                        end
         
     | 
| 
       71 
73 
     | 
    
         | 
| 
       72 
74 
     | 
    
         
             
                        it "is public" do
         
     | 
| 
       73 
     | 
    
         
            -
                          controller_instance. 
     | 
| 
      
 75 
     | 
    
         
            +
                          expect(controller_instance).to be_public
         
     | 
| 
       74 
76 
     | 
    
         
             
                        end
         
     | 
| 
       75 
77 
     | 
    
         
             
                      end
         
     | 
| 
       76 
78 
     | 
    
         
             
                    end
         
     | 
| 
       77 
79 
     | 
    
         
             
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  describe "from allow_with_resource side" do
         
     | 
| 
      
 82 
     | 
    
         
            +
                    let(:controller_instance) { subject.new }
         
     | 
| 
      
 83 
     | 
    
         
            +
                    let(:admin_role) { RoleObject.new(:admin) }
         
     | 
| 
      
 84 
     | 
    
         
            +
                    let(:scorekeeper_role) { RoleObject.new(:scorekeeper) }
         
     | 
| 
      
 85 
     | 
    
         
            +
                    let(:current_user_roles) { [admin_role, scorekeeper_role] }
         
     | 
| 
      
 86 
     | 
    
         
            +
                    let(:role_resource) { {resource: 123} }
         
     | 
| 
      
 87 
     | 
    
         
            +
                    let(:check_access!) { controller_instance.rolypoly_check_role_access! }
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 90 
     | 
    
         
            +
                      subject.allow_with_resource(:admin).to_access(:index)
         
     | 
| 
      
 91 
     | 
    
         
            +
                      subject.publicize(:landing)
         
     | 
| 
      
 92 
     | 
    
         
            +
                      allow(admin_role).to receive(:resource?).and_return true
         
     | 
| 
      
 93 
     | 
    
         
            +
                      allow(controller_instance).to receive(:current_user_roles).and_return(current_user_roles)
         
     | 
| 
      
 94 
     | 
    
         
            +
                      allow(controller_instance).to receive(:action_name).and_return(action_name)
         
     | 
| 
      
 95 
     | 
    
         
            +
                      allow(controller_instance).to receive(:role_resource).and_return(role_resource)
         
     | 
| 
      
 96 
     | 
    
         
            +
                    end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    describe "#index" do
         
     | 
| 
      
 99 
     | 
    
         
            +
                      let(:action_name) { "index" }
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                      it { expect(controller_instance).to_not be_public }
         
     | 
| 
      
 102 
     | 
    
         
            +
                      it { expect{ check_access! }.not_to raise_error }
         
     | 
| 
      
 103 
     | 
    
         
            +
                      it { expect(controller_instance.current_roles).to eq([RoleObject.new(:admin)])}
         
     | 
| 
      
 104 
     | 
    
         
            +
                    end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                    describe "#show" do
         
     | 
| 
      
 107 
     | 
    
         
            +
                      let(:action_name) { "show" }
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                      it { expect{ check_access! }.to raise_error(Rolypoly::FailedRoleCheckError)}
         
     | 
| 
      
 110 
     | 
    
         
            +
                      it { expect(controller_instance).to_not be_public }
         
     | 
| 
      
 111 
     | 
    
         
            +
                    end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                    describe "#landing" do
         
     | 
| 
      
 114 
     | 
    
         
            +
                      let(:action_name) { "landing" }
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                      it { expect{ check_access! }.not_to raise_error }
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                      describe "with no role" do
         
     | 
| 
      
 119 
     | 
    
         
            +
                        let(:current_roles) { [] }
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                        it { expect { check_access! }.not_to raise_error }
         
     | 
| 
      
 122 
     | 
    
         
            +
                        it { expect(controller_instance).to be_public }
         
     | 
| 
      
 123 
     | 
    
         
            +
                      end
         
     | 
| 
      
 124 
     | 
    
         
            +
                    end
         
     | 
| 
      
 125 
     | 
    
         
            +
                  end
         
     | 
| 
       78 
126 
     | 
    
         
             
                end
         
     | 
| 
       79 
127 
     | 
    
         
             
              end
         
     | 
| 
       80 
128 
     | 
    
         
             
            end
         
     | 
| 
         @@ -4,102 +4,144 @@ module Rolypoly 
     | 
|
| 
       4 
4 
     | 
    
         
             
              describe RoleGatekeeper do
         
     | 
| 
       5 
5 
     | 
    
         
             
                let(:roles) { %w[admin scorekeeper] }
         
     | 
| 
       6 
6 
     | 
    
         
             
                let(:actions) { %w[index show] }
         
     | 
| 
      
 7 
     | 
    
         
            +
                let(:resource) { {} }
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                context "resource not required" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  subject { described_class.new roles, actions, false }
         
     | 
| 
       9 
11 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  it "should allow scorekeepr access to index" do
         
     | 
| 
       16 
     | 
    
         
            -
                    subject.allow?([:scorekeeper], "index").should be_true
         
     | 
| 
       17 
     | 
    
         
            -
                  end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                  it "should not allow scorekeepr access to edit" do
         
     | 
| 
       20 
     | 
    
         
            -
                    subject.allow?([:scorekeeper], "edit").should be_false
         
     | 
| 
       21 
     | 
    
         
            -
                  end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  describe "all public" do
         
     | 
| 
       24 
     | 
    
         
            -
                    before do
         
     | 
| 
       25 
     | 
    
         
            -
                      subject.all_public
         
     | 
| 
       26 
     | 
    
         
            -
                    end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                    it "should allow whatever" do
         
     | 
| 
       29 
     | 
    
         
            -
                      subject.allow?(nil, nil).should be_true
         
     | 
| 
      
 12 
     | 
    
         
            +
                  shared_examples_for "allow should behave correctly" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                    it "shouldn't auto-allow" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                      expect(subject.allow?(nil, nil, resource)).to be false
         
     | 
| 
       30 
15 
     | 
    
         
             
                    end
         
     | 
| 
       31 
16 
     | 
    
         | 
| 
       32 
17 
     | 
    
         
             
                    it "should allow scorekeepr access to index" do
         
     | 
| 
       33 
     | 
    
         
            -
                      subject.allow?([:scorekeeper], "index"). 
     | 
| 
      
 18 
     | 
    
         
            +
                      expect(subject.allow?([:scorekeeper], "index", resource)).to be true
         
     | 
| 
       34 
19 
     | 
    
         
             
                    end
         
     | 
| 
       35 
20 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                    it "should allow scorekeepr access to edit" do
         
     | 
| 
       37 
     | 
    
         
            -
                      subject.allow?([:scorekeeper], "edit"). 
     | 
| 
      
 21 
     | 
    
         
            +
                    it "should not allow scorekeepr access to edit" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                      expect(subject.allow?([:scorekeeper], "edit", resource)).to be false
         
     | 
| 
       38 
23 
     | 
    
         
             
                    end
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
24 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
                    describe "all public" do
         
     | 
| 
      
 26 
     | 
    
         
            +
                      before do
         
     | 
| 
      
 27 
     | 
    
         
            +
                        subject.all_public
         
     | 
| 
      
 28 
     | 
    
         
            +
                      end
         
     | 
| 
       45 
29 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
                      it "should allow whatever" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                        expect(subject.allow?(nil, nil, resource)).to be true
         
     | 
| 
      
 32 
     | 
    
         
            +
                      end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                      it "should allow scorekeepr access to index" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                        expect(subject.allow?([:scorekeeper], "index", resource)).to be true
         
     | 
| 
      
 36 
     | 
    
         
            +
                      end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                      it "should allow scorekeepr access to edit" do
         
     | 
| 
      
 39 
     | 
    
         
            +
                        expect(subject.allow?([:scorekeeper], "edit", resource)).to be true
         
     | 
| 
      
 40 
     | 
    
         
            +
                      end
         
     | 
| 
       48 
41 
     | 
    
         
             
                    end
         
     | 
| 
       49 
42 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                     
     | 
| 
       51 
     | 
    
         
            -
                       
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
                    describe "all roles" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                      before do
         
     | 
| 
      
 45 
     | 
    
         
            +
                        subject.to_none
         
     | 
| 
      
 46 
     | 
    
         
            +
                      end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                      it "shouldn't auto-allow" do
         
     | 
| 
      
 49 
     | 
    
         
            +
                        expect(subject.allow?(nil, nil, resource)).to be false
         
     | 
| 
      
 50 
     | 
    
         
            +
                      end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                      it "should allow scorekeepr access to index" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                        expect(subject.allow?([:janitor], "index", resource)).to be true
         
     | 
| 
      
 54 
     | 
    
         
            +
                        expect(subject.allow?([:admin], "index", resource)).to be true
         
     | 
| 
      
 55 
     | 
    
         
            +
                      end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                      it "to should not allow scorekeepr access to edit" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                        expect(subject.allow?([:scorekeeper], "edit", resource)).to be false
         
     | 
| 
      
 59 
     | 
    
         
            +
                        expect(subject.allow?([:janitor], "edit", resource)).to be false
         
     | 
| 
      
 60 
     | 
    
         
            +
                      end
         
     | 
| 
       53 
61 
     | 
    
         
             
                    end
         
     | 
| 
       54 
62 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                     
     | 
| 
       56 
     | 
    
         
            -
                       
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 63 
     | 
    
         
            +
                    describe "all actions" do
         
     | 
| 
      
 64 
     | 
    
         
            +
                      before do
         
     | 
| 
      
 65 
     | 
    
         
            +
                        subject.to_all
         
     | 
| 
      
 66 
     | 
    
         
            +
                      end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                      it "shouldn't auto-allow" do
         
     | 
| 
      
 69 
     | 
    
         
            +
                        expect(subject.allow?(nil, nil, resource)).to be false
         
     | 
| 
      
 70 
     | 
    
         
            +
                      end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                      it "should allow scorekeepr access to index" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                        expect(subject.allow?([:scorekeeper], "index", resource)).to be true
         
     | 
| 
      
 74 
     | 
    
         
            +
                      end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                      it "shouldn't allow janitor access to any" do
         
     | 
| 
      
 77 
     | 
    
         
            +
                        expect(subject.allow?([:janitor], "index", resource)).to be false
         
     | 
| 
      
 78 
     | 
    
         
            +
                      end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                      it "should allow scorekeepr access to edit" do
         
     | 
| 
      
 81 
     | 
    
         
            +
                        expect(subject.allow?([:scorekeeper], "edit", resource)).to be true
         
     | 
| 
      
 82 
     | 
    
         
            +
                      end
         
     | 
| 
       58 
83 
     | 
    
         
             
                    end
         
     | 
| 
       59 
84 
     | 
    
         
             
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
                  it_should_behave_like "allow should behave correctly"
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  describe "with only roles set" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                    let(:actions) { [] }
         
     | 
| 
       60 
89 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
                  describe "all actions" do
         
     | 
| 
       62 
90 
     | 
    
         
             
                    before do
         
     | 
| 
       63 
     | 
    
         
            -
                      subject. 
     | 
| 
      
 91 
     | 
    
         
            +
                      subject.to_access(:index, :show)
         
     | 
| 
       64 
92 
     | 
    
         
             
                    end
         
     | 
| 
       65 
93 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                     
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                    end
         
     | 
| 
      
 94 
     | 
    
         
            +
                    it_should_behave_like "allow should behave correctly"
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
       69 
96 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                    end
         
     | 
| 
      
 97 
     | 
    
         
            +
                  describe "with only actions set" do
         
     | 
| 
      
 98 
     | 
    
         
            +
                    let(:roles) { [] }
         
     | 
| 
       73 
99 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                     
     | 
| 
       75 
     | 
    
         
            -
                      subject. 
     | 
| 
      
 100 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 101 
     | 
    
         
            +
                      subject.to(:admin, :scorekeeper)
         
     | 
| 
       76 
102 
     | 
    
         
             
                    end
         
     | 
| 
       77 
103 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                     
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
      
 104 
     | 
    
         
            +
                    it_should_behave_like "allow should behave correctly"
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                  describe "with resource defined" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                    let(:resource) { [organization: 123] }
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 111 
     | 
    
         
            +
                      subject.to(:admin, :scorekeeper)
         
     | 
| 
       80 
112 
     | 
    
         
             
                    end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                    it_should_behave_like "allow should behave correctly"
         
     | 
| 
       81 
115 
     | 
    
         
             
                  end
         
     | 
| 
       82 
116 
     | 
    
         
             
                end
         
     | 
| 
       83 
     | 
    
         
            -
                it_should_behave_like "allow should behave correctly"
         
     | 
| 
       84 
117 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                 
     | 
| 
       86 
     | 
    
         
            -
                  let(: 
     | 
| 
      
 118 
     | 
    
         
            +
                context "resource required" do
         
     | 
| 
      
 119 
     | 
    
         
            +
                  let(:scorekeeper_role) { RoleObject.new(:scorekeeper) }
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                  subject { described_class.new roles, actions, true }
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                  describe "resource does not match" do
         
     | 
| 
      
 124 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 125 
     | 
    
         
            +
                      allow(scorekeeper_role).to receive(:resource?).and_return false
         
     | 
| 
      
 126 
     | 
    
         
            +
                      allow(scorekeeper_role).to receive(:to_role_string).and_return "scorekeeper"
         
     | 
| 
      
 127 
     | 
    
         
            +
                    end 
         
     | 
| 
       87 
128 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 129 
     | 
    
         
            +
                    it { expect(subject.allow?(nil, nil, resource)).to be false }
         
     | 
| 
      
 130 
     | 
    
         
            +
                    it { expect(subject.allow?([scorekeeper_role], "index", resource)).to be false }
         
     | 
| 
      
 131 
     | 
    
         
            +
                    it { expect(subject.allow?([scorekeeper_role], "edit", resource)).to be false }
         
     | 
| 
       90 
132 
     | 
    
         
             
                  end
         
     | 
| 
       91 
133 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
                   
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
      
 134 
     | 
    
         
            +
                  describe "resource matches" do
         
     | 
| 
      
 135 
     | 
    
         
            +
                    let(:resource) { {resource: 123} }
         
     | 
| 
       94 
136 
     | 
    
         | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
      
 137 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 138 
     | 
    
         
            +
                      allow(scorekeeper_role).to receive(:resource?).and_return true
         
     | 
| 
      
 139 
     | 
    
         
            +
                    end
         
     | 
| 
       97 
140 
     | 
    
         | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                    subject. 
     | 
| 
      
 141 
     | 
    
         
            +
                    it { expect(subject.allow?(nil, nil, resource)).to be false }
         
     | 
| 
      
 142 
     | 
    
         
            +
                    it { expect(subject.allow?([scorekeeper_role], "index", resource)).to be true }
         
     | 
| 
      
 143 
     | 
    
         
            +
                    it { expect(subject.allow?([scorekeeper_role], "edit", resource)).to be false }
         
     | 
| 
       100 
144 
     | 
    
         
             
                  end
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                  it_should_behave_like "allow should behave correctly"
         
     | 
| 
       103 
145 
     | 
    
         
             
                end
         
     | 
| 
       104 
146 
     | 
    
         
             
              end
         
     | 
| 
       105 
147 
     | 
    
         
             
            end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,68 +1,70 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rolypoly
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Jon Phenow
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Jake Waletzko
         
     | 
| 
       8 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2016-12-09 00:00:00.000000000 Z
         
     | 
| 
       12 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
15 
     | 
    
         
             
              name: bundler
         
     | 
| 
       15 
16 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
17 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 18 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       18 
19 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: '1. 
     | 
| 
      
 20 
     | 
    
         
            +
                    version: '1.8'
         
     | 
| 
       20 
21 
     | 
    
         
             
              type: :development
         
     | 
| 
       21 
22 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
23 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
24 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 25 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       25 
26 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: '1. 
     | 
| 
      
 27 
     | 
    
         
            +
                    version: '1.8'
         
     | 
| 
       27 
28 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
29 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
30 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       30 
31 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
     | 
    
         
            -
                - -  
     | 
| 
      
 32 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       32 
33 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
34 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       34 
35 
     | 
    
         
             
              type: :development
         
     | 
| 
       35 
36 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
37 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       37 
38 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
     | 
    
         
            -
                - -  
     | 
| 
      
 39 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       39 
40 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
41 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       41 
42 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
43 
     | 
    
         
             
              name: rspec
         
     | 
| 
       43 
44 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       44 
45 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
     | 
    
         
            -
                - -  
     | 
| 
      
 46 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       46 
47 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
48 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       48 
49 
     | 
    
         
             
              type: :development
         
     | 
| 
       49 
50 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
51 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
52 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
     | 
    
         
            -
                - -  
     | 
| 
      
 53 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       53 
54 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
55 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       55 
56 
     | 
    
         
             
            description: Tools for handling per-action and per-app Role authorization
         
     | 
| 
       56 
57 
     | 
    
         
             
            email:
         
     | 
| 
       57 
58 
     | 
    
         
             
            - j.phenow@gmail.com
         
     | 
| 
      
 59 
     | 
    
         
            +
            - jnwaletzko@gmail.com
         
     | 
| 
       58 
60 
     | 
    
         
             
            executables: []
         
     | 
| 
       59 
61 
     | 
    
         
             
            extensions: []
         
     | 
| 
       60 
62 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       61 
63 
     | 
    
         
             
            files:
         
     | 
| 
       62 
     | 
    
         
            -
            - .gitignore
         
     | 
| 
       63 
     | 
    
         
            -
            - .rspec
         
     | 
| 
       64 
     | 
    
         
            -
            - .ruby-gemset
         
     | 
| 
       65 
     | 
    
         
            -
            - .ruby-version
         
     | 
| 
      
 64 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
      
 65 
     | 
    
         
            +
            - ".rspec"
         
     | 
| 
      
 66 
     | 
    
         
            +
            - ".ruby-gemset"
         
     | 
| 
      
 67 
     | 
    
         
            +
            - ".ruby-version"
         
     | 
| 
       66 
68 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       67 
69 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       68 
70 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -85,17 +87,17 @@ require_paths: 
     | 
|
| 
       85 
87 
     | 
    
         
             
            - lib
         
     | 
| 
       86 
88 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
       87 
89 
     | 
    
         
             
              requirements:
         
     | 
| 
       88 
     | 
    
         
            -
              - -  
     | 
| 
      
 90 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       89 
91 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       90 
92 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       91 
93 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       92 
94 
     | 
    
         
             
              requirements:
         
     | 
| 
       93 
     | 
    
         
            -
              - -  
     | 
| 
      
 95 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       94 
96 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       95 
97 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       96 
98 
     | 
    
         
             
            requirements: []
         
     | 
| 
       97 
99 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       98 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 100 
     | 
    
         
            +
            rubygems_version: 2.4.8
         
     | 
| 
       99 
101 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       100 
102 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       101 
103 
     | 
    
         
             
            summary: Tools for handling per-action and per-app Role authorization
         
     |