effective_resources 0.9.5 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/effective/crud_controller.rb +23 -546
  3. data/app/controllers/concerns/effective/crud_controller/actions.rb +289 -0
  4. data/app/controllers/concerns/effective/crud_controller/dsl.rb +81 -0
  5. data/app/controllers/concerns/effective/crud_controller/paths.rb +87 -0
  6. data/app/controllers/concerns/effective/crud_controller/permitted_params.rb +66 -0
  7. data/app/controllers/concerns/effective/crud_controller/save.rb +77 -0
  8. data/app/controllers/concerns/effective/crud_controller/submits.rb +122 -0
  9. data/app/helpers/effective_resources_helper.rb +51 -52
  10. data/app/helpers/effective_resources_private_helper.rb +69 -0
  11. data/app/models/concerns/effective_resource.rb +24 -0
  12. data/app/models/effective/model_reader.rb +29 -0
  13. data/app/models/effective/resource.rb +6 -2
  14. data/app/models/effective/resources/actions.rb +10 -10
  15. data/app/models/effective/resources/associations.rb +5 -0
  16. data/app/models/effective/resources/attributes.rb +40 -27
  17. data/app/models/effective/resources/controller.rb +81 -0
  18. data/app/models/effective/resources/forms.rb +0 -51
  19. data/app/models/effective/resources/init.rb +19 -17
  20. data/app/models/effective/resources/klass.rb +6 -8
  21. data/app/models/effective/resources/model.rb +23 -0
  22. data/app/models/effective/resources/naming.rb +7 -3
  23. data/app/models/effective/resources/paths.rb +4 -63
  24. data/app/models/effective/resources/relation.rb +4 -1
  25. data/app/models/effective/resources/sql.rb +1 -1
  26. data/app/views/application/create.js.erb +1 -1
  27. data/app/views/application/edit.html.haml +2 -2
  28. data/app/views/application/index.html.haml +1 -1
  29. data/app/views/application/member_action.js.erb +1 -1
  30. data/app/views/application/new.html.haml +3 -1
  31. data/app/views/application/show.html.haml +1 -1
  32. data/app/views/application/update.js.erb +1 -1
  33. data/app/views/effective/resource/_actions.html.haml +3 -32
  34. data/app/views/effective/resource/_actions_dropleft.html.haml +4 -26
  35. data/app/views/effective/resource/_actions_glyphicons.html.haml +4 -10
  36. data/lib/effective_resources/engine.rb +1 -0
  37. data/lib/effective_resources/version.rb +1 -1
  38. metadata +14 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21853b78ef80f371a34daf7b3d7c564f6ec2c0b1
4
- data.tar.gz: 5c2d774be427d0f2f97b4cd7c65234415b47051d
3
+ metadata.gz: 6b64a2a72a925cc6d0932a5a5f60d490fbf6ae54
4
+ data.tar.gz: 65206626420879daa72dce237a217bc0193c8500
5
5
  SHA512:
6
- metadata.gz: edd2720674a16a3d40d355eac77d42720057c49c84da3c4f566f1384ca20ce258815a282608d080f9db65917d6cdc56b3e19a1f8b4292c94d7da9a5eb0bc9f64
7
- data.tar.gz: 6c623bac92e6dffa4da445f837b388165632bf5085fdb41b71ff8d764437aac8edaaaa9835c55d20ada75cef0c7ad02c45729e3fdcc840e8d1ca13c9b8129875
6
+ metadata.gz: e7283195596e3b271a42c37708d6ffc916ca38e565e9e716fcef1bb5d67bb0311ff90b40a73c7c53c6e54d587b8344be7f224435d5d6166992e81d148fa4e9c5
7
+ data.tar.gz: b28fdcca5a4eca2aeb83bff6d0100e31867a71a18eb7cd128081fc8b22a143a16a1f53c1d2a7020da4db9ceb835fc34fc970cf2d1ff39fab23fb91b0cd1f42cc
@@ -2,541 +2,42 @@ module Effective
2
2
  module CrudController
