jungle_path 0.0.8 → 0.0.9
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/lib/jungle_path/db_model/temp.rb +353 -0
- data/lib/jungle_path/gen/schema_tree.rb +2 -2
- data/lib/jungle_path/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf2e30fa1aa99e9ce5445d3edfa94e29930594b8
|
4
|
+
data.tar.gz: 58865df8e55ca302f53116c170dbcab565954667
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 227f6aa4a18ad64b32cf2195daad216079a02670a0749a62d8f6b8b2e85ae4fd8a17cf0ad2e182c8b6db5b0b9c713530b3d8085ec995dafb2d27dc9e47e07317
|
7
|
+
data.tar.gz: 3586ccaeda9320cc290131bd231a6e2b70c69e4a4f231cebc3e83128d64e2b8e451d82056e7467fb79337179de8ee87282b1989e09ae888f721f44c4bfa9d51d
|
@@ -0,0 +1,353 @@
|
|
1
|
+
require 'jungle_path/json'
|
2
|
+
require 'jungle_path/db_model'
|
3
|
+
|
4
|
+
module JunglePath
|
5
|
+
module DBModel
|
6
|
+
class Table
|
7
|
+
@models = {}
|
8
|
+
def self.set_columns
|
9
|
+
@columns = {}
|
10
|
+
@non_audit_columns = {}
|
11
|
+
@primary_key_columns = {}
|
12
|
+
@alternate_key_columns = {}
|
13
|
+
@foreign_key_columns = {}
|
14
|
+
@foreign_key_columns_by_table_name = {}
|
15
|
+
@references = Set.new
|
16
|
+
@secure_columns = {}
|
17
|
+
@unique_indexes = []
|
18
|
+
@indexes = []
|
19
|
+
@table_name = self.name.split('::').last.underscore.to_sym
|
20
|
+
@tagged_columns = {}
|
21
|
+
@sequence = 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.columns
|
25
|
+
@columns
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.columns_alphabetical_order
|
29
|
+
@columns.values.clone.sort { |a,b| a.name <=> b.name }
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.columns_sequence_order
|
33
|
+
@columns.values.clone.sort { |a,b| a.sequence <=> b.sequence }
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.non_audit_columns
|
37
|
+
@non_audit_columns
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.primary_key_columns
|
41
|
+
@primary_key_columns
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.alternate_key_columns
|
45
|
+
@alternate_key_columns
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.foreign_key_columns
|
49
|
+
@foreign_key_columns
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.foreign_key_columns_by_table_name
|
53
|
+
@foreign_key_columns_by_table_name
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.tagged_columns
|
57
|
+
#call like: TableClass.tagged_columns[:my_tag] to return set of columns having given tag.
|
58
|
+
@tagged_columns
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.references
|
62
|
+
@references
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.has_reference_to?(table)
|
66
|
+
@references.member?(table.table_name)
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.has_references?
|
70
|
+
!@references.empty?
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.has_no_references?
|
74
|
+
!self.has_references?
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.secure_columns
|
78
|
+
@secure_columns
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.table_name
|
82
|
+
@table_name
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.plural_table_name
|
86
|
+
"#{@table_name}s"
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.description
|
90
|
+
@description
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.description=(value)
|
94
|
+
@description = value
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.is_view?
|
98
|
+
if @view_sql
|
99
|
+
true
|
100
|
+
else
|
101
|
+
false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.view_sql
|
106
|
+
@view_sql
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.view_sql=(value)
|
110
|
+
@view_sql = value
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.view_references
|
114
|
+
if @view_references
|
115
|
+
@view_references
|
116
|
+
else
|
117
|
+
references
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.view_references=(array_of_table_names)
|
122
|
+
@view_references = Set.new(array_of_table_names)
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.has_view_reference_to?(table)
|
126
|
+
if @view_references
|
127
|
+
@view_references.member?(table.table_name)
|
128
|
+
else
|
129
|
+
has_reference_to?(table)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def self.has_view_references?
|
134
|
+
if @view_references
|
135
|
+
!@view_references.empty?
|
136
|
+
else
|
137
|
+
has_references?
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.has_no_view_references?
|
142
|
+
!self.has_view_references?
|
143
|
+
end
|
144
|
+
|
145
|
+
def self.inherited(sub_class)
|
146
|
+
sub_class.set_columns #setup subclass with particular class instance vars.
|
147
|
+
@models[sub_class.table_name] = sub_class #keep a list of all subclasses.
|
148
|
+
end
|
149
|
+
|
150
|
+
def self.models
|
151
|
+
@models
|
152
|
+
end
|
153
|
+
|
154
|
+
def self.models_alphabetical_order
|
155
|
+
@models.values.clone.sort { |a,b| a.table_name <=> b.table_name }
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.models_dependent_order
|
159
|
+
result = self.model_sort(@models.values.clone)
|
160
|
+
# map array of table names into an array of table (model) classes.
|
161
|
+
result.map {|key| @models[key]}
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.model_sort(list, result=Set.new, level=0)
|
165
|
+
# return array of table names sorted in dependency order (not alphabetical order).
|
166
|
+
#puts "level: #{level}."
|
167
|
+
remaining = []
|
168
|
+
list.each do |value|
|
169
|
+
#puts "\tvalue: #{value.table_name}. references: #{value.references.to_a}."
|
170
|
+
if value.has_no_view_references?
|
171
|
+
#puts "\tadding: #{value.table_name}."
|
172
|
+
result << value.table_name
|
173
|
+
elsif value.view_references.subset? result
|
174
|
+
#puts "\tadding: #{value.table_name}."
|
175
|
+
result << value.table_name
|
176
|
+
else
|
177
|
+
remaining << value
|
178
|
+
end
|
179
|
+
end
|
180
|
+
#puts "\tresult: #{result.length}: #{result.to_a}."
|
181
|
+
#puts "\tremaining: #{remaining.length}: #{remaining}."
|
182
|
+
return [] if level > 10 #something is wrong!!!
|
183
|
+
result = self.model_sort(remaining, result, level + 1) if remaining.length > 0
|
184
|
+
result
|
185
|
+
end
|
186
|
+
|
187
|
+
def self.define(*column_defs)
|
188
|
+
set_columns
|
189
|
+
|
190
|
+
column_defs.each do |column_def|
|
191
|
+
# one column_def may produce multiple actual columns:
|
192
|
+
columns = Column.get_column_def_columns(column_def, @sequence)
|
193
|
+
columns.each do |column|
|
194
|
+
@sequence = column.sequence + 1
|
195
|
+
self.columns[column.name] = column
|
196
|
+
self.primary_key_columns[column.name] = column if column.primary_key?
|
197
|
+
self.alternate_key_columns[column.name] = column if column.alternate_key?
|
198
|
+
self.foreign_key_columns[column.name] = column if column.foreign_key?
|
199
|
+
|
200
|
+
if column.foreign_key?
|
201
|
+
hash = self.foreign_key_columns_by_table_name
|
202
|
+
sub_hash = hash[column.foreign_key_table_name]
|
203
|
+
sub_hash = {} unless sub_hash
|
204
|
+
sub_hash[column.name] = column
|
205
|
+
hash[column.foreign_key_table_name] = sub_hash
|
206
|
+
end
|
207
|
+
|
208
|
+
if column.tags
|
209
|
+
column.tags.each do |tag|
|
210
|
+
tagged_columns = @tagged_columns[tag] || Set.new
|
211
|
+
tagged_columns.add(column)
|
212
|
+
@tagged_columns[tag] = tagged_columns
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
self.references << column.foreign_key_table_name if column.foreign_key? and column.foreign_key_table_name != self.table_name
|
217
|
+
self.secure_columns[column.name] = column if column.secure?
|
218
|
+
self.non_audit_columns[column.name] = column unless column.is_audit_column?
|
219
|
+
#attr_accessor column.name
|
220
|
+
define_method(column.name) do
|
221
|
+
@values[column.name]
|
222
|
+
end
|
223
|
+
define_method("#{column.name}=") do |value|
|
224
|
+
if value != @values[column.name]
|
225
|
+
@values[column.name] = value
|
226
|
+
@modified.add(column.name)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
self.primary_key_columns.values[0].calculated = true if self.primary_key_columns.length == 1
|
231
|
+
end
|
232
|
+
|
233
|
+
define_method("_values") do
|
234
|
+
@values
|
235
|
+
end
|
236
|
+
|
237
|
+
define_method("_modified") do
|
238
|
+
@modified
|
239
|
+
end
|
240
|
+
|
241
|
+
define_method("_modified_hash") do
|
242
|
+
hash = {}
|
243
|
+
@modified.each do |key|
|
244
|
+
hash[key] = @values[key]
|
245
|
+
end
|
246
|
+
hash
|
247
|
+
end
|
248
|
+
|
249
|
+
define_method("_has_value_hash") do
|
250
|
+
hash = {}
|
251
|
+
@values.each do |key, value|
|
252
|
+
hash[key] = value unless value == nil
|
253
|
+
end
|
254
|
+
hash
|
255
|
+
end
|
256
|
+
|
257
|
+
define_method("_primary_key") do
|
258
|
+
primary_key = {}
|
259
|
+
_primary_key_columns.keys.each do |key|
|
260
|
+
primary_key[key] = @values[key]
|
261
|
+
end
|
262
|
+
primary_key
|
263
|
+
end
|
264
|
+
|
265
|
+
define_method("_alternate_key") do
|
266
|
+
alternate_key = {}
|
267
|
+
_alternate_key_columns.keys.each do |key|
|
268
|
+
alternate_key[key] = @values[key]
|
269
|
+
end
|
270
|
+
alternate_key
|
271
|
+
end
|
272
|
+
|
273
|
+
define_method("_consume_hash") do |hash, mark_as_modified_if_changed=true|
|
274
|
+
@values.each do |key, value|
|
275
|
+
if hash.has_key?(key) and @values[key] != hash[key]
|
276
|
+
@values[key] = hash[key]
|
277
|
+
@modified.add(key) if mark_as_modified_if_changed
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
define_method("_columns") do
|
283
|
+
self.class.columns
|
284
|
+
end
|
285
|
+
|
286
|
+
define_method("_primary_key_columns") do
|
287
|
+
self.class.primary_key_columns
|
288
|
+
end
|
289
|
+
|
290
|
+
define_method("_alternate_key_columns") do
|
291
|
+
self.class.alternate_key_columns
|
292
|
+
end
|
293
|
+
|
294
|
+
define_method("_foreign_key_columns") do
|
295
|
+
self.class.foreign_key_columns
|
296
|
+
end
|
297
|
+
|
298
|
+
define_method("_secure_columns") do
|
299
|
+
self.class.secure_columns
|
300
|
+
end
|
301
|
+
|
302
|
+
define_method("_tagged_columns") do
|
303
|
+
self.class.tagged_columns
|
304
|
+
end
|
305
|
+
|
306
|
+
define_method("_table_name") do
|
307
|
+
self.class.table_name
|
308
|
+
end
|
309
|
+
|
310
|
+
define_method("_secure?") do
|
311
|
+
@secure
|
312
|
+
end
|
313
|
+
|
314
|
+
define_method("_secure=") do |value|
|
315
|
+
@secure = value
|
316
|
+
end
|
317
|
+
|
318
|
+
define_method("to_hash") do
|
319
|
+
#puts "#{_table_name} to_hash."
|
320
|
+
return @values.clone if _secure_columns.length == 0 or !_secure?
|
321
|
+
hash = {}
|
322
|
+
puts "stripping secure columns!"
|
323
|
+
@values.each do |key, value|
|
324
|
+
hash[key] = value unless _secure_columns.has_key?(key)
|
325
|
+
end
|
326
|
+
hash
|
327
|
+
end
|
328
|
+
|
329
|
+
define_method("to_h") do
|
330
|
+
# ruby way :)
|
331
|
+
to_hash
|
332
|
+
end
|
333
|
+
|
334
|
+
define_method("to_json") do |arg=nil|
|
335
|
+
#puts "#{_table_name} to_json."
|
336
|
+
#puts "to_json - arg: #{arg.class}" if arg
|
337
|
+
json = JsonWrap.dump self
|
338
|
+
#puts json
|
339
|
+
json
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
def initialize(hash=nil, mark_as_modified_if_changed=true, transform_params=false)
|
344
|
+
@values = {}
|
345
|
+
@secure = true
|
346
|
+
_columns.keys.each do |key| @values[key] = nil end
|
347
|
+
@modified = Set.new # holds hash keys of modified values.
|
348
|
+
hash = DBModel::Params.transform(hash, _columns) if transform_params
|
349
|
+
_consume_hash(hash, mark_as_modified_if_changed) if hash
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
@@ -56,8 +56,8 @@ module JunglePath
|
|
56
56
|
name = column.name.to_s[0..-4].to_sym # cut off "..._id" from column name and use as node name.
|
57
57
|
symbol = "->"
|
58
58
|
child_table_name = column.foreign_key_table_name
|
59
|
-
puts "tables_hash: #{tables_hash}"
|
60
|
-
puts "column.foreign_key_table_name: #{column.foreign_key_table_name}"
|
59
|
+
#puts "tables_hash: #{tables_hash}"
|
60
|
+
#puts "column.foreign_key_table_name: #{column.foreign_key_table_name}"
|
61
61
|
child_table_join_column_name = tables_hash[column.foreign_key_table_name].primary_key_columns.first[0]
|
62
62
|
parent_table_join_column_name = column.name
|
63
63
|
else
|
data/lib/jungle_path/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jungle_path
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael VanZant
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -140,6 +140,7 @@ files:
|
|
140
140
|
- lib/jungle_path/db_model/schema.rb
|
141
141
|
- lib/jungle_path/db_model/string.rb
|
142
142
|
- lib/jungle_path/db_model/table.rb
|
143
|
+
- lib/jungle_path/db_model/temp.rb
|
143
144
|
- lib/jungle_path/exceptions.rb
|
144
145
|
- lib/jungle_path/file.rb
|
145
146
|
- lib/jungle_path/file/file.rb
|