petergate 1.1.7 → 1.1.8

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: 5141c4d903727b7fc9845493e4683fd57b1a9504
4
- data.tar.gz: 63556c22177794cfc7f50675d90f7856b26e4cec
3
+ metadata.gz: e874f558d2dba4491ce0df91cd9dd14d97169abd
4
+ data.tar.gz: 5068a8370ec69a9797af8ccb27b3001a2ecd21a7
5
5
  SHA512:
6
- metadata.gz: e722c47a15e9feb53af47f3dbefec7f5dc874b8ec2b2f128be81eb58f648cea862c464d015a245907a3abd271f30c98d224630ef557b093a6ed65392022a824b
7
- data.tar.gz: 0fef487eb9ccb21acf9d210a792b51c94823a3cf55af5d62262e9996e4a9bbd6838794aa84a4bd1c14ad040165dfbe798731ca5143b914de5a98ad30de477540
6
+ metadata.gz: b26024de4dd6f9a8f5dd223c576be77001bb717a3193dcd17c558d7e4cba65efa5b0160883b192c1ec9f863beb8c943ac91a30dd95332e96c3827328111b1d3d
7
+ data.tar.gz: 10b62d0f11bdc6696152e5092f0be7ff562eca0f21a8000bc44a56e38895d75353d298209561d07d99854d31fade1ed314a62df21eac8307ba95388ca7ac6747
data/lib/petergate.rb CHANGED
@@ -1,162 +1,8 @@
1
1
  require "petergate/version"
2
2
  require "petergate/railtie"
3
+ require 'petergate/action_controller/base'
4
+ require 'petergate/active_record/base'
3
5
 
4
6
  module Petergate
5
- module ControllerMethods
6
- module ClassMethods
7
- def const_missing(const_name)
8
- if [:AllRest, :ALLREST].include?(const_name)
9
- warn "`AllRest` and `ALLREST` has been deprecated. Use :all instead."
10
- return ALLRESTDEP
11
- else
12
- return super
13
- end
14
- end
15
7
 
