effective_resources 1.9.1 → 1.9.5

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: d4e5791f81c07c0f264f6c4d91d4cb3e01c0194577457ae38239cfafd99ae6a6
4
- data.tar.gz: 5e82bcba8a50e8b9beceffa977241c95000805690f02343aad7ffef7a66d0f97
3
+ metadata.gz: 83e99f559d60204f03679abaeacb94f0406596ca751221002c69adcb2cea52ee
4
+ data.tar.gz: 7ff7732c4b04ffeff143812216af2e03a81008830fba3681614c44d59552959b
5
5
  SHA512:
6
- metadata.gz: 14a3dce0969cf7487a9f950a11b8fc8cd696b5dd01253c1d89792ed1c804af08b8ba886ce640e118e5f75e1ab47a6ff500c4dd3feca75ecacc1b3f5e9646e2ec
7
- data.tar.gz: 72546fd49b52e4da7c713bcadf0179438d2f91fae66d9a99d09f08a35d96a71eb149d107add609b9232dc666af8866482e7f7a5d365d00b0af06af03e06cb2a5
6
+ metadata.gz: 1884f93d5785dde2523add135e534d86a18880fe9cc1ded09d73a915ed1ce8c842907e63a0a9e1ac7aa829489b55d3f1eaf0de2be4add65cfaa806e0701fd422
7
+ data.tar.gz: 7f88e77db260d68330f44868d79f8aebfd7458e19a3b4a4a205811071d2e3abc32f69777dd2ac2c6b964c0df4e1efde54e7b0233705ee7fd6d906e95facf9d1f
@@ -9,7 +9,7 @@ module Effective
9
9
  @page_title ||= resource_plural_name.titleize
10
10
 
11
11
  self.resources ||= resource_scope.all if resource_scope.respond_to?(:all)
12
- @datatable = resource_datatable(:index)
12
+ @datatable = resource_datatable()
13
13
 
14
14
  run_callbacks(:resource_render)
15
15
  end
@@ -214,7 +214,7 @@ module Effective
214
214
  @page_title ||= "#{action.to_s.titleize} #{resource_plural_name.titleize}"
215
215
 
216
216
  if request.get?
217
- @datatable = resource_datatable(action)
217
+ @datatable = resource_datatable()
218
218
  run_callbacks(:resource_render)
219
219
 
220
220
  view = lookup_context.template_exists?(action, _prefixes) ? action : :index
@@ -61,7 +61,20 @@ module Effective
61
61
  raise 'expected a label or block' unless (label || block_given?)
62
62
 
63
63
  instance_exec do
64
- before_action(opts) { @page_title ||= (block_given? ? instance_exec(&block) : label).to_s }
64
+ before_action(opts) do
65
+ @page_title ||= (block_given? ? instance_exec(&block) : label).to_s
66
+ end
67
+ end
68
+ end
69
+
70
+ # datatable -> { MyDatatable.new }, only: [:index]
71
+ def datatable(obj = nil, opts = {}, &block)
72
+ raise 'expected a proc or block' unless (obj.respond_to?(:call) || block_given?)
73
+
74
+ instance_exec do
75
+ before_action(opts) do
76
+ @datatable ||= (block_given? ? instance_exec(&block) : obj.call)
77
+ end
65
78
  end
66
79
  end
67
80
 
@@ -84,7 +97,6 @@ module Effective
84
97
  else
85
98
  define_method(:resource_scope_relation) { return obj }
86
99
  end
87
-
88
100
  end
89
101
 
90
102
  end
@@ -108,15 +108,16 @@ module Effective
108
108
  resource_scope.where_values_hash.symbolize_keys
109
109
  end
110
110
 
