hypersonicplus 0.0.0

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.
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: d02a76ade2c3fd0823135b4ed32a95a7fa45ccc3
4
+ data.tar.gz: dce1adec8a541f3bd0ac06f925089e43c0ff52e3
5
+ SHA512:
6
+ metadata.gz: da75264685bd8a5cf1ae42c5616abe0d94c84358ccbcc866b1bab7db1e7024abf94484ed0262878e1eddf1b6f275691466441cfd10902ea7b0edce6ea658f105
7
+ data.tar.gz: a336abcd206d1490f615293e5269bbd2e1a72197d85e5564394f6d3134fe662547ca48239662e3f1fc0b359251e22afeba0e2166928e106e7a6125256aeb6eda
@@ -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