16
- def all_actions
17
- ->{self.action_methods.to_a.map(&:to_sym) - [:check_access, :title]}.call
18
- end
19
-
20
- def except_actions(arr = [])
21
- all_actions - arr
22
- end
23
-
24
- def access(rules = {}, &block)
25
- if block
26
- b_rules = block.call
27
- rules = rules.merge(b_rules) if b_rules.is_a?(Hash)
28
- end
29
-
30
- instance_eval do
31
- @_controller_rules = rules
32
-
33
- def controller_rules
34
- @_controller_rules
35
- end
36
-
37
- def inherited(subclass)
38
- subclass.instance_variable_set("@_controller_rules", instance_variable_get("@_controller_rules"))
39
- end
40
- end
41
-
42
- class_eval do
43
- def check_access
44
- permissions(self.class.controller_rules)
45
- end
46
- end
47
- end
48
- end
49
-
50
- ALLRESTDEP = [:show, :index, :new, :edit, :update, :create, :destroy]
51
-
52
- def self.included(base)
53
- base.extend(ClassMethods)
54
- base.helper_method :logged_in?, :forbidden!
55
- base.before_filter do
56
- unless logged_in?(:admin)
57
- message= defined?(check_access) ? check_access : true
58
- if message.is_a?(String) || message == false
59
- if user_signed_in?
60
- forbidden! message
61
- else
62
- authenticate_user!
63
- end
64
- end
65
- end
66
- end
67
- end
68
-
69
- def parse_permission_rules(rules)
70
- rules = rules.inject({}) do |h, (k, v)|
71
- special_values = case v.class.to_s
72
- when "Symbol"
73
- v == :all ? self.class.all_actions : raise("No action for: #{v}")
74
- when "Hash"
75
- v[:except].present? ? self.class.except_actions(v[:except]) : raise("Invalid values for except: #{v.values}")
76
- when "Array"
77
- v
78
- else
79
- raise("No action for: #{v}")
80
- end
81
-
82
- h.merge({k => special_values})
83
- end
84
- # Allows Array's of keys for he same hash.
85
- rules.inject({}){|h, (k, v)| k.class == Array ? h.merge(Hash[k.map{|kk| [kk, v]}]) : h.merge(k => v) }
86
- end
87
-
88
- def permissions(rules = {all: [:index, :show], customer: [], wiring: []})
89
- rules = parse_permission_rules(rules)
90
- case params[:action].to_sym
91
- when *(rules[:all]) # checks where the action can be seen by :all
92
- true
93
- when *(rules[:user]) # checks if the action can be seen for all users
94
- user_signed_in?
95
- when *(rules[(user_signed_in? ? current_user.role.to_sym : :all)]) # checks if action can be seen by the current_users role. If the user isn't logged in check if it can be seen by :all
96
- true
97
- else
98
- false
99
- end
100
- end
101
-
102
- def logged_in?(*roles)
103
- current_user && (roles & current_user.roles).any?
104
- end
105
-
106
- def forbidden!(msg = nil)
107
- respond_to do |format|
108
- format.any(:js, :json, :xml) { render nothing: true, status: :forbidden }
109
- format.html do
110
- destination = current_user.present? ? request.referrer || after_sign_in_path_for(current_user) : root_path
111
- redirect_to destination, notice: msg || 'Permission Denied'
112
- end
113
- end
114
- end
115
- end
116
-
117
- module UserMethods
118
- def self.included(base)
119
- base.extend(ClassMethods)
120
- end
121
-
122
- module ClassMethods
123
- def petergate(options = {roles: [:admin]})
124
- serialize :roles
125
- after_initialize do
126
- self[:roles] ||= []
127
- end
128
-
129
- instance_eval do
130
- const_set('ROLES', options[:roles])
131
- end
132
-
133
-
134
- class_eval do
135
- def available_roles
136
- self.class::ROLES
137
- end
138
-
139
- def roles=(v)
140
- self[:roles] = Array(v).map(&:to_sym).to_a.select{|r| r.size > 0 && available_roles.include?(r)}
141
- end
142
-
143
- def roles
144
- self[:roles] + [:user]
145
- end
146
-
147
- def role
148
- roles.first
149
- end
150
- end
151
- end
152
- end
153
- end
154
- end
155
-
156
- class ActionController::Base
157
- include Petergate::ControllerMethods
158
- end
159
-
160
- class ActiveRecord::Base
161
- include Petergate::UserMethods
162
8
  end
