effective_resources 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35fdc868ed7c8871810c8d041776f9d9c264e63b
|
4
|
+
data.tar.gz: 4c097429d190542812d01b2dcc2bd4d7cffc6653
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e85f37e03a17f55b9db2dbe65882ce42ed37503e7c75efe5e4f14aafd4402337eeae6ddca2711ea58126370699180c9f64a42ac1cfec6f7464e8fa14e2b9bc2
|
7
|
+
data.tar.gz: 5bf2bdf611049d0d1a32e52aebefb6620f79321913b30fbcf1a65c763c452e784e7d9b5300fac09628a51e7bd782c9dc26078df6b1db33523ca3b3214ae96a7f
|
@@ -10,7 +10,7 @@ module Effective
|
|
10
10
|
# member_action :print
|
11
11
|
def member_action(action)
|
12
12
|
define_method(action) do
|
13
|
-
self.resource ||=
|
13
|
+
self.resource ||= resource_scope.find(params[:id])
|
14
14
|
|
15
15
|
EffectiveResources.authorized?(self, action, resource)
|
16
16
|
|
@@ -23,16 +23,16 @@ module Effective
|
|
23
23
|
def collection_action(action)
|
24
24
|
define_method(action) do
|
25
25
|
if params[:ids].present?
|
26
|
-
self.resources ||=
|
26
|
+
self.resources ||= resource_scope.where(id: params[:ids])
|
27
27
|
end
|
28
28
|
|
29
29
|
if effective_resource.scope?(action)
|
30
|
-
self.resources ||=
|
30
|
+
self.resources ||= resource_scope.send(action)
|
31
31
|
end
|
32
32
|
|
33
|
-
self.resources ||=
|
33
|
+
self.resources ||= resource_scope.all
|
34
34
|
|
35
|
-
EffectiveResources.authorized?(self, action,
|
35
|
+
EffectiveResources.authorized?(self, action, resource_klass)
|
36
36
|
|
37
37
|
@page_title ||= "#{action.to_s.titleize} #{resource_plural_name.titleize}"
|
38
38
|
|
@@ -41,9 +41,38 @@ module Effective
|
|
41
41
|
end
|
42
42
|
|
43
43
|
# page_title 'My Title', only: [:new]
|
44
|
-
def page_title(label, opts = {})
|
44
|
+
def page_title(label = nil, opts = {}, &block)
|
45
|
+
raise 'expected a label or block' unless (label || block_given?)
|
46
|
+
|
47
|
+
instance_eval do
|
48
|
+
before_action(opts) { @page_title ||= (block_given? ? instance_eval(&block) : label) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# resource_scope -> { current_user.things }
|
53
|
+
# resource_scope -> { Thing.active.where(user: current_user) }
|
54
|
+
# resource_scope do
|
55
|
+
# { user_id: current_user.id }
|
56
|
+
# end
|
57
|
+
|
58
|
+
# Return value should be:
|
59
|
+
# a Relation: Thing.where(user: current_user)
|
60
|
+
# a Hash: { user_id: current_user.id }
|
61
|
+
def resource_scope(obj = nil, opts = {}, &block)
|
62
|
+
raise 'expected a proc or block' unless (obj.respond_to?(:call) || block_given?)
|
63
|
+
|
45
64
|
instance_eval do
|
46
|
-
before_action(opts)
|
65
|
+
before_action(opts) do
|
66
|
+
@_effective_resource_scope ||= (
|
67
|
+
if block_given?
|
68
|
+
instance_exec(&block)
|
69
|
+
elsif obj.respond_to?(:call)
|
70
|
+
instance_exec(&obj)
|
71
|
+
else
|
72
|
+
obj
|
73
|
+
end
|
74
|
+
)
|
75
|
+
end
|
47
76
|
end
|
48
77
|
end
|
49
78
|
|
@@ -51,9 +80,9 @@ module Effective
|
|
51
80
|
|
52
81
|
def index
|
53
82
|
@page_title ||= resource_plural_name.titleize
|
54
|
-
EffectiveResources.authorized?(self, :index,
|
83
|
+
EffectiveResources.authorized?(self, :index, resource_klass)
|
55
84
|
|
56
|
-
self.resources ||=
|
85
|
+
self.resources ||= resource_scope.all
|
57
86
|
|
58
87
|
if resource_datatable_class
|
59
88
|
@datatable ||= resource_datatable_class.new(self, resource_datatable_attributes)
|
@@ -61,7 +90,7 @@ module Effective
|
|
61
90
|
end
|
62
91
|
|
63
92
|
def new
|
64
|
-
self.resource ||=
|
93
|
+
self.resource ||= resource_scope.new
|
65
94
|
|
66
95
|
self.resource.assign_attributes(
|
67
96
|
params.to_unsafe_h.except(:controller, :action).select { |k, v| resource.respond_to?("#{k}=") }
|
@@ -72,7 +101,7 @@ module Effective
|
|
72
101
|
end
|
73
102
|
|
74
103
|
def create
|
75
|
-
self.resource ||=
|
104
|
+
self.resource ||= resource_scope.new(send(resource_params_method_name))
|
76
105
|
|
77
106
|
@page_title ||= "New #{resource_name.titleize}"
|
78
107
|
EffectiveResources.authorized?(self, :create, resource)
|
@@ -89,21 +118,21 @@ module Effective
|
|
89
118
|
end
|
90
119
|
|
91
120
|
def show
|
92
|
-
self.resource ||=
|
121
|
+
self.resource ||= resource_scope.find(params[:id])
|
93
122
|
|
94
123
|
@page_title ||= resource.to_s
|
95
124
|
EffectiveResources.authorized?(self, :show, resource)
|
96
125
|
end
|
97
126
|
|
98
127
|
def edit
|
99
|
-
self.resource ||=
|
128
|
+
self.resource ||= resource_scope.find(params[:id])
|
100
129
|
|
101
130
|
@page_title ||= "Edit #{resource}"
|
102
131
|
EffectiveResources.authorized?(self, :edit, resource)
|
103
132
|
end
|
104
133
|
|
105
134
|
def update
|
106
|
-
self.resource ||=
|
135
|
+
self.resource ||= resource_scope.find(params[:id])
|
107
136
|
|
108
137
|
@page_title = "Edit #{resource}"
|
109
138
|
EffectiveResources.authorized?(self, :update, resource)
|
@@ -118,7 +147,7 @@ module Effective
|
|
118
147
|
end
|
119
148
|
|
120
149
|
def destroy
|
121
|
-
self.resource =
|
150
|
+
self.resource = resource_scope.find(params[:id])
|
122
151
|
|
123
152
|
@page_title ||= "Destroy #{resource}"
|
124
153
|
EffectiveResources.authorized?(self, :destroy, resource)
|
@@ -184,7 +213,7 @@ module Effective
|
|
184
213
|
|
185
214
|
successes = 0
|
186
215
|
|
187
|
-
|
216
|
+
resource_klass.transaction do
|
188
217
|
successes = resources.select do |resource|
|
189
218
|
begin
|
190
219
|
resource.public_send("#{action}!") if EffectiveResources.authorized?(self, action, resource)
|
@@ -211,6 +240,10 @@ module Effective
|
|
211
240
|
end
|
212
241
|
end
|
213
242
|
|
243
|
+
def resource_index_path
|
244
|
+
effective_resource.index_path
|
245
|
+
end
|
246
|
+
|
214
247
|
def resource # @thing
|
215
248
|
instance_variable_get("@#{resource_name}")
|
216
249
|
end
|
@@ -237,6 +270,10 @@ module Effective
|
|
237
270
|
effective_resource.name
|
238
271
|
end
|
239
272
|
|
273
|
+
def resource_klass # Thing
|
274
|
+
effective_resource.klass
|
275
|
+
end
|
276
|
+
|
240
277
|
def resource_human_name
|
241
278
|
effective_resource.human_name
|
242
279
|
end
|
@@ -249,39 +286,32 @@ module Effective
|
|
249
286
|
(action.to_s + (action.to_s.end_with?('e') ? 'd' : 'ed'))
|
250
287
|
end
|
251
288
|
|
252
|
-
#
|
253
|
-
def
|
254
|
-
@
|
255
|
-
|
256
|
-
|
289
|
+
# Returns an ActiveRecord relation based on the computed value of `resource_scope` dsl method
|
290
|
+
def resource_scope # Thing
|
291
|
+
@_effective_resource_relation ||= (
|
292
|
+
relation = case @_effective_resource_scope # If this was initialized by the resource_scope before_filter
|
293
|
+
when ActiveRecord::Relation
|
294
|
+
@_effective_resource_scope
|
295
|
+
when Hash
|
296
|
+
effective_resource.klass.where(@_effective_resource_scope)
|
297
|
+
when Symbol
|
298
|
+
effective_resource.klass.send(@_effective_resource_scope)
|
299
|
+
when nil
|
300
|
+
effective_resource.klass.all
|
257
301
|
else
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
when Symbol
|
264
|
-
effective_resource.klass.send(resource_scope)
|
265
|
-
when nil
|
266
|
-
effective_resource.klass
|
267
|
-
else
|
268
|
-
raise "expected #{resource_scope_method_name} to return a Hash or Symbol"
|
269
|
-
end
|
302
|
+
raise "expected resource_scope method to return an ActiveRecord::Relation or Hash"
|
303
|
+
end
|
304
|
+
|
305
|
+
unless relation.kind_of?(ActiveRecord::Relation)
|
306
|
+
raise("unable to build resource relation for #{effective_resource.klass || 'unknown klass'}.")
|
270
307
|
end
|
308
|
+
|
309
|
+
relation
|
271
310
|
)
|
272
311
|
end
|
273
312
|
|
274
313
|
def resource_datatable_attributes
|
275
|
-
|
276
|
-
|
277
|
-
case (resource_scope = send(resource_scope_method_name))
|
278
|
-
when ActiveRecord::Relation ; {resource_scope: true}
|
279
|
-
when Hash ; resource_scope
|
280
|
-
when Symbol ; {resource_scope: true}
|
281
|
-
when nil ; {}
|
282
|
-
else
|
283
|
-
raise "expected #{resource_scope_method_name} to return a Hash or Symbol"
|
284
|
-
end
|
314
|
+
resource_scope.where_values_hash.symbolize_keys
|
285
315
|
end
|
286
316
|
|
287
317
|
def resource_datatable_class # ThingsDatatable
|
@@ -292,14 +322,6 @@ module Effective
|
|
292
322
|
["#{resource_name}_params", "#{resource_plural_name}_params", 'permitted_params'].find { |name| respond_to?(name, true) } || 'params'
|
293
323
|
end
|
294
324
|
|
295
|
-
# Override this with Team.where(team: current_user.team) to build and create with team
|
296
|
-
def resource_scope_method_name
|
297
|
-
["#{resource_name}_scope", "#{resource_plural_name}_scope", 'resource_scope', 'default_scope'].find { |name| respond_to?(name, true) }
|
298
|
-
end
|
299
|
-
|
300
|
-
def resource_index_path
|
301
|
-
effective_resource.index_path
|
302
|
-
end
|
303
325
|
|
304
326
|
end
|
305
327
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|