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 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