3
3
  extend ActiveSupport::Concern
4
4
 
5
- included do
6
- class << self
7
- def effective_resource
8
- @_effective_resource ||= Effective::Resource.new(controller_path)
9
- end
10
-
11
- def submits
12
- effective_resource.submits
13
- end
14
- end
5
+ include Effective::CrudController::Actions
6
+ include Effective::CrudController::Paths
7
+ include Effective::CrudController::PermittedParams
8
+ include Effective::CrudController::Save
9
+ include Effective::CrudController::Submits
15
10
 
11
+ included do
16
12
  define_actions_from_routes
13
+ define_permitted_params_from_model
17
14
  define_callbacks :resource_render, :resource_save, :resource_error
18
15
  end
19
16
 
20
17
  module ClassMethods
18
+ include Effective::CrudController::Dsl
21
19
 
22
- # Automatically respond to any action defined via the routes file
23
- def define_actions_from_routes
24
- resource = Effective::Resource.new(controller_path)
25
- (resource.member_actions - resource.crud_actions).each { |action| member_action(action) }
26
- (resource.collection_actions - resource.crud_actions).each { |action| collection_action(action) }
27
- end
28
-
29
- # https://github.com/rails/rails/blob/v5.1.4/actionpack/lib/abstract_controller/callbacks.rb
30
- def before_render(*names, &blk)
31
- _insert_callbacks(names, blk) { |name, options| set_callback(:resource_render, :before, name, options) }
32
- end
33
-
34
- def after_save(*names, &blk)
35
- _insert_callbacks(names, blk) { |name, options| set_callback(:resource_save, :after, name, options) }
36
- end
37
-
38
- def after_error(*names, &blk)
39
- _insert_callbacks(names, blk) { |name, options| set_callback(:resource_error, :after, name, options) }
40
- end
41
-
42
- # This controls the form submit options of effective_submit
43
- # It also controls the redirect path for any actions
44
- #
45
- # Effective::Resource will populate this with all member_post_actions
46
- # And you can control the details with this DSL:
47
- #
48
- # submit :approve, 'Save and Approve', unless: -> { approved? }, redirect: :show
49
- #
50
- # submit :toggle, 'Blacklist', if: -> { sync? }, class: 'btn btn-primary'
51
- # submit :toggle, 'Whitelist', if: -> { !sync? }, class: 'btn btn-primary'
52
- # submit :save, 'Save', success: -> { "#{self} was saved okay!" }
53
-
54
- def submit(action, commit = nil, args = {})
55
- raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
56
-
57
- if commit == false
58
- submits.delete_if { |commit, args| args[:action] == action }; return
59
- end
60
-
61
- if args == false
62
- submits.delete(commit); return
63
- end
64
-
65
- if commit # Overwrite the default member action when given a custom commit
66
- submits.delete_if { |commit, args| args[:default] && args[:action] == action }
67
- end
68
-
69
- if args.key?(:if) && args[:if].respond_to?(:call) == false
70
- raise "expected if: to be callable. Try submit :approve, 'Save and Approve', if: -> { finished? }"
71
- end
72
-
73
- if args.key?(:unless) && args[:unless].respond_to?(:call) == false
74
- raise "expected unless: to be callable. Try submit :approve, 'Save and Approve', unless: -> { declined? }"
75
- end
76
-
77
- redirect = args.delete(:redirect_to) || args.delete(:redirect) # Remove redirect_to keyword. use redirect.
78
- args.merge!(action: action, redirect: redirect)
79
-
80
- (submits[commit] ||= {}).merge!(args)
81
- end
82
-
83
- # page_title 'My Title', only: [:new]
84
- def page_title(label = nil, opts = {}, &block)
85
- opts = label if label.kind_of?(Hash)
86
- raise 'expected a label or block' unless (label || block_given?)
87
-
88
- instance_exec do
89
- before_action(opts) do
90
- @page_title ||= (block_given? ? instance_exec(&block) : label).to_s
91
- end
92
- end
93
- end
94
-
95
- # resource_scope -> { current_user.things }
96
- # resource_scope -> { Thing.active.where(user: current_user) }
97
- # resource_scope do
98
- # { user_id: current_user.id }
99
- # end
100
- # Nested controllers? sure
101
- # resource_scope -> { User.find(params[:user_id]).things }
102
-
103
- # Return value should be:
104
- # a Relation: Thing.where(user: current_user)
105
- # a Hash: { user_id: current_user.id }
106
- def resource_scope(obj = nil, opts = {}, &block)
107
- raise 'expected a proc or block' unless (obj.respond_to?(:call) || block_given?)
108
-
109
- instance_exec do
110
- before_action(opts) do
111
- @_effective_resource_scope ||= instance_exec(&(block_given? ? block : obj))
112
- end
113
- end
114
- end
115
-
116
- # Defines a function to handle a GET and POST request on this URL
117
- # Just add a member action to your routes, you shouldn't need to call this directly
118
- def member_action(action)
119
- define_method(action) do
120
- Rails.logger.info 'Processed by Effective::CrudController#member_action'
121
-
122
- self.resource ||= resource_scope.find(params[:id])
123
-
124
- EffectiveResources.authorize!(self, action, resource)
125
-
126
- @page_title ||= "#{action.to_s.titleize} #{resource}"
127
-
128
- request.get? ? run_callbacks(:resource_render) : member_post_action(action)
129
- end
130
- end
131
-
132
- # Defines a function to handle a GET and POST request on this URL
133
- # Handles bulk_ actions
134
- # Just add a member action to your routes, you shouldn't need to call this directly
135
- # You shouldn't need to call this directly
136
- def collection_action(action)
137
- define_method(action) do
138
- Rails.logger.info 'Processed by Effective::CrudController#collection_action'
139
-
140
- if params[:ids].present?
141
- self.resources ||= resource_scope.where(id: params[:ids])
142
- end
143
-
144
- if effective_resource.scope?(action)
145
- self.resources ||= resource_scope.public_send(action)
146
- end
147
-
148
- self.resources ||= resource_scope.all
149
-
150
- EffectiveResources.authorize!(self, action, resource_klass)
151
-
152
- @page_title ||= "#{action.to_s.titleize} #{resource_plural_name.titleize}"
153
-
154
- request.get? ? run_callbacks(:resource_render) : collection_post_action(action)
155
- end
156
- end
157
- end
158
-
159
- def index
160
- Rails.logger.info 'Processed by Effective::CrudController#index'
161
-
162
- @page_title ||= resource_plural_name.titleize
163
- EffectiveResources.authorize!(self, :index, resource_klass)
164
-
165
- self.resources ||= resource_scope.all
166
-
167
- if resource_datatable_class
168
- @datatable ||= resource_datatable_class.new(resource_datatable_attributes)
169
- @datatable.view = view_context
170
- end
171
-
172
- run_callbacks(:resource_render)
173
- end
174
-
175
- def new
176
- Rails.logger.info 'Processed by Effective::CrudController#new'
177
-
178
- self.resource ||= resource_scope.new
179
-
180
- self.resource.assign_attributes(
181
- params.to_unsafe_h.except(:controller, :action, :id).select { |k, v| resource.respond_to?("#{k}=") }
182
- )
183
-
184
- if params[:duplicate_id]
185
- duplicate = resource_scope.find(params[:duplicate_id])
186
- EffectiveResources.authorize!(self, :show, duplicate)
187
-
188
- self.resource = duplicate_resource(duplicate)
189
- raise "expected duplicate_resource to return an unsaved new #{resource_klass} resource" unless resource.kind_of?(resource_klass) && resource.new_record?
190
-
191
- if (message = flash[:success].to_s).present?
192
- flash.delete(:success)
193
- flash.now[:success] = "#{message.chomp('.')}. Adding another #{resource_name.titleize} based on previous."
194
- end
195
- end
196
-
197
- @page_title ||= "New #{resource_name.titleize}"
198
- EffectiveResources.authorize!(self, :new, resource)
199
-
200
- run_callbacks(:resource_render)
201
- end
202
-
203
- def create
204
- Rails.logger.info 'Processed by Effective::CrudController#create'
205
-
206
- self.resource ||= resource_scope.new
207
-
208
- @page_title ||= "New #{resource_name.titleize}"
209
- action = commit_action[:action]
210
-
211
- resource.assign_attributes(send(resource_params_method_name))
212
- resource.created_by ||= current_user if resource.respond_to?(:created_by=)
213
-
214
- EffectiveResources.authorize!(self, (action == :save ? :create : action), resource)
215
-
216
- respond_to do |format|
217
- if save_resource(resource, action)
218
- request.format = :html if specific_redirect_path?
219
-
220
- format.html do
221
- flash[:success] ||= resource_flash(:success, resource, action)
222
- redirect_to(resource_redirect_path)
223
- end
224
-
225
- format.js do
226
- flash.now[:success] ||= resource_flash(:success, resource, action)
227
- reload_resource # create.js.erb
228
- end
229
- else
230
- flash.delete(:success)
231
- flash.now[:danger] ||= resource_flash(:danger, resource, action)
232
-
233
- run_callbacks(:resource_render)
234
-
235
- format.html { render :new }
236
- format.js {} # create.js.erb
237
- end
20
+ def effective_resource
21
+ @_effective_resource ||= Effective::Resource.new(controller_path)
238
22
  end
