grant-front 0.1.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 287c0d37f86c2db8a7fa5e4db99ad01913b6a8d8
4
- data.tar.gz: 0f79b9211eda863ebc45b00aba19db9d8b5e8bf3
3
+ metadata.gz: 5e3f6aaccaca24c6a5e7dff34a3002008b1ee470
4
+ data.tar.gz: 44be6c4edf11da60d4f76185a5f45915d17d6b41
5
5
  SHA512:
6
- metadata.gz: ea2c1e0274c28c372b82d4325245bf8b078683f7a770cfb2f8d90943c563c4f00fb677e9eb270443fdd6d026204b0503b9d5559782492d593b72667a66c1a7e6
7
- data.tar.gz: ca5a3d0eb8fdc20d27bed631b3b06d3d3c7181342d8fe47227bacdc8c25e4b44a04c01c309bb0074103b43df79b446d2757b301e342bbcc0708e8c79f27e5a56
6
+ metadata.gz: 327888963d8caae5220afa74ddb45779956d283ae7f0ac179e5d086b2c17d8afbbe84d3582bfe4147dfc7675a0a9d2909ff8971a43fa14f5a687b0681136277a
7
+ data.tar.gz: 199be717bcf61ac252ea1e954a87dd3b205346c50b1c30cdbe5cd6eb3910791d56620978656269c6ff0322caba613b4a9ae98bade1c49e4c25150b222d044936
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/grant-front.svg)](http://badge.fury.io/rb/grant-front) [![Build Status](https://travis-ci.org/ogom/grant-front.png?branch=master)](https://travis-ci.org/ogom/grant-front)
4
4
 
5
- Authorization Grant Front on Rails.
5
+ Policies grant of role for authorization on Rails.
6
6
 
7
7
  ## Installation
8
8
 
@@ -18,15 +18,46 @@ And then execute:
18
18
  $ bundle
19
19
  ```
20
20
 
21
- Or install it yourself as:
21
+ ## Usage
22
+
23
+ ### Rack
24
+
25
+ Add this line to your `config/routes.rb`:
22
26
 
23
27
  ```
24
- $ gem install grant-front
28
+ mount GrantFront::Engine, at: '/rails/info/policies'
25
29
  ```
26
30
 
27
- ## Usage
31
+ Draw by selecting the policy:
32
+
33
+ ![example](http://ogom.github.io/grant-front/assets/img/example.png)
34
+
35
+ ### Rake
36
+
37
+ Draw by rake command:
38
+
39
+ ```
40
+ $ rake grant_front:draw
41
+
42
+ ### User
43
+
44
+ ||foo|bar|baz|
45
+ |:-|:-:|:-:|:-:|
46
+ |create|o|o|o|
47
+ |update|o|o||
48
+ |destroy||o|o|
49
+ ```
50
+
51
+ ## Policy Example
52
+
53
+ Install the [Pundit](https://github.com/elabs/pundit), and to the generate:
28
54
 
29
- ### Policy Example
55
+ ```
56
+ $ rails generate pundit:install
57
+ $ rails generate pundit:policy user
58
+ ```
59
+
60
+ Include **GrantFront** line to your `policies/application_policy.rb`:
30
61
 
31
62
  ```
32
63
  class ApplicationPolicy
@@ -40,6 +71,8 @@ class ApplicationPolicy
40
71
  end
41
72
  ```
42
73
 
74
+ Add **grant** line to your `policies/user_policy.rb`:
75
+
43
76
  ```
44
77
  class UserPolicy < ApplicationPolicy
45
78
  def create?
@@ -56,26 +89,6 @@ class UserPolicy < ApplicationPolicy
56
89
  end
57
90
  ```
58
91
 
59
- ### Rake
60
-
61
- ```
62
- $ rake grant_front:draw
63
- ```
64
-
65
- ||foo|bar|baz|
66
- |:-:|:-:|:-:|:-:|
67
- |create|o|o|o|
68
- |update|o|o||
69
- |destroy||o|o|
70
-
71
- ### Rack
72
-
73
- Add this line to your `config/routes.rb`:
74
-
75
- ```
76
- mount GrantFront::Engine, at: '/rails/info/policies'
77
- ```
78
-
79
92
  ## License
80
93
 
81
94
  * MIT
@@ -11,21 +11,23 @@ module GrantFront
11
11
  end
12
12
 
13
13
  def create
14
- policies = {}
15
- GrantFront::Policy.all(@options).each do |klass|
16
- policies[klass.to_s.to_sym] = GrantFront::Policy.find(klass)
14
+ policies = []
15
+ GrantFront::Policy.all(@options).each do |policy|
16
+ if @options[:classes].nil? or @options[:classes].include?(policy.klass)
17
+ policies << GrantFront::Policy.find(policy.klass)
18
+ end
17
19
  end
18
20
 
19
21
  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|
22
+ policies.each do |policy|
23
+ text += "\n### #{policy.name}\n\n"
24
+ if policy.roles.count > 0
25
+ text += "||#{policy.roles.join('|')}|\n"
26
+ text += "|:-|#{policy.roles.map{':-:'}.join('|')}|\n"
27
+ policy.methods.keys.each do |method|
26
28
  raw = "|#{method}|"
27
- policies[policy][:roles].each do |role|
28
- raw += 'o' if policies[policy][:methods][method].include?(role)
29
+ policy.roles.each do |role|
30
+ raw += 'o' if policy.methods[method].include?(role)
29
31
  raw += '|'
30
32
  end
31
33
  text += "#{raw}\n"
@@ -9,8 +9,6 @@ module GrantFront
9
9
 
10
10
  def call(env)
11
11
  @request = Rack::Request.new(env)
12
- text = Diagram.new(rake: false).create
13
- policy_tag = Kramdown::Document.new(text).to_html
14
12
 
15
13
  status = 200
16
14
  headers = {'Content-Type' => 'text/html'}
@@ -20,12 +18,47 @@ module GrantFront
20
18
  end
21
19
 
22
20
  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
21
+ def policy_link_to
22
+ "<a href=#{request.script_name}>Policy</a>"
23
+ end
24
+
25
+ def policies_tag
26
+ raw = ""
27
+ policies = GrantFront::Policy.all(rake: false)
28
+
29
+ raw += "<div><ul>"
30
+ raw += policies.map do |policy|
31
+ raw = "<li"
32
+ if '/' + policy.urn == request.path_info
33
+ raw += " class='active'"
34
+ end
35
+ raw += "><a href=#{request.script_name}/#{policy.urn}>#{policy.name}</a>"
36
+ raw += "</li>"
37
+ end.join("\n")
38
+ raw += "</ul></div>"
39
+
40
+ raw
41
+ end
42
+
43
+ def policy_tag
44
+ policies = GrantFront::Policy.all(rake: false)
45
+ classes = policies.inject([]) do |arr, policy|
46
+ arr << policy.klass if '/' + policy.urn == request.path_info
47
+ arr
48
+ end
49
+ classes = nil if classes.count == 0
50
+
51
+ text = Diagram.new(rake: false, classes: classes).create
52
+ Kramdown::Document.new(text).to_html
53
+ end
54
+
55
+ def application_template
56
+ root_path = Pathname.new(File.expand_path('..', File.dirname(__FILE__)))
57
+ templates_path = File.join(root_path, 'templates')
58
+ application_layout = File.expand_path('application.html.erb', File.join(templates_path, 'layouts'))
59
+ File.read(application_layout)
60
+ end
61
+ # end private
29
62
 
30
63
  class << self
31
64
  def prototype
@@ -1,5 +1,7 @@
1
1
  module GrantFront
2
2
  class Policy
3
+ attr_accessor :klass, :name, :methods, :roles
4
+
3
5
  class << self
4
6
  def all(options={})
5
7
  options[:rake] = true if options[:rake].nil?
@@ -10,7 +12,7 @@ module GrantFront
10
12
  require item if options[:rake]
11
13
  name = File.basename(item, '.*')
12
14
  unless name == 'application_policy'
13
- arr << Object.const_get(name.camelize)
15
+ arr << self.new(name.camelize)
14
16
  end
15
17
  arr
16
18
  end
@@ -21,7 +23,7 @@ module GrantFront
21
23
  unless name == :Config
22
24
  klass = Object.const_get(name)
23
25
  if klass.class == Class && klass.superclass == ApplicationPolicy
24
- arr << klass
26
+ arr << self.new(klass)
25
27
  end
26
28
  end
27
29
  arr
@@ -31,29 +33,41 @@ module GrantFront
31
33
  constants
32
34
  end
33
35
 
34
- def find(klass=nil)
35
- raw = {methods: {}, roles: []}
36
+ def find(klass)
37
+ policy = self.new(klass.to_s)
38
+ klass = Object.const_get(klass.to_s)
36
39
  reg = Regexp.new(/\?$/)
37
40
  user = Struct.new(:id, :roles).new(1, [])
38
41
 
39
42
  klass.mock!
40
- policy = klass.new(user, user)
41
- policy.methods.each do |name|
43
+ klass_policy = klass.new(user, user)
44
+ klass_policy.methods.each do |name|
42
45
  if name =~ reg
43
- owner = policy.method(name).owner
46
+ owner = klass_policy.method(name).owner
44
47
  if owner == klass or owner == ApplicationPolicy
45
- roles = policy.send(name)
48
+ roles = klass_policy.send(name)
46
49
  roles ||= []
47
- raw[:methods][name.to_s.gsub(reg, '').to_sym] = roles
48
- raw[:roles] += roles
49
- raw[:roles].uniq!
50
+ policy.methods[name.to_s.gsub(reg, '').to_sym] = roles
51
+ policy.roles += roles
50
52
  end
51
53
  end
52
54
  end
53
55
  klass.unmock!
54
56
 
55
- raw
57
+ policy.roles.uniq!
58
+ policy
56
59
  end
57
60
  end
61
+
62
+ def initialize(klass)
63
+ @klass = klass.to_s
64
+ @name = @klass.gsub(/Policy$/, '')
65
+ @methods = {}
66
+ @roles = []
67
+ end
68
+
69
+ def urn
70
+ self.name.downcase
71
+ end
58
72
  end
59
73
  end
@@ -1,3 +1,3 @@
1
1
  module GrantFront
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -17,11 +17,43 @@
17
17
  white-space: pre-wrap;
18
18
  }
19
19
 
20
+ a {
21
+ color: #000;
22
+ text-decoration: none;
23
+ padding-left: 4px;
24
+ padding-right: 10px;
25
+ }
26
+ a:visited { color: #000; }
27
+ a:hover { color: #000; background-color:#fff; }
28
+
20
29
  h2 { padding-left: 10px; }
21
30
 
31
+ li { padding: 0px 4px; }
32
+ li.active { background-color: #666;}
33
+ li.active > a { color: #fff;}
34
+ li.active > a:hover { color: #fff; background-color:#666; }
35
+
36
+ div.policies {
37
+ float:left;
38
+ padding-right: 20px;
39
+ padding-bottom: 400px;
40
+ border-right: solid #eee;
41
+ }
42
+
43
+ div.policies h3 {
44
+ padding-left: 16px;
45
+ }
46
+
22
47
  div.policy {
23
- padding-top: 8px;
24
- padding-left: 80px;
48
+ padding-left: 150px;
49
+ }
50
+
51
+ div.policy h3 {
52
+ padding-top: 12px;
53
+ }
54
+
55
+ div.policy table {
56
+ padding-left: 10px;
25
57
  }
26
58
 
27
59
  div.policy th,
@@ -41,7 +73,12 @@
41
73
  </head>
42
74
  <body>
43
75
  <h2>Policies</h2>
44
- <p>Draws Authorization Grant Roles</p>
76
+ <p>Policies grant of role for authorization</p>
77
+
78
+ <div class='policies'>
79
+ <h3><%= policy_link_to %></h3>
80
+ <%= policies_tag %>
81
+ </div>
45
82
 
46
83
  <div class='policy'>
47
84
  <%= policy_tag %>
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe GrantFront::Diagram do
4
+ describe "#create" do
5
+ let(:diagram) { GrantFront::Diagram.new(classes: ['UserPolicy']) }
6
+
7
+ it "returns diagram" do
8
+ expect(diagram.create).to eq(
9
+ "\n### User\n" +
10
+ "\n" +
11
+ "||foo|bar|baz|\n" +
12
+ "|:-|:-:|:-:|:-:|\n" +
13
+ "|create|o|o|o|\n" +
14
+ "|update|o|o||\n" +
15
+ "|destroy||o|o|\n"
16
+ )
17
+ end
18
+ end
19
+ end
@@ -2,20 +2,30 @@ require 'spec_helper'
2
2
 
3
3
  describe GrantFront::Policy do
4
4
  describe ".all" do
5
- it "returns a policy" do
6
- expect(GrantFront::Policy.all.count).to eq(1)
5
+ let(:policy) { GrantFront::Policy.all.first}
6
+
7
+ it "returns klass of policy" do
8
+ expect(policy.klass).to eq('UserPolicy')
9
+ end
10
+
11
+ it "returns name of policy" do
12
+ expect(policy.name).to eq('User')
13
+ end
14
+
15
+ it "returns urn of policy" do
16
+ expect(policy.urn).to eq('user')
7
17
  end
8
18
  end
9
19
 
10
20
  describe ".find" do
11
- let(:policy) { GrantFront::Policy.all.first }
21
+ let(:klass) {GrantFront::Policy.all.first.klass}
12
22
 
13
23
  it "returns some methods" do
14
- expect(GrantFront::Policy.find(policy)[:methods].keys).to eq([:create, :update, :destroy])
24
+ expect(GrantFront::Policy.find(klass).methods.keys).to eq([:create, :update, :destroy])
15
25
  end
16
26
 
17
27
  it "returns some roles" do
18
- expect(GrantFront::Policy.find(policy)[:roles]).to eq([:foo, :bar, :baz])
28
+ expect(GrantFront::Policy.find(klass).roles).to eq([:foo, :bar, :baz])
19
29
  end
20
30
  end
21
31
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "GrantFront::VERSION" do
4
- describe "VERSION" do
4
+ describe "reference" do
5
5
  it "returns #{GrantFront::VERSION} version" do
6
6
  expect(GrantFront::VERSION).to eq(GrantFront::VERSION)
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grant-front
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ogom
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2014-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -89,6 +89,7 @@ files:
89
89
  - lib/tasks/grant-front.rake
90
90
  - lib/templates/layouts/application.html.erb
91
91
  - spec/grant-front_spec.rb
92
+ - spec/lib/diagram_spec.rb
92
93
  - spec/lib/policy_spec.rb
93
94
  - spec/lib/version_spec.rb
94
95
  - spec/spec_helper.rb
@@ -118,6 +119,7 @@ specification_version: 4
118
119
  summary: Authorization Grant Front.
119
120
  test_files:
120
121
  - spec/grant-front_spec.rb
122
+ - spec/lib/diagram_spec.rb
121
123
  - spec/lib/policy_spec.rb
122
124
  - spec/lib/version_spec.rb
123
125
  - spec/spec_helper.rb