grant-front 0.0.2 → 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 +4 -4
- data/README.md +11 -0
- data/grant-front.gemspec +1 -0
- data/lib/grant-front.rb +5 -4
- data/lib/grant-front/diagram.rb +40 -0
- data/lib/grant-front/engine.rb +40 -0
- data/lib/grant-front/policy.rb +26 -19
- data/lib/grant-front/version.rb +1 -1
- data/lib/tasks/grant-front.rake +1 -1
- data/lib/templates/layouts/application.html.erb +37 -0
- metadata +18 -2
- data/lib/grant-front/grant.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d962be2a4ad6dc6601aa2286f7d4de23349605da
|
4
|
+
data.tar.gz: bda9107afc0721585ff8304c6d7a531eea480d58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 310d425f08fec632a0f4c81ca2cf62ea45fb2087bd450aa903fa99b06e90ed778d3eaadc8e905f3861e164739322a368ee3491875b7032b5bf16e7800b8e17b3
|
7
|
+
data.tar.gz: bda285de8ccd444fb5bfc5419757461f0d909f4467b75a820714c44c1c913f9d01c85cbfd08b7653e66af3d978a75e80fe0524625e610ae5f5b12cefd7cdfbca
|
data/README.md
CHANGED
@@ -26,6 +26,8 @@ $ gem install grant-front
|
|
26
26
|
|
27
27
|
## Usage
|
28
28
|
|
29
|
+
### Policy Example
|
30
|
+
|
29
31
|
```
|
30
32
|
class ApplicationPolicy
|
31
33
|
include GrantFront
|
@@ -54,6 +56,8 @@ class UserPolicy < ApplicationPolicy
|
|
54
56
|
end
|
55
57
|
```
|
56
58
|
|
59
|
+
### Rake
|
60
|
+
|
57
61
|
```
|
58
62
|
$ rake grant_front:draw
|
59
63
|
```
|
@@ -64,6 +68,13 @@ $ rake grant_front:draw
|
|
64
68
|
|update|o|o||
|
65
69
|
|destroy||o|o|
|
66
70
|
|
71
|
+
### Rack
|
72
|
+
|
73
|
+
Add this line to your `config/routes.rb`:
|
74
|
+
|
75
|
+
```
|
76
|
+
mount GrantFront::Engine, at: '/rails/info/policies'
|
77
|
+
```
|
67
78
|
|
68
79
|
## License
|
69
80
|
|
data/grant-front.gemspec
CHANGED
data/lib/grant-front.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require_relative 'grant-front/version'
|
2
|
+
require_relative 'grant-front/policy'
|
3
|
+
require_relative 'grant-front/diagram'
|
4
|
+
require_relative 'grant-front/engine'
|
4
5
|
|
5
6
|
module GrantFront
|
6
7
|
def self.included(klass)
|
@@ -32,4 +33,4 @@ module GrantFront
|
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
|
-
|
36
|
+
require_relative 'grant-front/rails' if defined? Rails::Railtie
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module GrantFront
|
2
|
+
class Diagram
|
3
|
+
class << self
|
4
|
+
def draw(options={})
|
5
|
+
puts self.new(options).create
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(options={})
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
policies = {}
|
15
|
+
GrantFront::Policy.all(@options).each do |klass|
|
16
|
+
policies[klass.to_s.to_sym] = GrantFront::Policy.find(klass)
|
17
|
+
end
|
18
|
+
|
19
|
+
text = ''
|
20
|
+
policies.keys.each do |policy|
|
21
|
+
text += "\n### #{policy.to_s.gsub(/Policy$/, '')} \n\n"
|
22
|
+
if policies[policy][:roles].count > 0
|
23
|
+
text += "||#{policies[policy][:roles].join('|')}|\n"
|
24
|
+
text += "|:-:|#{policies[policy][:roles].map{':-:'}.join('|')}|\n"
|
25
|
+
policies[policy][:methods].keys.each do |method|
|
26
|
+
raw = "|#{method}|"
|
27
|
+
policies[policy][:roles].each do |role|
|
28
|
+
raw += 'o' if policies[policy][:methods][method].include?(role)
|
29
|
+
raw += '|'
|
30
|
+
end
|
31
|
+
text += "#{raw}\n"
|
32
|
+
end
|
33
|
+
else
|
34
|
+
text += "* no policy\n"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
text
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rack'
|
2
|
+
require 'kramdown'
|
3
|
+
require 'erb'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
module GrantFront
|
7
|
+
class Engine
|
8
|
+
attr_accessor :request, :tree
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
@request = Rack::Request.new(env)
|
12
|
+
text = Diagram.new(rake: false).create
|
13
|
+
policy_tag = Kramdown::Document.new(text).to_html
|
14
|
+
|
15
|
+
status = 200
|
16
|
+
headers = {'Content-Type' => 'text/html'}
|
17
|
+
body = ERB.new(application_template).result(binding)
|
18
|
+
|
19
|
+
[status, headers, [body]]
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def application_template
|
24
|
+
root_path = Pathname.new(File.expand_path('..', File.dirname(__FILE__)))
|
25
|
+
templates_path = File.join(root_path, 'templates')
|
26
|
+
application_layout = File.expand_path('application.html.erb', File.join(templates_path, 'layouts'))
|
27
|
+
File.read(application_layout)
|
28
|
+
end
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def prototype
|
32
|
+
@prototype ||= new
|
33
|
+
end
|
34
|
+
|
35
|
+
def call(env)
|
36
|
+
prototype.call(env)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/grant-front/policy.rb
CHANGED
@@ -1,26 +1,42 @@
|
|
1
1
|
module GrantFront
|
2
2
|
class Policy
|
3
3
|
class << self
|
4
|
-
def all
|
5
|
-
|
4
|
+
def all(options={})
|
5
|
+
options[:rake] = true if options[:rake].nil?
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
if defined? Rails
|
8
|
+
path = Rails.root.join('app/policies/*.rb').to_s
|
9
|
+
constants = Dir.glob(path).inject([]) do |arr, item|
|
10
|
+
require item if options[:rake]
|
11
|
+
name = File.basename(item, '.*')
|
12
|
+
unless name == 'application_policy'
|
13
|
+
arr << Object.const_get(name.camelize)
|
14
|
+
end
|
15
|
+
arr
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
if options[:rake]
|
20
|
+
constants = Object.constants.inject([]) do |arr, name|
|
21
|
+
unless name == :Config
|
22
|
+
klass = Object.const_get(name)
|
23
|
+
if klass.class == Class && klass.superclass == ApplicationPolicy
|
24
|
+
arr << klass
|
25
|
+
end
|
12
26
|
end
|
27
|
+
arr
|
13
28
|
end
|
14
|
-
arr
|
15
29
|
end
|
30
|
+
|
31
|
+
constants
|
16
32
|
end
|
17
33
|
|
18
34
|
def find(klass=nil)
|
19
35
|
raw = {methods: {}, roles: []}
|
20
36
|
reg = Regexp.new(/\?$/)
|
21
37
|
user = Struct.new(:id, :roles).new(1, [])
|
22
|
-
ApplicationPolicy.mock!
|
23
38
|
|
39
|
+
klass.mock!
|
24
40
|
policy = klass.new(user, user)
|
25
41
|
policy.methods.each do |name|
|
26
42
|
if name =~ reg
|
@@ -34,19 +50,10 @@ module GrantFront
|
|
34
50
|
end
|
35
51
|
end
|
36
52
|
end
|
37
|
-
|
53
|
+
klass.unmock!
|
38
54
|
|
39
55
|
raw
|
40
56
|
end
|
41
|
-
|
42
|
-
private
|
43
|
-
def requires
|
44
|
-
if defined? Rails
|
45
|
-
Dir.glob(Rails.root.join('app/policies/*.rb').to_s).each do |name|
|
46
|
-
require name
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
57
|
end
|
51
58
|
end
|
52
59
|
end
|
data/lib/grant-front/version.rb
CHANGED
data/lib/tasks/grant-front.rake
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head><title>Policies</title>
|
4
|
+
<style type="text/css">
|
5
|
+
body { background-color: #fff; color: #333; }
|
6
|
+
|
7
|
+
body, p, ol, ul, td {
|
8
|
+
font-family: helvetica, verdana, arial, sans-serif;
|
9
|
+
font-size: 13px;
|
10
|
+
line-height: 18px;
|
11
|
+
}
|
12
|
+
|
13
|
+
pre {
|
14
|
+
background-color: #eee;
|
15
|
+
padding: 10px;
|
16
|
+
font-size: 11px;
|
17
|
+
white-space: pre-wrap;
|
18
|
+
}
|
19
|
+
|
20
|
+
div.policy {
|
21
|
+
padding-top: 8px;
|
22
|
+
padding-left: 80px;
|
23
|
+
}
|
24
|
+
</style>
|
25
|
+
|
26
|
+
<script type="text/ecmascript">
|
27
|
+
</script>
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<h2>Policies</h2>
|
31
|
+
<p>Draws Authorization Grant Roles</p>
|
32
|
+
|
33
|
+
<div class='policy'>
|
34
|
+
<%= policy_tag %>
|
35
|
+
</div>
|
36
|
+
</body>
|
37
|
+
</html>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grant-front
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ogom
|
@@ -10,6 +10,20 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: kramdown
|
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
|
@@ -53,11 +67,13 @@ files:
|
|
53
67
|
- Rakefile
|
54
68
|
- grant-front.gemspec
|
55
69
|
- lib/grant-front.rb
|
56
|
-
- lib/grant-front/
|
70
|
+
- lib/grant-front/diagram.rb
|
71
|
+
- lib/grant-front/engine.rb
|
57
72
|
- lib/grant-front/policy.rb
|
58
73
|
- lib/grant-front/rails.rb
|
59
74
|
- lib/grant-front/version.rb
|
60
75
|
- lib/tasks/grant-front.rake
|
76
|
+
- lib/templates/layouts/application.html.erb
|
61
77
|
- spec/grant-front_spec.rb
|
62
78
|
- spec/lib/policy_spec.rb
|
63
79
|
- spec/lib/version_spec.rb
|
data/lib/grant-front/grant.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module GrantFront
|
2
|
-
class Grant
|
3
|
-
class << self
|
4
|
-
def draw
|
5
|
-
policies = {}
|
6
|
-
GrantFront::Policy.all.each do |klass|
|
7
|
-
policies[klass.to_s.to_sym] = GrantFront::Policy.find(klass)
|
8
|
-
end
|
9
|
-
|
10
|
-
policies.keys.each do |policy|
|
11
|
-
puts "\n# #{policy} \n\n"
|
12
|
-
puts "||#{policies[policy][:roles].join('|')}|"
|
13
|
-
puts "|:-:|#{policies[policy][:roles].map{':-:'}.join('|')}|"
|
14
|
-
policies[policy][:methods].keys.each do |method|
|
15
|
-
raw = "|#{method}|"
|
16
|
-
policies[policy][:roles].each do |role|
|
17
|
-
raw += 'o' if policies[policy][:methods][method].include?(role)
|
18
|
-
raw += '|'
|
19
|
-
end
|
20
|
-
puts raw
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|