239
- end
240
-
241
- def show
242
- Rails.logger.info 'Processed by Effective::CrudController#show'
243
-
244
- self.resource ||= resource_scope.find(params[:id])
245
-
246
- @page_title ||= resource.to_s
247
- EffectiveResources.authorize!(self, :show, resource)
248
-
249
- run_callbacks(:resource_render)
250
- end
251
-
252
- def edit
253
- Rails.logger.info 'Processed by Effective::CrudController#edit'
254
-
255
- self.resource ||= resource_scope.find(params[:id])
256
-
257
- @page_title ||= "Edit #{resource}"
258
- EffectiveResources.authorize!(self, :edit, resource)
259
23
 
260
- run_callbacks(:resource_render)
261
- end
262
-
263
- def update
264
- Rails.logger.info 'Processed by Effective::CrudController#update'
265
-
266
- self.resource ||= resource_scope.find(params[:id])
267
-
268
- @page_title = "Edit #{resource}"
269
-
270
- action = commit_action[:action]
271
- EffectiveResources.authorize!(self, action, resource) unless action == :save
272
- EffectiveResources.authorize!(self, :update, resource) if action == :save
273
-
274
- respond_to do |format|
275
- if save_resource(resource, action, send(resource_params_method_name))
276
- request.format = :html if specific_redirect_path?
277
-
278
- format.html do
279
- flash[:success] ||= resource_flash(:success, resource, action)
280
- redirect_to(resource_redirect_path)
281
- end
282
-
283
- format.js do
284
- flash.now[:success] ||= resource_flash(:success, resource, action)
285
- reload_resource # update.js.erb
286
- end
287
- else
288
- flash.delete(:success)
289
- flash.now[:danger] ||= resource_flash(:danger, resource, action)
290
-
291
- run_callbacks(:resource_render)
292
-
293
- format.html { render :edit }
294
- format.js { } # update.js.erb
24
+ # Automatically respond to any action defined via the routes file
25
+ def define_actions_from_routes
26
+ (effective_resource.member_actions - effective_resource.crud_actions).each do |action|
27
+ define_method(action) { member_action(action) }
295
28
  end