111
- def resource_datatable(action)
112
- datatable_klass = if action == :index
113
- effective_resource.datatable_klass
114
- else # Admin::ActionDatatable.new
115
- "#{[effective_resource.namespace.to_s.classify.presence, action.to_s.classify].compact.join('::')}Datatable".safe_constantize ||
116
- "#{[effective_resource.namespace.to_s.classify.presence, action.to_s.pluralize.classify].compact.join('::')}Datatable".safe_constantize ||
117
- "#{[effective_resource.namespace.to_s.classify.presence, action.to_s.singularize.classify].compact.join('::')}Datatable".safe_constantize
111
+ def resource_datatable
112
+ # This might have been done from a before action or dsl method
113
+ unless @datatable.nil?
114
+ raise('expected @datatable to be an Effective::Datatable') unless @datatable.kind_of?(Effective::Datatable)
115
+
116
+ @datatable.effective_resource = effective_resource
117
+ return @datatable
118
118
  end
119
119
 
120
+ datatable_klass = effective_resource.datatable_klass
120
121
  return unless datatable_klass.present?
121
122
 
122
123
  datatable = datatable_klass.new(resource_datatable_attributes)
@@ -76,7 +76,11 @@ module ActsAsWizard
76
76
  end
77
77
 
78
78
  def next_step
79
- required_steps.reverse.find { |step| can_visit_step?(step) } || required_steps.first
79
+ first_uncompleted_step ||
80
+ last_completed_step ||
81
+ required_steps.reverse.find { |step| can_visit_step?(step) } ||
82
+ required_steps.first ||
83
+ :start
80
84
  end
81
85
 
82
86
  def previous_step(step)
@@ -89,6 +93,13 @@ module ActsAsWizard
89
93
  previous.blank? || has_completed_step?(previous)
90
94
  end
91
95
 
96
+ def has_completed_all_previous_steps?(step)
97
+ index = required_steps.index(step).to_i
98
+ previous = required_steps[0...index]
99
+
100
+ previous.blank? || previous.all? { |step| has_completed_step?(step) }
101
+ end
102
+
92
103
  def has_completed_last_step?
93
104
  has_completed_step?(required_steps.last)
94
105
  end
@@ -97,12 +108,12 @@ module ActsAsWizard
97
108
 
98
109
  def can_revisit_completed_steps(step)
99
110
  return (step == required_steps.last) if has_completed_last_step?
100
- has_completed_previous_step?(step)
111
+ has_completed_all_previous_steps?(step)
101
112
  end
102
113
 
103
114
  def cannot_revisit_completed_steps(step)
104
115
  return (step == required_steps.last) if has_completed_last_step?
105
- has_completed_previous_step?(step) && !has_completed_step?(step)
116
+ has_completed_all_previous_steps?(step) && !has_completed_step?(step)
106
117
  end
107
118
 
108
119
  end
@@ -14,7 +14,7 @@ module Effective
14
14
  include Effective::Resources::Paths
15
15
  include Effective::Resources::Relation
16
16
  include Effective::Resources::Sql
17
-
17
+ include Effective::Resources::Tenants
18
18
 
19
19
  # In practice, this is initialized two ways
20
20
  # With a klass and a namespace from effective_datatables
@@ -30,19 +30,19 @@ module Effective
30
30
 
31
31
  # Tenants
32
32
  def tenant_controller_path
33
- (Tenant.module_name.downcase + '/' + controller_path) if defined?(Tenant)
33
+ (Tenant.module_name.downcase + '/' + controller_path) if tenant?
34
34
  end
35
35
 
36
36
  def tenant_namespaced_class_name
37
- (Tenant.module_name + '::' + namespaced_class_name) if defined?(Tenant)
37
+ (Tenant.module_name + '::' + namespaced_class_name) if tenant?
38
38
  end
39
39
 
40
40
  def tenant_namespaced_module_name
41
- (Tenant.module_name + '::' + namespaced_module_name) if defined?(Tenant)
41
+ (Tenant.module_name + '::' + namespaced_module_name) if tenant?
42
42
  end
43
43
 
44
44
  def tenant_class_name
45
- (Tenant.module_name + '::' + class_name) if defined?(Tenant)
45
+ (Tenant.module_name + '::' + class_name) if tenant?
46
46
  end
47
47
 