@@ -0,0 +1,119 @@
1
+ module Petergate
2
+ module ActionController
3
+ module Base
4
+ module ClassMethods
5
+ def const_missing(const_name)
6
+ if [:AllRest, :ALLREST].include?(const_name)
7
+ warn "`AllRest` and `ALLREST` has been deprecated. Use :all instead."
8
+ return ALLRESTDEP
9
+ else
10
+ return super
11
+ end
12
+ end
13
+
14
+ def all_actions
15
+ ->{self.action_methods.to_a.map(&:to_sym) - [:check_access, :title]}.call
16
+ end
17
+
18
+ def except_actions(arr = [])
19
+ all_actions - arr
20
+ end
21
+
22
+ def access(rules = {}, &block)
23
+ if block
24
+ b_rules = block.call
25
+ rules = rules.merge(b_rules) if b_rules.is_a?(Hash)
26
+ end
27
+
28
+ instance_eval do
29
+ @_controller_rules = rules
30
+
31
+ def controller_rules
32
+ @_controller_rules
33
+ end
34
+
35
+ def inherited(subclass)
36
+ subclass.instance_variable_set("@_controller_rules", instance_variable_get("@_controller_rules"))
37
+ end
38
+ end
39
+
40
+ class_eval do
41
+ def check_access
42
+ permissions(self.class.controller_rules)
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ ALLRESTDEP = [:show, :index, :new, :edit, :update, :create, :destroy]
49
+
50
+ def self.included(base)
51
+ base.extend(ClassMethods)
52
+ base.helper_method :logged_in?, :forbidden!
53
+ base.before_filter do
54
+ unless logged_in?(:admin)
55
+ message= defined?(check_access) ? check_access : true
56
+ if message.is_a?(String) || message == false
57
+ if user_signed_in?
58
+ forbidden! message
59
+ else
60
+ authenticate_user!
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ def parse_permission_rules(rules)
68
+ rules = rules.inject({}) do |h, (k, v)|
69
+ special_values = case v.class.to_s
70
+ when "Symbol"
71
+ v == :all ? self.class.all_actions : raise("No action for: #{v}")
72
+ when "Hash"
73
+ v[:except].present? ? self.class.except_actions(v[:except]) : raise("Invalid values for except: #{v.values}")
74
+ when "Array"
75
+ v
76
+ else
77
+ raise("No action for: #{v}")
78
+ end
79
+
80
+ h.merge({k => special_values})
81
+ end
82
+ # Allows Array's of keys for he same hash.
83
+ rules.inject({}){|h, (k, v)| k.class == Array ? h.merge(Hash[k.map{|kk| [kk, v]}]) : h.merge(k => v) }
84
+ end
85
+
86
+ def permissions(rules = {all: [:index, :show], customer: [], wiring: []})
87
+ rules = parse_permission_rules(rules)
88
+ case params[:action].to_sym
89
+ when *(rules[:all]) # checks where the action can be seen by :all
90
+ true
91
+ when *(rules[:user]) # checks if the action can be seen for all users
92
+ user_signed_in?
93
+ when *(rules[(user_signed_in? ? current_user.role.to_sym : :all)]) # checks if action can be seen by the current_users role. If the user isn't logged in check if it can be seen by :all
94
+ true
95
+ else
96
+ false
97
+ end
98
+ end
99
+
100
+ def logged_in?(*roles)
101
+ current_user && (roles & current_user.roles).any?
102
+ end
103
+
104
+ def forbidden!(msg = nil)
105
+ respond_to do |format|
106
+ format.any(:js, :json, :xml) { render nothing: true, status: :forbidden }
107
+ format.html do
108
+ destination = current_user.present? ? request.referrer || after_sign_in_path_for(current_user) : root_path
109
+ redirect_to destination, notice: msg || 'Permission Denied'
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ class ActionController::Base
118
+ include Petergate::ActionController::Base
119
+ end
@@ -0,0 +1,45 @@
1
+ module Petergate
2
+ module ActiveRecord
3
+ module Base
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+ def petergate(options = {roles: [:admin]})
10
+ serialize :roles
11
+ after_initialize do
12
+ self[:roles] ||= []
13
+ end
14
+
15
+ instance_eval do
16
+ const_set('ROLES', options[:roles])
17
+ end
18
+
19
+
20
+ class_eval do
21
+ def available_roles
22
+ self.class::ROLES
23
+ end
24
+
25
+ def roles=(v)
26
+ self[:roles] = Array(v).map(&:to_sym).to_a.select{|r| r.size > 0 && available_roles.include?(r)}
27
+ end
28
+
29
+ def roles
30
+ self[:roles] + [:user]
31
+ end
32
+
33
+ def role
34
+ roles.first
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ class ActiveRecord::Base
44
+ include Petergate::ActiveRecord::Base
45
+ end
@@ -1,3 +1,3 @@
1
1
  module Petergate
2
- VERSION = "1.1.7"
2
+ VERSION = "1.1.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: petergate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Isaac Sloan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-01 00:00:00.000000000 Z
11
+ date: 2015-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -70,6 +70,8 @@ files:
70
70
  - lib/generators/petergate/install_generator.rb
71
71
  - lib/generators/petergate/templates/migrations/add_roles_to_users.rb
72
72
  - lib/petergate.rb
73
+ - lib/petergate/action_controller/base.rb
74
+ - lib/petergate/active_record/base.rb
73
75
  - lib/petergate/railtie.rb
74
76
  - lib/petergate/version.rb
75
77
  - lib/templates/rails/scaffold_controller/controller.rb