296
- end
297
- end
298
-
299
- def destroy
300
- Rails.logger.info 'Processed by Effective::CrudController#destroy'
301
-
302
- self.resource = resource_scope.find(params[:id])
303
-
304
- action = :destroy
305
- @page_title ||= "Destroy #{resource}"
306
- EffectiveResources.authorize!(self, action, resource)
307
-
308
- respond_to do |format|
309
- if save_resource(resource, action)
310
- request.format = :html if specific_redirect_path?(action)
311
-
312
- format.html do
313
- flash[:success] ||= resource_flash(:success, resource, action)
314
- redirect_to(resource_redirect_path(action))
315
- end
316
-
317
- format.js do
318
- flash.now[:success] ||= resource_flash(:success, resource, action)
319
- # destroy.js.erb
320
- end
321
- else
322
- flash.delete(:success)
323
- request.format = :html # Don't run destroy.js.erb
324
-
325
- format.html do
326
- flash[:danger] = (flash.now[:danger].presence || resource_flash(:danger, resource, action))
327
- redirect_to(resource_redirect_path(action))
328
- end
329
29
 
30
+ (effective_resource.collection_actions - effective_resource.crud_actions).each do |action|
31
+ define_method(action) { collection_action(action) }
330
32
  end
331
33
  end
332
- end
333
34
 