48
48
  end
@@ -8,7 +8,10 @@ module Effective
8
8
 
9
9
  def _initialize_input(input, namespace: nil, relation: nil)
10
10
  @initialized_name = input
11
- @model_klass = (relation ? _klass_by_input(relation) : _klass_by_input(input))
11
+
12
+ # Sets the class but also namespaces
13
+ @model_klass = _klass_by_input(input)
14
+ @model_klass = _klass_by_input(relation) unless relation.nil?
12
15
 
13
16
  # Consider controller_name
14
17
  if @model_klass && input.kind_of?(String) && namespace.blank?
@@ -40,7 +40,7 @@ module Effective
40
40
  end
41
41
 
42
42
  def find_tenant_datatable_klass
43
- return unless defined?(Tenant)
43
+ return unless tenant?
44
44
 
45
45
  "::#{tenant_controller_path.classify.pluralize}Datatable".safe_constantize ||
46
46
  "::#{tenant_controller_path.classify}Datatable".safe_constantize ||
@@ -65,16 +65,6 @@ module Effective
65
65
  def human_plural_name
66
66
  name.pluralize.gsub('::', ' ').underscore.gsub('_', ' ')
67
67
  end
68
-
69
- def tenant
70
- return nil unless defined?(Tenant)
71
- return nil unless klass.present?
72
- return nil unless class_name.include?('::')
73
-
74
- name = class_name.split('::').first.downcase.to_sym
75
- name if Rails.application.config.tenants[name].present?
76
- end
77
-
78
68
  end
79
69
  end
80
70
  end
@@ -5,8 +5,7 @@ module Effective
5
5
  module Paths
6
6
 
7
7
  def tenant_path
8
- return unless tenant.present?
9
- Tenant.engine_path(tenant).sub("#{Rails.root}/", '')
8
+ Tenant.engine_path(tenant).sub("#{Rails.root}/", '') if tenant?
10
9
  end
11
10
 
12
11
  def model_file
@@ -0,0 +1,20 @@
1
+ module Effective
2
+ module Resources
3
+ module Tenants
4
+
5
+ def tenant?
6
+ defined?(::Tenant)
7
+ end
8
+
9
+ def tenant
10
+ return unless tenant?
11
+ return nil unless klass.present?
12
+ return nil unless class_name.include?('::')
13
+
14
+ name = class_name.split('::').first.downcase.to_sym
15
+ name if Rails.application.config.tenants[name].present?
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '1.9.1'.freeze
2
+ VERSION = '1.9.5'.freeze
3
3
  end
@@ -33,6 +33,24 @@ module EffectiveResources
33
33
 
34
34
  # Utilities
35
35
 
36
+ # This looks up the best class give the name
37
+ # If the Tenant is present, use those classes first.
38
+ def self.best(name)
39
+ klass = if defined?(Tenant)
40
+ ('::' + Tenant.module_name + '::' + name).safe_constantize ||
41
+ ('::' + Tenant.module_name + '::Effective::' + name).safe_constantize
42
+ end
43
+
44
+ klass ||= begin
45
+ ('::' + name).safe_constantize ||
46
+ ('::Effective::' + name).safe_constantize
47
+ end
48
+
49
+ raise("unable to find best #{name}") if klass.blank?
50
+
51
+ klass
52
+ end
53
+
36
54
  def self.truthy?(value)
37
55
  if defined?(::ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES) # Rails <5
38
56
  ::ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.include?(value)
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: 1.9.1
4
+ version: 1.9.5
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: 2021-11-04 00:00:00.000000000 Z
11
+ date: 2021-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -184,6 +184,7 @@ files:
184
184
  - app/models/effective/resources/paths.rb
185
185
  - app/models/effective/resources/relation.rb
186
186
  - app/models/effective/resources/sql.rb
187
+ - app/models/effective/resources/tenants.rb
187
188
  - app/views/application/_flash.html.haml
188
189
  - app/views/application/create.js.erb
189
190
  - app/views/application/destroy.js.erb