effective_resources 2.3.0 → 2.4.0

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
  SHA256:
3
- metadata.gz: 0acfffc4958a2a571f0776a9f4e159c88ac9763df2309ed9b18e1a34c9b67fd1
4
- data.tar.gz: f38964444f684fbf6d4a57291b24f8fcaac909f64ee88ef5120a6a1cc4109d5f
3
+ metadata.gz: 9fc4b2cb86902bbdc801204584d765041a0dded527e894eace36d5ea8d923f3f
4
+ data.tar.gz: ff36581881c3d5dd3667787cf0395c8b6b7b15676e583ac90e85c3e681a02a10
5
5
  SHA512:
6
- metadata.gz: 66181b2e24aefa2ea7117a1feb0fb044c5b70a745276b9f0b39d28a9849cb1a0c772e5370742f3ed82e6f5d8886da9635398236076dd6fd8a3997aee52a49ea1
7
- data.tar.gz: cd024fafd913cf073b390e07e4f85298315e55efd1bc8a7fc813bb17472acee7a1a7c33942c4951448c98bff7e3e43bdc57be8e6006656025585329b4d40619d
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 = nil, args = {})
38
- _insert_submit(action, label, args)
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
- _insert_button(action, label, args)
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
- _insert_on(action, args)
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
- #config = (['create', 'update'].include?(params[:action]) ? self.class.submits : self.class.buttons)
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
- module ClassMethods
7
- # { 'Save' => { action: save, ...}}
8
- def submits
9
- @_effective_submits ||= effective_resource.submits
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
- # :only, :except, :if, :unless, :redirect, :success, :danger, :class
23
- def _insert_submit(action, label = nil, args = {})
24
- raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
10
+ # { 'Approve' => { action: approve, ...}}
11
+ def buttons
12
+ @_effective_buttons ||= effective_resource.buttons()
13
+ end
25
14
 
26
- if label == false
27
- submits.delete_if { |label, args| args[:action] == action }; return
28
- end
15
+ # { :approve => { redirect: .. }}
16
+ def ons
17
+ @_effective_ons ||= effective_resource.ons()
18
+ end
29
19
 
30
- if args == false
31
- submits.delete(label); return
32
- end
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
- if label # Overwrite the default member action when given a custom submit
35
- submits.delete_if { |label, args| args[:default] && args[:action] == action }
36
- end
25
+ if label == false
26
+ submits.delete_if { |label, args| args[:action] == action }; return
27
+ end
37
28
 
38
- if args.key?(:if) && args[:if].respond_to?(:call) == false
39
- raise "expected if: to be callable. Try submit :approve, 'Save and Approve', if: -> { resource.finished? }"
40
- end
29
+ if args == false
30
+ submits.delete(label); return
31
+ end
41
32
 
42
- if args.key?(:unless) && args[:unless].respond_to?(:call) == false
43
- raise "expected unless: to be callable. Try submit :approve, 'Save and Approve', unless: -> { resource.declined? }"
44
- end
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
- if args.key?(:only)
47
- args[:only] = Array(args[:only])
48
- 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) }
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
- if args.key?(:except)
52
- args[:except] = Array(args[:except])
53
- 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) }
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
- if args.key?(:redirect_to) # Normalize this option to redirect
57
- args[:redirect] = args.delete(:redirect_to)
58
- end
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
- args[:action] = action
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
- (submits[label] ||= {}).merge!(args)
55
+ if args.key?(:redirect_to) # Normalize this option to redirect
56
+ args[:redirect] = args.delete(:redirect_to)
63
57
  end
64
58
 
65
- def _insert_button(action, label = nil, args = {})
66
- raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
59
+ args[:action] = action
67
60
 
68
- if label == false
69
- buttons.delete_if { |label, args| args[:action] == action }; return
70
- end
61
+ (submits[label] ||= {}).merge!(args)
62
+ end
71
63
 
72
- if args == false
73
- buttons.delete(label); return
74
- end
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
- 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
68
+ if label == false
69
+ buttons.delete_if { |label, args| args[:action] == action }; return
70
+ end
79
71
 
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
72
+ if args == false
73
+ buttons.delete(label); return
74
+ end
83
75
 
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
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
- 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
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
- 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
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
- if args.key?(:redirect_to) # Normalize this option to redirect
99
- args[:redirect] = args.delete(:redirect_to)
100
- end
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
- args[:action] = action
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
- (buttons[label] ||= {}).merge!(args)
98
+ if args.key?(:redirect_to) # Normalize this option to redirect
99
+ args[:redirect] = args.delete(:redirect_to)
105
100
  end
106
101
 
107
- def _insert_on(action, args = {})
108
- raise 'expected args to be a Hash' unless args.kind_of?(Hash)
102
+ args[:action] = action
109
103
 
110
- if args.key?(:redirect_to) # Normalize this option to redirect
111
- args[:redirect] = args.delete(:redirect_to)
112
- end
104
+ (buttons[label] ||= {}).merge!(args)
105
+ end
113
106
 
114
- args[:action] = action
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
- (ons[action] ||= {}).merge!(args)
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
- # This is used for the buttons/submits/ons
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 = (controller.respond_to?(:effective_resource) ? controller.class : find_effective_resource).submits
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 = (controller.respond_to?(:effective_resource) ? controller.class : find_effective_resource).submits
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 = (controller.respond_to?(:effective_resource) ? controller.class : effective_resource).buttons
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
- return translate(resource) unless resource.respond_to?(:model_name)
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
- effective_translate(resource, attribute).pluralize
308
+ EffectiveResources.ets(resource, attribute)
318
309
  end
319
310
 
320
311
  alias_method :et, :effective_translate
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '2.3.0'.freeze
2
+ VERSION = '2.4.0'.freeze
3
3
  end
@@ -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.3.0
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-09 00:00:00.000000000 Z
11
+ date: 2023-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails