effective_resources 1.9.0 → 1.9.4

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: e170a1dbe4e16bf76c3048540a98601f3944fb624ba7f6dc50a25d31d0c6b528
4
- data.tar.gz: 3e0c48d4caa389595a6b77f7ab7f6ad00c469d397e0962d443ec04a8129d73cb
3
+ metadata.gz: 72da4b1b0ca72429a3a32b29cfb4f6fa3e8861b0c5ca4e5243b5f9b6405c55fd
4
+ data.tar.gz: a145acc8a26f9e13aa237bce6519f0d5f6e9964d6c3db556324876dca5fdf2e7
5
5
  SHA512:
6
- metadata.gz: ea9eefce2138894165ba88a81f5fbefa0edd500046aed321bd11ad6b93181b5cc9a36ba51668d869b59043e629c71577e026a97dd9667117f864db7b3199eaa9
7
- data.tar.gz: f01e4bcef353c0fd5865b4cb046eb3814acf7172c357b8f2b6b7a9f9456f3209d1a13f0931ed67bb7804e891e6a79aab7ef774b85996d7f07e5872e0b84069db
6
+ metadata.gz: 6bb00698226acb546365464870767a22e235310a9128d2fa7a80df17dca9697d9f58bfb2810744657591d0c80605a836d507cfe9f9d79abd5cffb6a712ddc4d1
7
+ data.tar.gz: 329869f907f76bd54bd506e41433a40e1fd95837b81219cf80c2f349fc448d081080e4e73558c42207c90b576f0c0a1a1f31698a7e05378674a048f13486cc17
@@ -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
@@ -1,3 +1,5 @@
1
+ # frozen_sting_literals: true
2
+
1
3
  module Effective
2
4
  module Resources
3
5
  module Forms
@@ -1,3 +1,5 @@
1
+ # frozen_sting_literals: true
2
+
1
3
  module Effective
2
4
  module Resources
3
5
  module Generator
@@ -26,6 +28,23 @@ module Effective
26
28
  Array(namespaces).map { |name| name.to_s.classify }.join('::') + '::' + class_name.gsub('::', '')
27
29
  end
28
30
 
31
+ # Tenants
32
+ def tenant_controller_path
33
+ (Tenant.module_name.downcase + '/' + controller_path) if tenant?
34
+ end
35
+
36
+ def tenant_namespaced_class_name
37
+ (Tenant.module_name + '::' + namespaced_class_name) if tenant?
38
+ end
39
+
40
+ def tenant_namespaced_module_name
41
+ (Tenant.module_name + '::' + namespaced_module_name) if tenant?
42
+ end
43
+
44
+ def tenant_class_name
45
+ (Tenant.module_name + '::' + class_name) if tenant?
46
+ end
47
+
29
48
  end
30
49
  end
31
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_sting_literals: true
2
+
1
3
  module Effective
2
4
  module Resources
3
5
  module Init
@@ -6,7 +8,10 @@ module Effective
6
8
 
7
9
  def _initialize_input(input, namespace: nil, relation: nil)
8
10
  @initialized_name = input
9
- @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) if relation.present?
10
15
 
11
16
  # Consider controller_name
12
17
  if @model_klass && input.kind_of?(String) && namespace.blank?
@@ -7,28 +7,11 @@ module Effective
7
7
  end
8
8
 
9
9
  def datatable_klass
10
- if defined?(EffectiveDatatables)
11
- "#{controller_path.classify.pluralize}Datatable".safe_constantize ||
12
- "#{controller_path.classify}Datatable".safe_constantize ||
13
- "#{namespaced_class_name.pluralize}Datatable".safe_constantize ||
14
- "#{namespaced_module_name.pluralize}Datatable".safe_constantize ||
15
- "#{namespaced_class_name.pluralize.gsub('::', '')}Datatable".safe_constantize ||
16
- "#{class_name.pluralize.camelize}Datatable".safe_constantize ||
17
- "#{class_name.pluralize.camelize.gsub('::', '')}Datatable".safe_constantize ||
18
- "#{name.pluralize.camelize}Datatable".safe_constantize ||
19
- "#{name.pluralize.camelize.gsub('::', '')}Datatable".safe_constantize ||
20
- "Effective::Datatables::#{namespaced_class_name.pluralize}".safe_constantize ||
21
- "Effective::Datatables::#{class_name.pluralize.camelize}".safe_constantize ||
22
- "Effective::Datatables::#{name.pluralize.camelize}".safe_constantize
23
- end
10
+ (find_tenant_datatable_klass || find_datatable_klass) if defined?(EffectiveDatatables)
24
11
  end
