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,129 @@
1
+ #!/usr/bin/env ruby
2
+ require "hdatastructures/hfieldtable"
3
+
4
+ class HSpreadFieldTable < HFieldTable
5
+
6
+ attr_accessor :decorator
7
+ attr_reader :summaryList
8
+
9
+ def initialize
10
+ super
11
+ @decorator = false
12
+ @summaryList = []
13
+ end
14
+
15
+ def addSummary(summaryName, summaryValue)
16
+
17
+ record = HRecord.new(summaryName)
18
+ record.setValue(summaryName)
19
+ record.set(:value, summaryValue)
20
+ @summaryList << record
21
+
22
+ end
23
+
24
+ def noname(data, value)
25
+ return data.class == HRecord ? data.dup.setValue(value) : value
26
+ end
27
+
28
+ def decorate(data, value, fieldName)
29
+ decorator = @fields[fieldName].decorator
30
+ value = decorator.gsub("§arg§", value) if (@decorator and decorator)
31
+ return self.noname(data, value)
32
+ end
33
+
34
+ def evalDataByFieldName(row, fieldName)
35
+
36
+ value = self.valueByFieldName(row, fieldName)
37
+ return value if value.class == Fixnum
38
+ value = value.gsub(/`([a-zA-Z_]+[a-zA-Z_0-9]*)/) { |var| self.evalDataByFieldName(row, $1) }
39
+ return eval(value)
40
+
41
+ end
42
+
43
+ def dataByFieldName(row, fieldName)
44
+
45
+ value = data = super(row, fieldName)
46
+ value = data.value() if (data.class == HRecord)
47
+ return self.noname(data, self.evalDataByFieldName(row, fieldName)) if value.class == String and value.index('`')
48
+ return self.decorate(data, value, fieldName)
49
+
50
+ end
51
+
52
+ def showSummary()
53
+
54
+ @summaryList.each do |data|
55
+ if data
56
+ print $hpformat % data.value()
57
+ print $hpformat % data.value(:value)
58
+ end
59
+ puts
60
+ end
61
+ end
62
+
63
+
64
+ def self.test()
65
+
66
+ fieldTable = HSpreadFieldTable.new()
67
+ fieldTable.addFieldName("quantity")
68
+ fieldTable.addFieldName("description")
69
+ fieldTable.addFieldName("price")
70
+ fieldTable.addFieldName("amount", false)
71
+ fieldTable.addFieldName("score")
72
+ fieldTable.addFieldName("other")
73
+
74
+ fieldTable.setFieldCaption("quantity", "Quantity")
75
+ fieldTable.setFieldCaption("description", "Description")
76
+ fieldTable.setFieldCaption("price", "Price")
77
+ fieldTable.setFieldCaption("amount", "Amount")
78
+ fieldTable.setFieldCaption("score", "Score")
79
+ fieldTable.setFieldCaption("other", "Other")
80
+
81
+ fieldTable.setFieldFilter("price", 3)
82
+ fieldTable.setFieldFilter("score", HRecord.new(18))
83
+
84
+ fieldTable.setFieldDecorator("description", "Item: §arg§")
85
+
86
+ fieldTable.setFieldTotalizer("price", "P R I C E")
87
+ fieldTable.setFieldTotalizer("amount", "T O T A L")
88
+ fieldTable.setFieldTotalizer("score", "S C O R E")
89
+ fieldTable.addSummary("SUMMARY", "2.000 Euro")
90
+
91
+ for i in 0..5
92
+ (other = HRecord.new(i)).color = "green"
93
+ (amount = HRecord.new("`quantity * `price")).color = "yellow"
94
+ fieldTable.setIntoRecordByFieldName(i, "quantity", i)
95
+ fieldTable.setIntoRecordByFieldName(i, "description", "Product #{i}")
96
+ fieldTable.setIntoRecordByFieldName(i, "price", i)
97
+ fieldTable.setDataByFieldName(i, "amount", amount)
98
+ fieldTable.setIntoRecordByFieldName(i, "score", "`amount * 2")
99
+ fieldTable.setDataByFieldName(i, "other", other)
100
+ end
101
+
102
+ fieldTable.show()
103
+ fieldTable.allRows,fieldTable.allCols = true, true
104
+ fieldTable.decorator = true
105
+ fieldTable.show()
106
+ fieldTable.showTotalizers()
107
+ fieldTable.showSummary()
108
+
109
+ return fieldTable
110
+
111
+ end
112
+
113
+ def self.test2
114
+ fieldTable = HSpreadFieldTable.test()
115
+ fieldTable.eachWithFieldName do |row|
116
+ row.each do |key, data|
117
+ p key, data
118
+ end
119
+ puts
120
+ end
121
+ return fieldTable
122
+ end
123
+
124
+ end
125
+
126
+ t1 = Time.now
127
+ HSpreadFieldTable.test()
128
+ #HSpreadFieldTable.test2()
129
+ p "... msecs. #{((Time.now - t1) * 1000).round(2)}"
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env ruby
2
+ require 'hdb/hdb'
3
+ require "yaml"
4
+
5
+ class HDataLoader
6
+
7
+ def initialize(filename, connectionName = "default")
8
+ @filename = filename
9
+ @connectionName = connectionName
10
+ end
11
+
12
+
13
+ def load
14
+
15
+ return unless File.file?(@filename)
16
+ @data = YAML.load_file(@filename)
17
+ oodb = HODB.new(connectionName: @connectionName)
18
+ @data.each do |modelName, record|
19
+ model = oodb.newHODB(modelName)
20
+ record.each do |recordName, recordValue|
21
+ model.create(recordValue)
22
+ end
23
+ model.writeAll
24
+ end
25
+ end
26
+
27
+
28
+ def recordGenerator(tableName, record, min, max, overwrite = false)
29
+
30
+ @file = overwrite ? File.new(@filename, "w+") : File.new(@filename, "a+")
31
+
32
+ @file << "#{tableName}:\n"
33
+ for i in min...max
34
+ @file << " record_#{i}:\n"
35
+ record.each do |fieldName, fieldValue|
36
+ fieldValue = fieldValue.gsub('$', i.to_s)
37
+ @file << " #{fieldName}: '#{fieldValue}'\n"
38
+ end
39
+ end
40
+
41
+ @file.close if(@file)
42
+
43
+ end
44
+
45
+ def addRecord(record, i)
46
+ @file = File.new(@filename, "a+")
47
+ @file << " record_#{i}:\n"
48
+ record.each do |fieldName, fieldValue|
49
+ fieldValue = fieldValue.gsub('$', i.to_s)
50
+ @file << " #{fieldName}: '#{fieldValue}'\n"
51
+ end
52
+ @file.close if(@file)
53
+ end
54
+
55
+
56
+ def example(count = 10)
57
+
58
+ record = {id: '#default', name: 'name-$', name_d: 'name_d_$', d: 'd_$'}
59
+ self.recordGenerator("d_tables", record, 1, count, true)
60
+ record = {id: '#default', name: 'name-$', name_a: 'name_a_$', a: 'a_$'}
61
+ self.recordGenerator("a_tables", record, 1, count)
62
+ record = {id: '#default', name: 'name-$', name_b: 'name_b-$', b: 'b-$', d_tables_id: '#$ % 5 + 1', a_tables_id: '$'}
63
+ self.recordGenerator("b_tables", record, 1, count)
64
+ record = {id: '#default', name: 'name-$', name_c: 'name_c-$', c: 'c-$', b_tables_id: '$'}
65
+ self.recordGenerator("c_tables", record, 1, count)
66
+ self.recordGenerator("name_table", {name: 'name-$'}, 1, count)
67
+ self.recordGenerator("surname_table", {surname: 'surname-$'}, 1, count)
68
+ self.recordGenerator("name_table_surname_table_join", {name_table_id: '#$', surname_table_id: '#$'}, 1, count)
69
+ self.addRecord({name_table_id: '#1', surname_table_id: '#2'}, 10)
70
+ self.addRecord({name_table_id: '#1', surname_table_id: '#3'}, 11)
71
+ self.load
72
+ end
73
+
74
+ end
75
+
@@ -0,0 +1,357 @@
1
+ class Hash
2
+
3
+ def join(separator)
4
+
5
+ arr = []
6
+ self.each do |key, value|
7
+ arr << "\"#{key}\" = #{value}"
8
+ end
9
+ return arr.join(separator)
10
+
11
+ end
12
+
13
+ def intersect(hash)
14
+
15
+ self.select {|k,v| hash.include?(k)}
16
+
17
+ end
18
+
19
+ def hprint
20
+
21
+ hashView = self.dup
22
+ #'*ptr'
23
+ hashView.each { |k, v| hashView[k] = v.object_id if v.class != String and v.class != Fixnum and v.class != NilClass and v.class != Float }
24
+ puts hashView
25
+
26
+ end
27
+
28
+ def to_js_format
29
+ result = []
30
+ self.each do |k, v|
31
+ tmp = (v.class <= String) ? "#{k}:#{v.to_js_format}" : "#{k}:#{v}"
32
+ result << tmp
33
+ end
34
+ return "{#{result.join(", ")}}"
35
+ end
36
+
37
+
38
+ end
39
+
40
+ class Array
41
+
42
+ def hjoin(separator, quoteChar = '"')
43
+
44
+ arr = []
45
+ self.each { |value| arr << "#{quoteChar}#{value}#{quoteChar}" }
46
+ return arr.join(separator)
47
+ end
48
+
49
+ def to_js_format # used in HWidget::buildSignature
50
+ result = []
51
+ self.each do |value|
52
+ tmp = (value.class <= String) ? "#{value.to_js_format}" : value
53
+ result << tmp
54
+ end
55
+ return "[#{result.join(", ")}]"
56
+ end
57
+
58
+ end
59
+
60
+ class String
61
+
62
+ def hcapitalize
63
+
64
+ self.split('_').map(&:capitalize) * ''
65
+
66
+ end
67
+
68
+ def to_js_format
69
+ return "'#{self.gsub("'", "\\\\'")}'"
70
+ end
71
+
72
+ def to_b
73
+ return self == "true"
74
+ end
75
+
76
+ end
77
+
78
+ class HDB
79
+
80
+ attr_reader :resultTable, :connection, :sth, :table
81
+
82
+ def initialize(host, port, dbname, user, password, timezone, connectionName = "default", connector = "Pg")
83
+
84
+ @host = host
85
+ @port = port
86
+ @dbname = dbname
87
+ @user = user
88
+ @password = password
89
+ @timezone = timezone
90
+ @connectionName = connectionName
91
+
92
+ @connection = nil
93
+
94
+ @select = nil
95
+ @from = nil
96
+ @where = nil
97
+ @orderBy = nil
98
+ @direction = nil
99
+ @limit = nil
100
+ @offset = nil
101
+
102
+ @resultTable = nil
103
+ @table = nil
104
+
105
+ end
106
+
107
+ def method_missing(methodeName, *args)
108
+ return eval("HODB.new($1, @connectionName).find_by_#{$2}(*args)") if methodeName.to_s =~ /^find_on_(.+)_by_(.+)$/
109
+ end
110
+
111
+ # posso passare anche un array di campi
112
+ def select(select)
113
+ select = select.hjoin(', ') if(select.class == Array)
114
+ @select = select
115
+ return self
116
+ end
117
+ def from(from)
118
+ from = from.hjoin(', ') if(from.class == Array)
119
+ @from = from
120
+ return self
121
+ end
122
+ def normalizeWhereFormat(where, operator = 'AND')
123
+ where = self.quote(where) if where.class == Hash
124
+ where = where.join(" #{operator} ") if(where.class == Array || where.class == Hash)
125
+ return where
126
+ end
127
+ def where(where, operator = 'AND')
128
+ @where = self.normalizeWhereFormat(where, operator)
129
+ return self
130
+ end
131
+ def orderBy(orderBy)
132
+ orderBy = orderBy.hjoin(', ') if(orderBy.class == Array)
133
+ @orderBy = orderBy
134
+ return self
135
+ end
136
+ def direction(direction)
137
+ @direction = direction
138
+ return self
139
+ end
140
+ def limit(limit)
141
+ @limit = limit
142
+ return self
143
+ end
144
+ def offset(offset)
145
+ @offset = offset
146
+ return self
147
+ end
148
+
149
+ def queryStr()
150
+
151
+ where = "WHERE #{@where}" if(@where)
152
+ orderBy = "ORDER BY #{@orderBy}" if(@orderBy)
153
+ limit = "LIMIT #{@limit}" if(@limit)
154
+ offset = "OFFSET #{@offset}" if(@offset)
155
+ return "SELECT #{@select} FROM #{@from} #{where} #{orderBy} #{@direction} #{limit} #{offset}"
156
+
157
+ end
158
+
159
+
160
+ def openConnection()
161
+
162
+ hl << "connectionName: #{@connectionName}".red
163
+ hl << "host: #{@host}".red
164
+ hl << "port: #{@port}".red
165
+ hl << "db: #{@dbname}".red
166
+ hl << "user: #{@user}".red
167
+ hl << "password: #{@password}".red
168
+ hl << "timezone: #{@timezone}".red
169
+ @connection = self.connect() unless @connection
170
+
171
+ end
172
+
173
+
174
+ def closeConnection()
175
+
176
+ self.disconnect() if @connection
177
+ @connection = nil
178
+
179
+ end
180
+
181
+
182
+ def execute(queryStr = self.queryStr, pageSize: "all", page: 0)
183
+
184
+ limit = "LIMIT #{pageSize}"
185
+ offset = "OFFSET #{page} * #{pageSize}"
186
+ if(pageSize == "all")
187
+ limit = offset = ""
188
+ end
189
+
190
+ queryStr += " #{limit} #{offset}"
191
+
192
+ t1 = Time.now
193
+ hl << queryStr.hight_yellow
194
+ result = self._execute(queryStr)
195
+ hl << "... msecs. #{((Time.now - t1) * 1000).round(2)}".hight_cyan
196
+ return result
197
+
198
+ end
199
+
200
+ def quoteValue(value)
201
+
202
+ return 'NULL' if value == nil
203
+ value = value.to_s.gsub("'", "''")
204
+ return (value[0] != '#') ? "'#{value}'" : value[1, value.size - 1]
205
+
206
+ end
207
+
208
+ def primitiveType?(value)
209
+
210
+ return (value.class == String or
211
+ value.class == Fixnum or
212
+ value.class == TrueClass or
213
+ value.class == FalseClass)
214
+
215
+ end
216
+
217
+ # quota tutti i valori tranne quelli che iniziano con #
218
+ # quindi se nella mia query devo richiamare una funzione basta farla precedere dal cancelletto
219
+ def quote(args)
220
+
221
+ return 'NULL' if args == nil
222
+ return self.quoteValue(args) if self.primitiveType?(args)
223
+
224
+ result = Hash.new()
225
+
226
+ args.each do |key, value|
227
+ result[key] = self.quoteValue(args[key])
228
+ end
229
+ return result
230
+
231
+ end
232
+
233
+ alias_method :q, :quote
234
+
235
+ def toClassName(tableName)
236
+ return tableName.hcapitalize()
237
+ end
238
+
239
+ def insertValues(args)
240
+
241
+ return "(id) values(default)" unless(args)
242
+ args = self.quote(args)
243
+ return "(#{args.keys.hjoin(', ')}) values(#{args.values.join(', ')})"
244
+
245
+ end
246
+
247
+ def insert(tableName, values)
248
+
249
+ return self.execute("INSERT INTO \"#{tableName}\" #{self.insertValues(values)} RETURNING id").data(0,"id")
250
+
251
+ end
252
+
253
+ def updateValues(args)
254
+
255
+ return "" unless(args)
256
+ args = self.quote(args)
257
+ result = []
258
+ args.each { |key, value| result << "\"#{key}\" = #{value}" }
259
+ return result.join(', ')
260
+
261
+ end
262
+
263
+ def update(tableName, values, where = "TRUE", operator = "AND")
264
+
265
+ where = where.join(" #{operator} ") if(where.class == Array || where.class == Hash)
266
+ self.execute("UPDATE \"#{tableName}\" SET #{self.updateValues(values)} WHERE #{where}")
267
+ return self.rowsAffected()
268
+
269
+ end
270
+
271
+ def delete(tableName, where = "TRUE", operator = "AND")
272
+
273
+ where = self.quote(where) if where.class == Hash
274
+ where = where.join(" #{operator} ") if(where.class == Array || where.class == Hash)
275
+ self.execute("DELETE FROM \"#{tableName}\" WHERE #{where}")
276
+ return self.rowsAffected() # rows affected
277
+
278
+ end
279
+
280
+ def rowCount()
281
+
282
+ return self.rowsAffected()
283
+
284
+ end
285
+
286
+ def columnCount()
287
+
288
+ return self.fieldNameList.length
289
+
290
+ end
291
+
292
+ def data(row, idOrFieldName)
293
+
294
+ return (idOrFieldName.class == Fixnum) ? @table[row][@table[row].keys[idOrFieldName]] : @table[row][idOrFieldName.to_s]
295
+
296
+ end
297
+
298
+ def show()
299
+
300
+ @table.each do |row|
301
+ p row
302
+ end
303
+
304
+ end
305
+
306
+ def self.newHDB(connectionName = "default")
307
+
308
+ params = hc.value(connectionName)
309
+
310
+ host = params["host"]
311
+ port = params["port"]
312
+ dbname = params["dbname"]
313
+ user = params["user"]
314
+ password = params["password"]
315
+ timezone = params["timezone"]
316
+ connector = params["connector"]
317
+
318
+ connector = connector.split('-')
319
+
320
+ if (connector[0] == "hdbi")
321
+ hdb = HDBI.new(host, port, dbname, user, password, timezone, connectionName, connector[1])
322
+ elsif (connector[0] == "hpgsql")
323
+ hdb = HPgSql.new(host, port, dbname, user, password, timezone, connectionName)
324
+ elsif (connector[0] == "hmysql")
325
+ hdb = HMySql.new(host, port, dbname, user, password, timezone, connectionName)
326
+ elsif (connector[0] == "hmysql2")
327
+ hdb = HMySql2.new(host, port, dbname, user, password, timezone, connectionName)
328
+ end
329
+
330
+ hdb.openConnection()
331
+ HSharedData.instance().setValue(hdb, "hdb-#{connectionName}")
332
+ return hdb
333
+
334
+ end
335
+
336
+ def self.HDB(connectionName = "default")
337
+
338
+ hdb = HSharedData.instance().value("hdb-#{connectionName}")
339
+ return (hdb) ? hdb : self.newHDB(connectionName)
340
+
341
+ end
342
+
343
+ def self.destroy(connectionName = "default")
344
+
345
+ self.HDB(connectionName).closeConnection()
346
+ HSharedData.instance().setValue(nil, "hdb-#{connectionName}")
347
+
348
+ end
349
+
350
+ end
351
+
352
+ def hdb(connectionName = "default")
353
+
354
+ return HDB.HDB(connectionName)
355
+
356
+ end
357
+