hypersonic-plus 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/lib/hdatastructures/hfieldtable.rb +285 -0
  3. data/lib/hdatastructures/hhash.rb +9 -0
  4. data/lib/hdatastructures/hlist.rb +100 -0
  5. data/lib/hdatastructures/hrecord.rb +75 -0
  6. data/lib/hdatastructures/hspreadfieldtable.rb +129 -0
  7. data/lib/hdb/hdataloader.rb +75 -0
  8. data/lib/hdb/hdb.rb +357 -0
  9. data/lib/hdb/hdb_test.rb +248 -0
  10. data/lib/hdb/hdbgenerator.rb +211 -0
  11. data/lib/hdb/hdbi.rb +63 -0
  12. data/lib/hdb/hdbi_test.rb +133 -0
  13. data/lib/hdb/hfield.rb +180 -0
  14. data/lib/hdb/hmysql.rb +99 -0
  15. data/lib/hdb/hmysql2.rb +96 -0
  16. data/lib/hdb/hodb.rb +948 -0
  17. data/lib/hdb/hpgsql.rb +54 -0
  18. data/lib/hengine/application_controller.rb +204 -0
  19. data/lib/hengine/hconfiguration.rb +40 -0
  20. data/lib/hengine/hhotlogger.rb +13 -0
  21. data/lib/hengine/hlogger.rb +119 -0
  22. data/lib/hengine/hmalloc.rb +275 -0
  23. data/lib/hengine/hmoduleloader.rb +15 -0
  24. data/lib/hengine/hsessiondata.rb +79 -0
  25. data/lib/hengine/hshareddata.rb +60 -0
  26. data/lib/hengine/htranslate.rb +40 -0
  27. data/lib/hengine/hviewloader.rb +99 -0
  28. data/lib/hinit/hinit.rb +3 -0
  29. data/lib/hmisc/hcolorize.rb +100 -0
  30. data/lib/hmisc/hdecoratorfunctions.rb +15 -0
  31. data/lib/hmisc/hdir.rb +19 -0
  32. data/lib/hmisc/hhtmlnode.rb +27 -0
  33. data/lib/hmisc/hinputvalidator.rb +95 -0
  34. data/lib/hmisc/hio.rb +142 -0
  35. data/lib/hmisc/hjson.rb +16 -0
  36. data/lib/hsqlmanager/hpgsqldatabasemanager.rb +76 -0
  37. data/lib/hsqlmanager/hsqldatabasemanager.rb +349 -0
  38. data/lib/hsqlmanager/hsqltable.rb +16 -0
  39. data/lib/husermanager/husermanager.rb +122 -0
  40. data/lib/hwidgets/haccordionmenu.rb +117 -0
  41. data/lib/hwidgets/hcheckboxtag.rb +33 -0
  42. data/lib/hwidgets/hdbactionbuttons.rb +26 -0
  43. data/lib/hwidgets/hdbcombobox.rb +71 -0
  44. data/lib/hwidgets/hdbdialogview.rb +190 -0
  45. data/lib/hwidgets/hdbfilterview.rb +28 -0
  46. data/lib/hwidgets/hdbtableview.rb +213 -0
  47. data/lib/hwidgets/hdbview.rb +63 -0
  48. data/lib/hwidgets/hdivtag.rb +9 -0
  49. data/lib/hwidgets/hdropdown.rb +44 -0
  50. data/lib/hwidgets/hformfield.rb +91 -0
  51. data/lib/hwidgets/hgrouptag.rb +65 -0
  52. data/lib/hwidgets/hhiddeninputtag.rb +12 -0
  53. data/lib/hwidgets/hinputtag.rb +55 -0
  54. data/lib/hwidgets/hlabeltag.rb +30 -0
  55. data/lib/hwidgets/hmainview.rb +37 -0
  56. data/lib/hwidgets/hpagination.rb +65 -0
  57. data/lib/hwidgets/hradiobuttontag.rb +30 -0
  58. data/lib/hwidgets/hselecttag.rb +32 -0
  59. data/lib/hwidgets/htableview.rb +262 -0
  60. data/lib/hwidgets/htabview.rb +84 -0
  61. data/lib/hwidgets/htextareatag.rb +20 -0
  62. data/lib/hwidgets/htopnav.rb +85 -0
  63. data/lib/hwidgets/hwidget.rb +423 -0
  64. data/lib/hypersonic.rb +9 -0
  65. metadata +276 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0dea6bc861144541cd3ae9c84478ee31845f3620