25
12
 
26
13
  def controller_klass
27
- "#{namespaced_class_name.pluralize}Controller".safe_constantize ||
28
- "#{class_name.pluralize.classify}Controller".safe_constantize ||
29
- "#{name.pluralize.classify}Controller".safe_constantize ||
30
- "#{initialized_name.to_s.classify.pluralize}Controller".safe_constantize ||
31
- "#{initialized_name.to_s.classify}Controller".safe_constantize
14
+ find_controller_klass
32
15
  end
33
16
 
34
17
  def active_record?
@@ -39,6 +22,44 @@ module Effective
39
22
  klass && klass.ancestors.include?(ActiveModel::Model)
40
23
  end
41
24
 
25
+ private
26
+
27
+ def find_datatable_klass
28
+ "::#{controller_path.classify.pluralize}Datatable".safe_constantize ||
29
+ "::#{controller_path.classify}Datatable".safe_constantize ||
30
+ "::#{namespaced_class_name.pluralize}Datatable".safe_constantize ||
31
+ "::#{namespaced_module_name.pluralize}Datatable".safe_constantize ||
32
+ "::#{namespaced_class_name.pluralize.gsub('::', '')}Datatable".safe_constantize ||
33
+ "::#{class_name.pluralize.camelize}Datatable".safe_constantize ||
34
+ "::#{class_name.pluralize.camelize.gsub('::', '')}Datatable".safe_constantize ||
35
+ "::#{name.pluralize.camelize}Datatable".safe_constantize ||
36
+ "::#{name.pluralize.camelize.gsub('::', '')}Datatable".safe_constantize ||
37
+ "::Effective::Datatables::#{namespaced_class_name.pluralize}".safe_constantize ||
38
+ "::Effective::Datatables::#{class_name.pluralize.camelize}".safe_constantize ||
39
+ "::Effective::Datatables::#{name.pluralize.camelize}".safe_constantize
40
+ end
41
+
42
+ def find_tenant_datatable_klass
43
+ return unless tenant?
44
+
45
+ "::#{tenant_controller_path.classify.pluralize}Datatable".safe_constantize ||
46
+ "::#{tenant_controller_path.classify}Datatable".safe_constantize ||
47
+ "::#{tenant_namespaced_class_name.pluralize}Datatable".safe_constantize ||
48
+
49
+ "::#{tenant_namespaced_module_name.pluralize}Datatable".safe_constantize ||
50
+ "::#{tenant_namespaced_class_name.pluralize.gsub('::', '')}Datatable".safe_constantize ||
51
+ "::#{tenant_class_name.pluralize.camelize}Datatable".safe_constantize ||
52
+ "::#{tenant_class_name.pluralize.camelize.gsub('::', '')}Datatable".safe_constantize
53
+ end
54
+
55
+ def find_controller_klass
56
+ "#{namespaced_class_name.pluralize}Controller".safe_constantize ||
57
+ "#{class_name.pluralize.classify}Controller".safe_constantize ||
58
+ "#{name.pluralize.classify}Controller".safe_constantize ||
59
+ "#{initialized_name.to_s.classify.pluralize}Controller".safe_constantize ||
60
+ "#{initialized_name.to_s.classify}Controller".safe_constantize
61
+ end
62
+
42
63
  end
43
64
  end
44
65
  end
@@ -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.0'.freeze
2
+ VERSION = '1.9.4'.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.0
4
+ version: 1.9.4
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-10-25 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