five-two-nw-olivander 0.1.2.29 → 0.1.2.30
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/olivander/resources/model_registrar.rb +49 -0
- data/app/controllers/concerns/olivander/resources/model_registry.rb +201 -0
- data/app/controllers/concerns/olivander/resources/route_builder.rb +7 -0
- data/app/datatables/olivander/datatable.rb +11 -0
- data/app/helpers/olivander/application_helper.rb +1 -1
- data/lib/olivander/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c44e3b7096fe950aaac7828a92343e5f05cabac07d3776d35369fd434fd83a97
|
|
4
|
+
data.tar.gz: 6a46d72cfc1f35b37fdc61ee0027f278785af0fcb79e5ee38f1f67cf72da4756
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa838b60681399f4000cf08e2c0fcc8d23cbacd9ea8c72087a309fc78bcb1223f3062ce5be88c849591d477aaef2c49a18c35b0e5bc166ef972aa4d6902e04d8
|
|
7
|
+
data.tar.gz: ad347d7be7b1a862b125152ea10484e5b9c5cd36287064d3c8bc49fe60043349aaff32eca85f77ceee1c8d5e1eb7c769fb12af5e54457908b87bb0ddbd95f65d
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'olivander/resources/model_registry'
|
|
2
|
+
|
|
3
|
+
module Olivander
|
|
4
|
+
module Resources
|
|
5
|
+
module ModelRegistrar
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
included do
|
|
9
|
+
def this_is_included_method
|
|
10
|
+
puts 'hi'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class_methods do
|
|
15
|
+
def register_model(model = self, context: :default, using: self, &block)
|
|
16
|
+
Rails.logger.debug "###################"
|
|
17
|
+
Rails.logger.debug "registering model #{model.name} in context #{context} using #{using&.name} at #{self.name}"
|
|
18
|
+
using.register_model(model, context: context, &block) && return unless using == self
|
|
19
|
+
|
|
20
|
+
::Olivander::Resources::ModelRegistry.global_registry.register(model, &block)
|
|
21
|
+
Rails.logger.debug "###################\n"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class TestRegistrant
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class TestRegistrar
|
|
30
|
+
include ModelRegistrar
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class TestRegistrar2
|
|
34
|
+
include ModelRegistrar
|
|
35
|
+
|
|
36
|
+
# register_model do
|
|
37
|
+
# puts 'hello'
|
|
38
|
+
# field_layout :show do :all end
|
|
39
|
+
# end
|
|
40
|
+
# register_model Olivander::Resources::TestRegistrant, context: :foo do
|
|
41
|
+
# puts 'this is the other thing'
|
|
42
|
+
# field_layout do [[1, :id]] end
|
|
43
|
+
# end
|
|
44
|
+
# register_model context: :bar, using: TestRegistrar do
|
|
45
|
+
# puts 'and lastly...'
|
|
46
|
+
# end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
module Olivander
|
|
2
|
+
module Resources
|
|
3
|
+
module ModelRegistry
|
|
4
|
+
mattr_accessor :global_registry
|
|
5
|
+
|
|
6
|
+
module Registry
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
class_methods do
|
|
10
|
+
attr_accessor :_registry_hash
|
|
11
|
+
attr_accessor :_registering
|
|
12
|
+
|
|
13
|
+
def register(model, &block)
|
|
14
|
+
self._registry_hash ||= {}
|
|
15
|
+
self._registering = ensure_registry_for(model)
|
|
16
|
+
instance_exec(&block)
|
|
17
|
+
_registering.make_datatable_classes
|
|
18
|
+
self._registering = nil
|
|
19
|
+
# Rails.logger.debug _registry_hash
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def entry_for(model)
|
|
23
|
+
_registry_hash[model]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def ensure_registry_for(model)
|
|
27
|
+
_registry_hash[model] ||= RegisteredModel.new(model)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def field_layout(layouts = [:show, :form])
|
|
31
|
+
layouts = [*layouts] # ensure it's an array
|
|
32
|
+
field_layout = block_given? ? yield : :all
|
|
33
|
+
layouts.each do |layout|
|
|
34
|
+
Rails.logger.debug "setting layout for #{_registering}[#{layout}]"
|
|
35
|
+
_registering.add_layout(layout, field_layout)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def add_datatable(view = nil, &block)
|
|
40
|
+
_registering.add_datatable(view, DatatableDef.new(_registering, &block))
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def render_fields(field_list, with_format: :string)
|
|
44
|
+
_registering.render_fields(field_list, with_format)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class DatatableDef
|
|
50
|
+
attr_accessor :model, :blocks, :datatable_class, :block
|
|
51
|
+
|
|
52
|
+
def initialize(model, &block)
|
|
53
|
+
Rails.logger.info "making new datatable"
|
|
54
|
+
Rails.logger.info block.source
|
|
55
|
+
self.model = model
|
|
56
|
+
self.blocks = {}
|
|
57
|
+
|
|
58
|
+
# instance_exec(&block) if block_given?
|
|
59
|
+
self.block = block
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def datatable(sym)
|
|
63
|
+
blocks[:datatable] = Proc.new{ datatable do model.send(sym) end }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def collection(sym)
|
|
67
|
+
blocks[:collection] = Proc.new{ collection do model.send(sym) end }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def filters(sym)
|
|
71
|
+
blocks[:filters] = Proc.new{ model.send(sym) }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def charts(sym)
|
|
75
|
+
blocks[:charts] = Proc.new{ model.send(sym) }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def make_class(key)
|
|
79
|
+
# return datatable_class unless datatable_class.nil?
|
|
80
|
+
# ensure_blocks
|
|
81
|
+
|
|
82
|
+
name_key = key == :index ? '' : key
|
|
83
|
+
name = [model.name.demodulize, name_key, 'Datatable'].join
|
|
84
|
+
blocks = self.blocks
|
|
85
|
+
block = self.block
|
|
86
|
+
klass = Class.new(Olivander::Datatable) do
|
|
87
|
+
puts 'stuff'
|
|
88
|
+
# blocks.values.each do |block|
|
|
89
|
+
# puts 'this is a block'
|
|
90
|
+
# puts block.source
|
|
91
|
+
# instance_eval(block.source)
|
|
92
|
+
# binding.pry
|
|
93
|
+
# instance_exec(&block)
|
|
94
|
+
# end
|
|
95
|
+
# collection do
|
|
96
|
+
# Erp::Rate.all
|
|
97
|
+
# end
|
|
98
|
+
instance_exec(&block)
|
|
99
|
+
end
|
|
100
|
+
module_name = model.name.deconstantize
|
|
101
|
+
constantized_module = module_name.constantize
|
|
102
|
+
constantized_module.send(:remove_const, name) if constantized_module.const_defined?(name)
|
|
103
|
+
self.datatable_class = constantized_module.const_set(name, klass)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def ensure_blocks
|
|
107
|
+
blocks[:collection] ||= Proc.new{
|
|
108
|
+
model.all
|
|
109
|
+
}
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class RegisteredModel
|
|
114
|
+
attr_accessor :fields, :layouts, :datatables, :name, :model
|
|
115
|
+
|
|
116
|
+
def initialize(model)
|
|
117
|
+
self.model = model
|
|
118
|
+
set_fields
|
|
119
|
+
self.layouts = {}
|
|
120
|
+
self.datatables = {}
|
|
121
|
+
self.name = model.name
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def to_s
|
|
125
|
+
name
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def inspect
|
|
129
|
+
name
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def add_layout(key, layout)
|
|
133
|
+
layout = [[2, fields]] if layout == :all
|
|
134
|
+
layouts[key] = layout
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def layout(key)
|
|
138
|
+
layouts[key] || add_layout(key, :all)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def add_datatable(key, datatable_def)
|
|
142
|
+
Rails.logger.info "adding datatable #{key}"
|
|
143
|
+
datatables[key || :index] = datatable_def
|
|
144
|
+
# binding.pry
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def datatable(key)
|
|
148
|
+
datatables[key] || add_datatable(key, DatatableDef.new(self))
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def make_datatable_classes
|
|
152
|
+
datatables.each do |key, dt_def|
|
|
153
|
+
dt_def.make_class(key)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def render_fields(field_list, with_format)
|
|
158
|
+
field_list.each do |field|
|
|
159
|
+
fields[field].render_as = with_format
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
private
|
|
164
|
+
|
|
165
|
+
def set_fields
|
|
166
|
+
self.fields = {}
|
|
167
|
+
|
|
168
|
+
if model.respond_to?(:columns)
|
|
169
|
+
model.columns.map{ |x| RegisteredField.new(x) }.each do |field|
|
|
170
|
+
fields[field.key] = field
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
class RegisteredField
|
|
177
|
+
attr_accessor :key, :ar_def, :dt_def, :render_as
|
|
178
|
+
|
|
179
|
+
def to_s
|
|
180
|
+
key
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def inspect
|
|
184
|
+
key
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def initialize(ar_def)
|
|
188
|
+
self.key = ar_def.name.to_sym
|
|
189
|
+
self.ar_def = ar_def
|
|
190
|
+
self.render_as = ar_def.type
|
|
191
|
+
self.dt_def = {}
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
class DefaultModelRegistry
|
|
196
|
+
include Registry
|
|
197
|
+
::Olivander::Resources::ModelRegistry.global_registry = Olivander::Resources::ModelRegistry::DefaultModelRegistry
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
@@ -109,7 +109,9 @@ module Olivander
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
def build_routes(mapper)
|
|
112
|
+
Rails.logger.info "building routes..."
|
|
112
113
|
build_resource_routes(mapper)
|
|
114
|
+
Rails.logger.info "...routes built"
|
|
113
115
|
end
|
|
114
116
|
|
|
115
117
|
def set_controller_and_helper(a)
|
|
@@ -121,6 +123,7 @@ module Olivander
|
|
|
121
123
|
|
|
122
124
|
def build_resource_routes(mapper)
|
|
123
125
|
resources.keys.each do |k|
|
|
126
|
+
before_routes = Rails.application.routes.named_routes.helper_names
|
|
124
127
|
r = resources[k]
|
|
125
128
|
mapper.resources r.model, only: [] do
|
|
126
129
|
mapper.collection do
|
|
@@ -157,6 +160,10 @@ module Olivander
|
|
|
157
160
|
end
|
|
158
161
|
end
|
|
159
162
|
end
|
|
163
|
+
after_routes = Rails.application.routes.named_routes.helper_names
|
|
164
|
+
net_routes = after_routes - before_routes
|
|
165
|
+
# Rails.logger.info "added these route helpers:\n#{net_routes}"
|
|
166
|
+
# binding.pry if k == :projects
|
|
160
167
|
end
|
|
161
168
|
end
|
|
162
169
|
end
|
|
@@ -41,6 +41,17 @@ module Olivander
|
|
|
41
41
|
column_attributes.each do |key|
|
|
42
42
|
label = field_label_for(klazz, key)
|
|
43
43
|
sym = key.gsub('_id', '')
|
|
44
|
+
|
|
45
|
+
# modifiers = STRIP OFF ANY PUNCTUATION MARKS
|
|
46
|
+
# modifiers.each do |modifier|
|
|
47
|
+
# case !:
|
|
48
|
+
# visible = false
|
|
49
|
+
# case $:
|
|
50
|
+
# type = currency
|
|
51
|
+
# end
|
|
52
|
+
# end
|
|
53
|
+
|
|
54
|
+
|
|
44
55
|
visible = show.include?(key) || !(default_hidden.include?(key) || hide.include?(key))
|
|
45
56
|
if link_path.present? && sym == :id
|
|
46
57
|
link_col sym, link_path, 'id', visible: visible
|
|
@@ -91,7 +91,7 @@ module Olivander
|
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
def sidebar_context_name
|
|
94
|
-
[@context.name, sidebar_context_suffix&.upcase].reject
|
|
94
|
+
[@context.name, sidebar_context_suffix&.upcase].reject{ |x| x.blank? or x == 'PRODUCTION' }.join(' ')
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def sidebar_context_suffix
|
data/lib/olivander/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: five-two-nw-olivander
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.2.
|
|
4
|
+
version: 0.1.2.30
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eric Dennis
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-08-
|
|
11
|
+
date: 2023-08-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: chartkick
|
|
@@ -193,6 +193,8 @@ files:
|
|
|
193
193
|
- app/components/olivander/components/small_box_component.html.haml
|
|
194
194
|
- app/components/olivander/components/small_box_component.rb
|
|
195
195
|
- app/controllers/concerns/olivander/resources/auto_form_attributes.rb
|
|
196
|
+
- app/controllers/concerns/olivander/resources/model_registrar.rb
|
|
197
|
+
- app/controllers/concerns/olivander/resources/model_registry.rb
|
|
196
198
|
- app/controllers/concerns/olivander/resources/route_builder.rb
|
|
197
199
|
- app/controllers/olivander/application_controller.rb
|
|
198
200
|
- app/datatables/olivander/datatable.rb
|