334
- def member_post_action(action)
335
- raise 'expected post, patch or put http action' unless (request.post? || request.patch? || request.put?)
336
-
337
- respond_to do |format|
338
-
339
- if save_resource(resource, action, (send(resource_params_method_name) rescue {}))
340
- request.format = :html if specific_redirect_path?(action)
341
-
342
- format.html do
343
- flash[:success] ||= resource_flash(:success, resource, action)
344
- redirect_to(resource_redirect_path(action))
345
- end
346
-
347
- format.js do
348
- flash.now[:success] ||= resource_flash(:success, resource, action)
349
- reload_resource
350
- render_member_action(action)
351
- end
352
- else
353
- flash.delete(:success)
354
- flash.now[:danger] ||= resource_flash(:danger, resource, action)
355
-
356
- run_callbacks(:resource_render)
357
-
358
- format.html do
359
- if resource_edit_path && (referer_redirect_path || '').end_with?(resource_edit_path)
360
- @page_title ||= "Edit #{resource}"
361
- render :edit
362
- elsif resource_new_path && (referer_redirect_path || '').end_with?(resource_new_path)
363
- @page_title ||= "New #{resource_name.titleize}"
364
- render :new
365
- elsif resource_show_path && (referer_redirect_path || '').end_with?(resource_show_path)
366
- @page_title ||= resource_name.titleize
367
- render :show
368
- else
369
- @page_title ||= resource.to_s
370
- flash[:danger] = flash.now[:danger]
371
- redirect_to(referer_redirect_path || resource_redirect_path(action))
372
- end
373
- end
374
-
375
- format.js { render_member_action(action) }
35
+ def define_permitted_params_from_model
36
+ if effective_resource.model.present?
37
+ define_method(:effective_resource_permitted_params) { resource_permitted_params } # save.rb
376
38
  end
377
39
  end
378
- end
379
-
380
- # Which member javascript view to render: #{action}.js or effective_resources member_action.js
381
- def render_member_action(action)
382
- view = lookup_context.template_exists?(action, _prefixes) ? action : :member_action
383
- render(view, locals: { action: action })
384
- end
385
-
386
- # No attributes are assigned or saved. We purely call action! on the resource
387
- def collection_post_action(action)
388
- action = action.to_s.gsub('bulk_', '').to_sym
389
-
390
- raise 'expected post, patch or put http action' unless (request.post? || request.patch? || request.put?)
391
- raise "expected #{resource_name} to respond to #{action}!" if resources.to_a.present? && !resources.first.respond_to?("#{action}!")
392
-
393
- successes = 0
394
-
395
- ActiveRecord::Base.transaction do
396
- successes = resources.select do |resource|
397
- begin
398
- resource.public_send("#{action}!") if EffectiveResources.authorized?(self, action, resource)
399
- rescue => e
400
- false
401
- end
402
- end.length
403
- end
404
40
 