4
+ data.tar.gz: 85f7ee1102ca76e5bf83f8589b792ddb9092a88c
5
+ SHA512:
6
+ metadata.gz: 38ebea93fae846705eaabf7dab8085707f1b3e5f87075ce5d757beb176cdf4de36cfe32312881968716bc7c71872697377c687eb5451cb27fc560a2c059fbb78
7
+ data.tar.gz: 6764b69ad9caf5864a7707876408ebf340d27d9f64ad968b1779d1727981c28551cd5c7405d05084a1c416611710a005b0678ff061c73697294a05097b31cc8b
@@ -0,0 +1,285 @@
1
+ #!/usr/bin/env ruby
2
+ require 'hdatastructures/hlist'
3
+ require 'hmisc/hcolorize'
4
+
5
+ class HFieldTable < Array
6
+
7
+ attr_accessor :tableName, :allRows, :allCols
8
+
9
+ def initialize(allRows = false, allCols = false)
10
+ @tableName = nil
11
+ @fields = {}
12
+ @allRows = allRows
13
+ @allCols = allCols
14
+ end
15
+
16
+ def copyConstructor
17
+ Marshal.load(Marshal.dump(self))
18
+ end
19
+
20
+ def fields()
21
+ result = {}
22
+ @fields.each do |fieldName, fieldValue|
23
+ result[fieldName] = fieldValue if fieldValue.visible or @allCols
24
+ end
25
+ return result
26
+ end
27
+
28
+ def addFieldName(fieldName, visible = true)
29
+ record = HRecord.new(fieldName) unless @fields[fieldName]
30
+ record.set(:visible, visible)
31
+ @fields[fieldName] = record
32
+ end
33
+
34
+ def method_missing(methodName, *args)
35
+
36
+ if methodName.to_s =~ /^setField(.+)$/ # example: setFieldCaption(fieldName, fieldCaption)
37
+ @fields[args[0]].set($1.downcase().to_sym, args[1])
38
+ else
39
+ caller_infos = caller.first.split(":")
40
+ puts "Error: #{caller_infos[0]}:#{caller_infos[1]} - #{methodName} not found".hight_red()
41
+ end
42
+
43
+ end
44
+
45
+ def rowCount()
46
+ return self.length()
47
+ end
48
+
49
+ def columnCount()
50
+ return @fields.length()
51
+ end
52
+
53
+ def columnCountByKey(key = :visible)
54
+ return self.columnCount if @allCols
55
+ i = 0
56
+ @fields.each { |fieldName, fieldValue| i += 1 if fieldValue.value(key) }
57
+ return i
58
+ end
59
+
60
+ def setData(row, fieldName, data)
61
+ self[row][fieldName] = data
62
+ end
63
+
64
+ # Inserts a new row filled with data
65
+ def insertRow(row, data = nil)
66
+ tmp = @fields.dup
67
+ self.insert(row, tmp.each { |k, v| tmp[k] = data } )
68
+ end
69
+
70
+ def deleteRow(row)
71
+ self.delete_at(row)
72
+ end
73
+
74
+ def setDataByFieldName(row, fieldName, data)
75
+ self.setData(row, fieldName, data)
76
+ end
77
+
78
+ def setIntoRecordByFieldName(row, fieldName, data)
79
+ self.setDataByFieldName(row, fieldName, HRecord.new(data))
80
+ end
81
+
82
+ def setCaption
83
+ self.fields.each do |fieldName, fieldValue|
84
+ self.setFieldCaption(fieldName, fieldValue.value.hcapitalize())
85
+ end
86
+ end
87
+
88
+ def [](fieldName)
89
+ self[fieldName] = {} unless super(fieldName)
90
+ return super(fieldName)
91
+ end
92
+
93
+ def data(row, fieldName)
94
+ return self[row][fieldName]
95
+ end
96
+
97
+ def dataByFieldName(row, fieldName)
98
+ return self.data(row, fieldName)
99
+ end
100
+
101
+ def valueByFieldName(row, fieldName)
102
+ value = self.data(row, fieldName)
103
+ value = value.value() if (value.class == HRecord)
104
+ return value
105
+ end
106
+
107
+ def row(row)
108
+ #return self[row] if @allCols
109
+ result = {}
110
+ @fields.each do |fieldName, fieldValue|
111
+ result[fieldName] = self.dataByFieldName(row, fieldName) if fieldValue.visible or @allCols
112
+ end
113
+ return result
114
+ end
115
+
116
+ def match(row)
117
+ @fields.each do |fieldName, fieldValue|
118
+ filter = fieldValue.filter
119
+ next unless filter
120
+ data = self.dataByFieldName(row, fieldName)
121
+ return false unless data
122
+ data = HRecord.new(data) if data.class != HRecord
123
+ filter = HRecord.new(filter) if filter.class != HRecord
124
+ return false if data != filter
125
+ end
126
+ return true
127
+
128
+ end
129
+
130
+ def each()
131
+ for i in 0...self.rowCount() do
132
+ row = self.row(i)
133
+ yield(row, i) if @allRows or self.match(i)
134
+ end
135
+ end
136
+
137
+ def rowWithFieldName(row)
138
+ result = {}
139
+ self[row].each do |fieldName, fieldValue|
140
+ field = @fields[fieldName]
141
+ result[fieldName] = fieldValue if field.visible or @allCols
142
+ end
143
+ return result
144
+ end
145
+
146
+ def eachWithFieldName()
147
+ for i in 0...self.rowCount() do
148
+ row = self.rowWithFieldName(i)
149
+ yield(row, i) if @allRows or self.match(i)
150
+ end
151
+ end
152
+
153
+
154
+ def sumByFieldName(fieldName)
155
+
156
+ total = 0
157
+ for i in 0...self.rowCount() do
158
+ total += (self.dataByFieldName(i, fieldName)).to_f
159
+ end
160
+ return total
161
+
162
+ end
163
+
164
+ def valueByType(fieldName, fieldValue)
165
+
166
+ return nil unless fieldValue
167
+ type = @fields[fieldName].value(:type) if @fields[fieldName]
168
+ value = fieldValue.value
169
+ return value unless type
170
+ return value.to_s if type == "text"
171
+ return value.to_i if type == "integer"
172
+ return value.to_f if type == "float"
173
+ return value.to_date() if type == "date"
174
+ return value.to_datetime() if type == "datetime"
175
+ return value.to_s
176
+
177
+ end
178
+
179
+ # fieldTable.sortBy("price")
180
+ # fieldTable.sortBy("price", "amount")
181
+ # fieldTable.sortBy("price", "amount", asc: false)
182
+ def sortBy(*fieldNames, asc: true)
183
+ #self.herbertsort!(asc) { |row| fieldNames.map {|fieldName| row[fieldName]} }
184
+ self.herbertsort!(asc) { |row| fieldNames.map {|fieldName| self.valueByType(fieldName, row[fieldName])} }
185
+ end
186
+
187
+ def showHeader(key = :key)
188
+ self.fields.each do |fieldName, fieldValue|
189
+ print $hpformat % fieldValue.value(key)
190
+ end
191
+ puts
192
+ end
193
+
194
+ def showData(data, key = :key)
195
+
196
+ if !data
197
+ print $hpformat % "." unless data
198
+ elsif data.class == Fixnum or data.class == String
199
+ print $hpformat % data
200
+ else
201
+ data.show(key)
202
+ end
203
+
204
+ end
205
+
206
+ def showTotalizers()
207
+
208
+ @fields.each do |fieldName, fieldValue|
209
+ totalizerName = fieldValue.totalizer
210
+ if totalizerName
211
+ print $hpformat % totalizerName
212
+ print $hpformat % self.sumByFieldName(fieldName)
213
+ puts
214
+ end
215
+ end
216
+ puts
217
+
218
+ end
219
+
220
+
221
+ def show(key = :key)
222
+ print "=============> HFieldTable <==============\n"
223
+ self.showHeader(:caption)
224
+ self.each do |row, i|
225
+ row.each do |fieldName, fieldValue|
226
+ self.showData(fieldValue)
227
+ end
228
+ puts
229
+ end
230
+ puts
231
+ end
232
+
233
+
234
+ def self.test()
235
+
236
+ table = HFieldTable.new()
237
+ table.setData(0, 0, HRecord.new("0x0"))
238
+ table.setData(10, 1, HRecord.new("10x1"))
239
+ table.setData(9, 9, HRecord.new("9x9"))
240
+ table.show()
241
+ end
242
+
243
+ def self.test2()
244
+
245
+ fieldTable = HFieldTable.new()
246
+ fieldTable.addFieldName("quantity")
247
+ fieldTable.addFieldName("description")
248
+ fieldTable.addFieldName("price", false)
249
+ fieldTable.addFieldName("amount")
250
+
251
+ fieldTable.setFieldCaption("quantity", "Quantity")
252
+ fieldTable.setFieldCaption("description", "Description")
253
+ fieldTable.setFieldCaption("price", "Price")
254
+ fieldTable.setFieldCaption("amount", "Amount")
255
+
256
+ fieldTable.setFieldFilter("price", HRecord.new(10))
257
+ fieldTable.setFieldFilter("amount", HRecord.new(10))
258
+
259
+ for i in 0..30
260
+ fieldTable.setDataByFieldName(i, "quantity", HRecord.new(i))
261
+ fieldTable.setDataByFieldName(i, "description", HRecord.new(i))
262
+ fieldTable.setDataByFieldName(i, "price", HRecord.new(rand(10)))
263
+ fieldTable.setDataByFieldName(i, "amount", HRecord.new(i))
264
+ end
265
+
266
+ #fieldTable.insertRow(1, HRecord.new("ciao"))
267
+ #fieldTable.deleteRow(1)
268
+
269
+ fieldTable.show()
270
+ fieldTable.allRows,fieldTable.allCols = true, true
271
+ fieldTable.show()
272
+
273
+ fieldTable.sortBy("price", "amount", asc: false)
274
+ fieldTable.show()
275
+
276
+ return fieldTable
277
+
278
+ end
279
+
280
+
281
+ end
282
+
283
+ t1 = Time.now
284
+ HFieldTable.test2()
285
+ p "... msecs. #{((Time.now - t1) * 1000).round(2)}"
@@ -0,0 +1,9 @@
1
+ class Hash
2
+
3
+ def symbolize_keys
4
+ self.keys.each do |key|
5
+ self[(key.to_sym rescue key) || key] = self.delete(key)
6
+ end
7
+ end
8
+
9
+ end
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env ruby
2
+ require "hdatastructures/hrecord"
3
+
4
+ class Array
5
+
6
+ alias_method :insertFirst, :unshift
7
+ alias_method :insertLast, :<<
8
+ alias_method :deleteFirst, :shift
9
+ alias_method :deleteLast, :pop
10
+ alias_method :deleteAt, :delete_at
11
+ alias_method :indexOf, :index
12
+
13
+ def addIfNotPresent(value)
14
+
15
+ self << value unless self.include?(value)
16
+ return value
17
+
18
+ end
19
+
20
+ def deleteAt(index)
21
+ self.delete_at(index) if index
22
+ end
23
+
24
+ def swap(index1, index2)
25
+ # Parallel Assignment: eg a,b = 1,2
26
+ self[index1], self[index2] = self[index2], self[index1]
27
+ end
28
+
29
+ def < (array)
30
+ for i in 0...self.count
31
+ return true unless self[i]
32
+ return false unless array[i]
33
+ return true if self[i] < array[i]
34
+ return false if self[i] > array[i]
35
+ end
36
+ return false
37
+ end
38
+
39
+ def hpartition
40
+ return self.select { |value| value if yield(value) }, self.select { |value| value unless yield(value) }
41
+ end
42
+
43
+ def herbertsort(asc = true, &block)
44
+
45
+ #block = lambda { |data| data } unless block
46
+ block = Proc.new { |data| data } unless block
47
+
48
+ return [] if empty?
49
+ pivot = delete_at(rand(size))
50
+ left, right = hpartition { |value| block.call(value) < block.call(pivot) } if asc
51
+ left, right = hpartition { |value| !(block.call(value) < block.call(pivot)) } unless asc
52
+ return *left.herbertsort(asc, &block), pivot, *right.herbertsort(asc, &block)
53
+
54
+ end
55
+
56
+ # [4,2,1,5,3].herbertsort => [1, 2, 3, 4, 5]
57
+ # [[4,0],[2,0],[1,0],[5,0],[3,0]].herbertsort => [[1, 0], [2, 0], [3, 0], [4, 0], [5, 0]]
58
+ # [[4,1],[2,0],[1,0],[4,0],[3,0]].herbertsort => [[1, 0], [2, 0], [3, 0], [4, 0], [4, 1]]
59
+ # Sorting by qty
60
+ # [{qty:1, price:3}, {qty:2, price:2}, {qty:3, price:1}].herbertsort { |data| data[:qty] } =>
61
+ # [{:qty=>1, :price=>3}, {:qty=>2, :price=>2}, {:qty=>3, :price=>1}]
62
+ # Sorting by qty and by price
63
+ # [{qty:1, price:3}, {qty:1, price:2}, {qty:1, price:1}].herbertsort { |data| [data[:qty], data[:price]] }
64
+ def herbertsort!(asc = true, &block)
65
+ self.herbertsort(asc, &block).each_with_index { |data, i| self[i] = data }
66
+ end
67
+
68
+ def show(key = :key)
69
+ self.each do |data|
70
+ if data.class == HRecord
71
+ data.show(key)
72
+ else
73
+ puts data.to_s
74
+ end
75
+ end
76
+ end
77
+
78
+ def self.test()
79
+ list = []
80
+ #(20).downto(1) { |i|
81
+ for i in 0..9
82
+ list.insertLast(HRecord.new(i))
83
+ end
84
+ list.deleteFirst()
85
+ list.deleteLast()
86
+ list.deleteAt(2)
87
+ list.insert(0, HRecord.new(0))
88
+ list.insert(3, "ciao")
89
+ list.insertLast(HRecord.new(9))
90
+ list[15] = 20
91
+ list[16] = :end
92
+ list.swap(15, 16)
93
+ list.show()
94
+ p list.indexOf(HRecord.new(9))
95
+ p [1,6,5,4,3,23,2].herbertsort
96
+ end
97
+
98
+ end
99
+
100
+ #Array.test()
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $hpformat = '%-11.10s'
4
+
5
+ class HRecord < Hash
6
+ include Comparable
7
+
8
+ def method_missing(var, *args)
9
+ if var =~ /^(\w+)=$/
10
+ if self.include?($1.to_s)
11
+ self.set($1.to_s, args[0])
12
+ else
13
+ self.set($1.to_sym, args[0])
14
+ end
15
+ return self
16
+ else
17
+ return self.value(var.to_sym) || self.value(var.to_s)
18
+ end
19
+ end
20
+
21
+ def initialize(fieldValue, fieldName = :key)
22
+ self.setValue(fieldValue, fieldName)
23
+ end
24
+
25
+ def setValue(fieldValue, fieldName = :key)
26
+ self[fieldName] = fieldValue
27
+ return self
28
+ end
29
+
30
+ def set(fieldName, fieldValue)
31
+ self.setValue(fieldValue, fieldName)
32
+ return self
33
+ end
34
+
35
+ def value(fieldName = :key)
36
+ puts "hrecord::value: it's exist #{fieldName} symbol and string - #{self}".red if self[fieldName.to_sym] and self[fieldName.to_s]
37
+ return self[fieldName.to_sym] || self[fieldName.to_s]
38
+ end
39
+
40
+ def <=>(record)
41
+ self[:key] <=> record[:key]
42
+ end
43
+
44
+ def to_f(fieldName = :key)
45
+ return self[fieldName].to_f()
46
+ end
47
+
48
+ def show(key = :key)
49
+
50
+ color = self.include?(:color) ? self[:color] : "white"
51
+ value = $hpformat % self.value().to_s()
52
+ eval("print value.#{color}")
53
+
54
+ end
55
+
56
+ def showAll(key = :key)
57
+
58
+ self.each do |key, value|
59
+ puts "#{key}: #{value}"
60
+ end
61
+ puts "=" * 20
62
+
63
+ end
64
+
65
+ def self.test()
66
+ rec = HRecord.new("a")
67
+ rec.setValue("0", "index-0")
68
+ rec.set("index-1", "1")
69
+ rec.show()
70
+ puts rec == rec
71
+ end
72
+
73
+ end
74
+
75
+ #HRecord.test