effective_resources 2.3.0 → 2.4.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/app/controllers/concerns/effective/crud_controller/dsl.rb +10 -4
- data/app/controllers/concerns/effective/crud_controller/save.rb +2 -4
- data/app/controllers/concerns/effective/crud_controller/submits.rb +85 -85
- data/app/controllers/concerns/effective/crud_controller.rb +1 -15
- data/app/helpers/effective_resources_helper.rb +5 -14
- data/lib/effective_resources/version.rb +1 -1
- data/lib/effective_resources.rb +16 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fc4b2cb86902bbdc801204584d765041a0dded527e894eace36d5ea8d923f3f
|
4
|
+
data.tar.gz: ff36581881c3d5dd3667787cf0395c8b6b7b15676e583ac90e85c3e681a02a10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6bf9ede63c06935ee24d72e7b11d78950b7b1b2e3540338513ab18be3570a13e14189252279872f485f1755378ab180f4d3b517ad1e2c2b2564b2a9952035e9
|
7
|
+
data.tar.gz: 72aa0f77cef8f2f8477a50e50990a51eaf592e5889811a689e4a9fa095e5adb072d6cd8c626fd3945e831f22e4fb6b37d53a2b2349648d71320561b7244ad26a
|
@@ -34,8 +34,10 @@ module Effective
|
|
34
34
|
# submit :toggle, 'Blacklist', if: -> { sync? }, class: 'btn btn-primary'
|
35
35
|
# submit :toggle, 'Whitelist', if: -> { !sync? }, class: 'btn btn-primary'
|
36
36
|
# submit :save, 'Save', success: -> { "#{resource} was saved okay!" }
|
37
|
-
def submit(action, label
|
38
|
-
|
37
|
+
def submit(action, label, args = {})
|
38
|
+
instance_exec do
|
39
|
+
before_action { _insert_submit(action, label, args) }
|
40
|
+
end
|
39
41
|
end
|
40
42
|
|
41
43
|
# This controls the resource buttons section of the page
|
@@ -46,13 +48,17 @@ module Effective
|
|
46
48
|
# button :approve, 'Approve', unless: -> { resource.approved? }, redirect: :show
|
47
49
|
# button :decline, false
|
48
50
|
def button(action, label = nil, args = {})
|
49
|
-
|
51
|
+
instance_exec do
|
52
|
+
before_action { _insert_button(action, label, args) }
|
53
|
+
end
|
50
54
|
end
|
51
55
|
|
52
56
|
# This is a way of defining the redirect, flash etc of any action without tweaking defaults
|
53
57
|
# submit and buttons options will be merged ontop of these
|
54
58
|
def on(action, args = {})
|
55
|
-
|
59
|
+
instance_exec do
|
60
|
+
before_action { _insert_on(action, args) }
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
# page_title 'My Title', only: [:new]
|
@@ -4,10 +4,8 @@ module Effective
|
|
4
4
|
|
5
5
|
# Based on the incoming params[:commit] or passed action. Merges all options.
|
6
6
|
def commit_action(action = nil)
|
7
|
-
|
8
|
-
|
9
|
-
config = self.class.submits
|
10
|
-
ons = self.class.ons
|
7
|
+
config = self.submits()
|
8
|
+
ons = self.ons()
|
11
9
|
|
12
10
|
commit = config[params[:commit].to_s]
|
13
11
|
commit ||= config.find { |_, v| v[:action] == action }.try(:last)
|
@@ -1,122 +1,122 @@
|
|
1
1
|
module Effective
|
2
2
|
module CrudController
|
3
3
|
module Submits
|
4
|
-
extend ActiveSupport::Concern
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
# { 'Approve' => { action: approve, ...}}
|
13
|
-
def buttons
|
14
|
-
@_effective_buttons ||= effective_resource.buttons
|
15
|
-
end
|
16
|
-
|
17
|
-
# { :approve => { redirect: .. }}
|
18
|
-
def ons
|
19
|
-
@_effective_ons ||= effective_resource.ons
|
20
|
-
end
|
5
|
+
# { 'Save' => { action: save, ...}}
|
6
|
+
def submits
|
7
|
+
@_effective_submits ||= effective_resource.submits()
|
8
|
+
end
|
21
9
|
|
22
|
-
|
23
|
-
|
24
|
-
|
10
|
+
# { 'Approve' => { action: approve, ...}}
|
11
|
+
def buttons
|
12
|
+
@_effective_buttons ||= effective_resource.buttons()
|
13
|
+
end
|
25
14
|
|
26
|
-
|
27
|
-
|
28
|
-
|
15
|
+
# { :approve => { redirect: .. }}
|
16
|
+
def ons
|
17
|
+
@_effective_ons ||= effective_resource.ons()
|
18
|
+
end
|
29
19
|
|
30
|
-
|
31
|
-
|
32
|
-
|
20
|
+
# :only, :except, :if, :unless, :redirect, :success, :danger, :class
|
21
|
+
def _insert_submit(action, label = nil, args = {})
|
22
|
+
raise "expected first argument to be a Symbol. Try submit :approve, 'Approve'" unless action.kind_of?(Symbol)
|
23
|
+
raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
|
33
24
|
|
34
|
-
|
35
|
-
|
36
|
-
|
25
|
+
if label == false
|
26
|
+
submits.delete_if { |label, args| args[:action] == action }; return
|
27
|
+
end
|
37
28
|
|
38
|
-
|
39
|
-
|
40
|
-
|
29
|
+
if args == false
|
30
|
+
submits.delete(label); return
|
31
|
+
end
|
41
32
|
|
42
|
-
|
43
|
-
|
44
|
-
|
33
|
+
if label # Overwrite the default member action when given a custom submit
|
34
|
+
submits.delete_if { |label, args| args[:default] && args[:action] == action }
|
35
|
+
end
|
45
36
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
37
|
+
if args.key?(:if) && args[:if].respond_to?(:call) == false
|
38
|
+
raise "expected if: to be callable. Try submit :approve, 'Save and Approve', if: -> { resource.finished? }"
|
39
|
+
end
|
50
40
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
41
|
+
if args.key?(:unless) && args[:unless].respond_to?(:call) == false
|
42
|
+
raise "expected unless: to be callable. Try submit :approve, 'Save and Approve', unless: -> { resource.declined? }"
|
43
|
+
end
|
55
44
|
|
56
|
-
|
57
|
-
|
58
|
-
|
45
|
+
if args.key?(:only)
|
46
|
+
args[:only] = Array(args[:only])
|
47
|
+
raise "expected only: to be a symbol or array of symbols. Try submit :approve, 'Save and Approve', only: [:edit]" unless args[:only].all? { |v| v.kind_of?(Symbol) }
|
48
|
+
end
|
59
49
|
|
60
|
-
|
50
|
+
if args.key?(:except)
|
51
|
+
args[:except] = Array(args[:except])
|
52
|
+
raise "expected except: to be a symbol or array of symbols. Try submit :approve, 'Save and Approve', except: [:edit]" unless args[:except].all? { |v| v.kind_of?(Symbol) }
|
53
|
+
end
|
61
54
|
|
62
|
-
|
55
|
+
if args.key?(:redirect_to) # Normalize this option to redirect
|
56
|
+
args[:redirect] = args.delete(:redirect_to)
|
63
57
|
end
|
64
58
|
|
65
|
-
|
66
|
-
raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
|
59
|
+
args[:action] = action
|
67
60
|
|
68
|
-
|
69
|
-
|
70
|
-
end
|
61
|
+
(submits[label] ||= {}).merge!(args)
|
62
|
+
end
|
71
63
|
|
72
|
-
|
73
|
-
|
74
|
-
|
64
|
+
def _insert_button(action, label = nil, args = {})
|
65
|
+
raise "expected first argument to be a Symbol. Try button :approve, 'Approve'" unless action.kind_of?(Symbol)
|
66
|
+
raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
|
75
67
|
|
76
|
-
|
77
|
-
|
78
|
-
|
68
|
+
if label == false
|
69
|
+
buttons.delete_if { |label, args| args[:action] == action }; return
|
70
|
+
end
|
79
71
|
|
80
|
-
|
81
|
-
|
82
|
-
|
72
|
+
if args == false
|
73
|
+
buttons.delete(label); return
|
74
|
+
end
|
83
75
|
|
84
|
-
|
85
|
-
|
86
|
-
|
76
|
+
if label # Overwrite the default member action when given a custom label
|
77
|
+
buttons.delete_if { |label, args| args[:default] && args[:action] == action }
|
78
|
+
end
|
87
79
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
80
|
+
if args.key?(:if) && args[:if].respond_to?(:call) == false
|
81
|
+
raise "expected if: to be callable. Try button :approve, 'Approve', if: -> { resource.finished? }"
|
82
|
+
end
|
92
83
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
end
|
84
|
+
if args.key?(:unless) && args[:unless].respond_to?(:call) == false
|
85
|
+
raise "expected unless: to be callable. Try button :approve, 'Approve', unless: -> { resource.declined? }"
|
86
|
+
end
|
97
87
|
|
98
|
-
|
99
|
-
|
100
|
-
|
88
|
+
if args.key?(:only)
|
89
|
+
args[:only] = Array(args[:only])
|
90
|
+
raise "expected only: to be a symbol or array of symbols. Try button :approve, 'Save and Approve', only: [:edit]" unless args[:only].all? { |v| v.kind_of?(Symbol) }
|
91
|
+
end
|
101
92
|
|
102
|
-
|
93
|
+
if args.key?(:except)
|
94
|
+
args[:except] = Array(args[:except])
|
95
|
+
raise "expected except: to be a symbol or array of symbols. Try button :approve, 'Save and Approve', except: [:edit]" unless args[:except].all? { |v| v.kind_of?(Symbol) }
|
96
|
+
end
|
103
97
|
|
104
|
-
|
98
|
+
if args.key?(:redirect_to) # Normalize this option to redirect
|
99
|
+
args[:redirect] = args.delete(:redirect_to)
|
105
100
|
end
|
106
101
|
|
107
|
-
|
108
|
-
raise 'expected args to be a Hash' unless args.kind_of?(Hash)
|
102
|
+
args[:action] = action
|
109
103
|
|
110
|
-
|
111
|
-
|
112
|
-
end
|
104
|
+
(buttons[label] ||= {}).merge!(args)
|
105
|
+
end
|
113
106
|
|
114
|
-
|
107
|
+
def _insert_on(action, args = {})
|
108
|
+
raise "expected first argument to be a Symbol. Try on :approve, success: -> { ... }" unless action.kind_of?(Symbol)
|
109
|
+
raise 'expected args to be a Hash' unless args.kind_of?(Hash)
|
115
110
|
|
116
|
-
|
111
|
+
if args.key?(:redirect_to) # Normalize this option to redirect
|
112
|
+
args[:redirect] = args.delete(:redirect_to)
|
117
113
|
end
|
118
|
-
end
|
119
114
|
|
115
|
+
args[:action] = action
|
116
|
+
|
117
|
+
(ons[action] ||= {}).merge!(args)
|
118
|
+
end
|
120
119
|
end
|
120
|
+
|
121
121
|
end
|
122
122
|
end
|
@@ -18,21 +18,7 @@ module Effective
|
|
18
18
|
module ClassMethods
|
19
19
|
include Effective::CrudController::Dsl
|
20
20
|
|
21
|
-
|
22
|
-
# It doesn't really work with the resource_scope correctly but the routes are important here
|
23
|
-
def effective_resource
|
24
|
-
@_effective_resource ||= begin
|
25
|
-
controller = new()
|
26
|
-
klass = (controller.resource_scope_relation.call().try(:klass) rescue false) if controller.respond_to?(:resource_scope_relation)
|
27
|
-
|
28
|
-
if klass.present?
|
29
|
-
namespace = controller_path.split('/')[0...-1].join('/').presence
|
30
|
-
Effective::Resource.new(klass, namespace: namespace)
|
31
|
-
else
|
32
|
-
Effective::Resource.new(controller_path)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
21
|
+
def effective_crud_controller?; true; end
|
36
22
|
end
|
37
23
|
|
38
24
|
def resource # @thing
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module EffectiveResourcesHelper
|
4
|
-
|
5
4
|
# effective_bootstrap
|
6
5
|
def effective_submit(form, options = {}, &block)
|
7
|
-
actions =
|
6
|
+
actions = controller.try(:submits) || raise('controller must be an Effective::CrudController')
|
8
7
|
actions = actions.select { |k, v| v[:default] != true } if options.delete(:defaults) == false
|
9
8
|
actions = permitted_resource_actions(form.object, actions)
|
10
9
|
|
@@ -17,7 +16,7 @@ module EffectiveResourcesHelper
|
|
17
16
|
|
18
17
|
# effective_form_inputs
|
19
18
|
def simple_form_submit(form, options = {}, &block)
|
20
|
-
actions =
|
19
|
+
actions = controller.try(:submits) || raise('controller must be an Effective::CrudController')
|
21
20
|
actions = permitted_resource_actions(form.object, actions)
|
22
21
|
|
23
22
|
submits = actions.map { |name, opts| form.button(:submit, name, opts.except(:action, :title, 'data-method')) }
|
@@ -38,7 +37,7 @@ module EffectiveResourcesHelper
|
|
38
37
|
|
39
38
|
def render_resource_buttons(resource, atts = {}, &block)
|
40
39
|
effective_resource = find_effective_resource
|
41
|
-
actions =
|
40
|
+
actions = controller.try(:buttons) || raise('controller must be an Effective::CrudController')
|
42
41
|
|
43
42
|
actions = if resource.kind_of?(Class)
|
44
43
|
actions.select { |_, v| effective_resource.collection_get_actions.include?(v[:action]) }
|
@@ -302,19 +301,11 @@ module EffectiveResourcesHelper
|
|
302
301
|
end
|
303
302
|
|
304
303
|
def effective_translate(resource, attribute = nil)
|
305
|
-
|
306
|
-
|
307
|
-
if attribute.blank?
|
308
|
-
resource.model_name.human
|
309
|
-
elsif resource.respond_to?(:human_attribute_name)
|
310
|
-
resource.human_attribute_name(attribute)
|
311
|
-
else
|
312
|
-
resource.class.human_attribute_name(attribute)
|
313
|
-
end
|
304
|
+
EffectiveResources.et(resource, attribute)
|
314
305
|
end
|
315
306
|
|
316
307
|
def effective_translates(resource, attribute = nil)
|
317
|
-
|
308
|
+
EffectiveResources.ets(resource, attribute)
|
318
309
|
end
|
319
310
|
|
320
311
|
alias_method :et, :effective_translate
|
data/lib/effective_resources.rb
CHANGED
@@ -178,4 +178,20 @@ module EffectiveResources
|
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
|
+
def self.et(resource, attribute = nil)
|
182
|
+
return I18n.t(resource) unless resource.respond_to?(:model_name)
|
183
|
+
|
184
|
+
if attribute.blank?
|
185
|
+
resource.model_name.human
|
186
|
+
elsif resource.respond_to?(:human_attribute_name)
|
187
|
+
resource.human_attribute_name(attribute)
|
188
|
+
else
|
189
|
+
resource.class.human_attribute_name(attribute)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
def self.ets(resource, attribute = nil)
|
194
|
+
et(resource, attribute).pluralize
|
195
|
+
end
|
196
|
+
|
181
197
|
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: 2.
|
4
|
+
version: 2.4.0
|
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: 2023-02-
|
11
|
+
date: 2023-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|