405
- render json: { status: 200, message: "Successfully #{action_verb(action)} #{successes} / #{resources.length} selected #{resource_plural_name}" }
406
- end
407
-
408
- protected
409
-
410
- # This calls the appropriate member action, probably save!, on the resource.
411
- def save_resource(resource, action = :save, to_assign = {}, &block)
412
- raise "expected @#{resource_name} to respond to #{action}!" unless resource.respond_to?("#{action}!")
413
-
414
- resource.current_user ||= current_user if resource.respond_to?(:current_user=)
415
-
416
- ActiveRecord::Base.transaction do
417
- begin
418
- resource.assign_attributes(to_assign) if to_assign.respond_to?(:permitted?) && to_assign.permitted?
419
-
420
- if resource.public_send("#{action}!") == false
421
- raise("failed to #{action} #{resource}")
422
- end
423
-
424
- yield if block_given?
425
-
426
- run_callbacks(:resource_save)
427
- return true
428
- rescue => e
429
- Rails.logger.info "Failed to #{action}: #{e.message}" if Rails.env.development?
430
-
431
- if resource.respond_to?(:restore_attributes) && resource.persisted?
432
- resource.restore_attributes(['status', 'state'])
433
- end
434
-
435
- flash.delete(:success)
436
- flash.now[:danger] = flash_danger(resource, action, e: e)
437
- raise ActiveRecord::Rollback
438
- end
439
- end
440
-
441
- run_callbacks(:resource_error)
442
- false
443
- end
444
-
445
- def reload_resource
446
- self.resource.reload if resource.respond_to?(:reload)
447
- end
448
-
449
- # Should return a new resource based on the passed one
450
- def duplicate_resource(resource)
451
- resource.dup
452
- end
453
-
454
- def resource_flash(status, resource, action)
455
- submit = commit_action(action)
456
- message = submit[status].respond_to?(:call) ? instance_exec(&submit[status]) : submit[status]
457
- return message if message.present?
458
-
459
- case status
460
- when :success then flash_success(resource, action)
461
- when :danger then flash_danger(resource, action)
462
- else
463
- raise "unknown resource flash status: #{status}"
464
- end
465
- end
466
-
467
- def resource_redirect_path(action = nil)
468
- submit = commit_action(action)
469
- redirect = submit[:redirect].respond_to?(:call) ? instance_exec(&submit[:redirect]) : submit[:redirect]
470
-
471
- commit_action_redirect = case redirect
472
- when :index ; resource_index_path
473
- when :edit ; resource_edit_path
474
- when :show ; resource_show_path
475
- when :new ; resource_new_path
476
- when :duplicate ; resource_duplicate_path
477
- when :back ; referer_redirect_path
478
- when :save ; [resource_edit_path, resource_show_path].compact.first
479
- when Symbol ; resource_action_path(submit[:action])
480
- when String ; redirect
481
- else ; nil
482
- end
483
-
484
- return commit_action_redirect if commit_action_redirect.present?
485
-
486
- if action == :destroy
487
- return [referer_redirect_path, resource_index_path, root_path].compact.first
488
- end
489
-
490
- case params[:commit].to_s
491
- when 'Save'
492
- [resource_edit_path, resource_show_path, resource_index_path]
493
- when 'Save and Add New', 'Add New'
494
- [resource_new_path, resource_index_path]
495
- when 'Duplicate'
496
- [resource_duplicate_path, resource_index_path]
497
- when 'Continue', 'Save and Continue'
498
- [resource_index_path]
499
- else
500
- [referer_redirect_path, resource_edit_path, resource_show_path, resource_index_path]
501
- end.compact.first.presence || root_path
502
- end
503
-
504
- def referer_redirect_path
505
- url = request.referer.to_s
506
-
507
- return if (resource && resource.respond_to?(:destroyed?) && resource.destroyed? && url.include?("/#{resource.to_param}"))
508
- return if url.include?('duplicate_id=')
509
- return unless (Rails.application.routes.recognize_path(URI(url).path) rescue false)
510
-
511
- url
512
- end
513
-
514
- def resource_index_path
515
- effective_resource.action_path(:index)
516
- end
517
-
518
- def resource_new_path
519
- effective_resource.action_path(:new)
520
- end
521
-
522
- def resource_duplicate_path
523
- effective_resource.action_path(:new, duplicate_id: resource.id)
524
- end
525
-
526
- def resource_edit_path
527
- effective_resource.action_path(:edit, resource)
528
- end
529
-
530
- def resource_show_path
531
- effective_resource.action_path(:show, resource)
532
- end
533
-
534
- def resource_destroy_path
535
- effective_resource.action_path(:destroy, resource)
536
- end
537
-
538
- def resource_action_path(action)
539
- effective_resource.action_path(action.to_sym, resource)
540
41
  end
541
42
 
542
43
  def resource # @thing
@@ -558,7 +59,7 @@ module Effective
558
59
  private
559
60
 
560
61
  def effective_resource
561
- @_effective_resource ||= Effective::Resource.new(controller_path)
62
+ @_effective_resource ||= self.class.effective_resource
562
63
  end
563
64
 
564
65
  def resource_name # 'thing'
@@ -569,32 +70,10 @@ module Effective
569
70
  effective_resource.klass
570
71
  end
571
72
 
572
- def resource_human_name
573
- effective_resource.human_name
574
- end
575
-
576
73
  def resource_plural_name # 'things'
577
74
  effective_resource.plural_name
578
75
  end
579
76
 
580
- # Based on the incoming params[:commit] or passed action
581
- def commit_action(action = nil)
582
- if action.present?
583
- self.class.submits[action.to_s] ||
584
- self.class.submits.find { |_, v| v[:action] == action }.try(:last) ||
585
- { action: action }
586
- else # Get the current commit
587
- self.class.submits[params[:commit].to_s] ||
588
- self.class.submits.find { |_, v| v[:action] == :save }.try(:last) ||
589
- { action: :save }
590
- end
591
- end
592
-
593
- def specific_redirect_path?(action = nil)
594
- submit = commit_action(action)
595
- (submit[:redirect].respond_to?(:call) ? instance_exec(&submit[:redirect]) : submit[:redirect]).present?
596
- end
597
-
598
77
  # Returns an ActiveRecord relation based on the computed value of `resource_scope` dsl method
599
78
  def resource_scope # Thing
600
79
  @_effective_resource_relation ||= (
@@ -611,9 +90,7 @@ module Effective
611
90
  raise "expected resource_scope method to return an ActiveRecord::Relation or Hash"
612
91
  end
613
92
 
614
- unless relation.kind_of?(ActiveRecord::Relation)
615
- raise("unable to build resource_scope for #{effective_resource.klass || 'unknown klass'}.")
616
- end
93
+ raise("unable to build resource_scope for #{effective_resource.klass || 'unknown klass'}.") unless relation.kind_of?(ActiveRecord::Relation)
617
94
 
618
95
  relation
619
96
  )
@@ -623,12 +100,12 @@ module Effective
623
100
  resource_scope.where_values_hash.symbolize_keys
624
101
  end
625
102
 
626
- def resource_datatable_class # ThingsDatatable
103
+ def resource_datatable_class
627
104
  effective_resource.datatable_klass
628
105
  end
629
106
 
630
107
  def resource_params_method_name
631
- ["#{resource_name}_params", "#{resource_plural_name}_params", 'permitted_params'].find { |name| respond_to?(name, true) } || 'params'
108
+ ["#{resource_name}_params", "#{resource_plural_name}_params", 'permitted_params', 'effective_resource_permitted_params'].find { |name| respond_to?(name, true) } || 'params'
632
109
  end
633
110
 
634
111
  end