widget_list 1.2.0 → 1.2.1

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 (33) hide show
  1. data/README.md +26 -2
  2. data/app/views/widget_list/_condition_fields.html.erb +0 -0
  3. data/app/views/widget_list/_ransack_fields.html.erb +0 -0
  4. data/app/views/widget_list/_ransack_widget_list_advanced_search.html.erb +0 -0
  5. data/app/views/widget_list/administration/_field_row.html.erb +11 -0
  6. data/app/views/widget_list/administration/_output.html.erb +856 -0
  7. data/app/views/widget_list/administration/_output_save.html.erb +2 -0
  8. data/app/views/widget_list/list_partials/_col.html.erb +0 -0
  9. data/app/views/widget_list/list_partials/_list_description.html.erb +0 -0
  10. data/app/views/widget_list/list_partials/_no_sort_column.html.erb +0 -0
  11. data/app/views/widget_list/list_partials/_pagination_jump_active.html.erb +0 -0
  12. data/app/views/widget_list/list_partials/_pagination_jump_unactive.html.erb +0 -0
  13. data/app/views/widget_list/list_partials/_pagination_next_active.html.erb +0 -0
  14. data/app/views/widget_list/list_partials/_pagination_next_disabled.html.erb +0 -0
  15. data/app/views/widget_list/list_partials/_pagination_previous_active.html.erb +0 -0
  16. data/app/views/widget_list/list_partials/_pagination_previous_disabled.html.erb +0 -0
  17. data/app/views/widget_list/list_partials/_pagination_wrapper.html.erb +0 -0
  18. data/app/views/widget_list/list_partials/_row.html.erb +0 -0
  19. data/app/views/widget_list/list_partials/_sequence.html.erb +0 -0
  20. data/app/views/widget_list/list_partials/_sort_column.html.erb +0 -0
  21. data/lib/extensions/action_controller_base.rb +33 -33
  22. data/lib/widget_list.rb +3664 -2783
  23. data/lib/widget_list/engine.rb +8 -8
  24. data/lib/widget_list/hash.rb +113 -113
  25. data/lib/widget_list/md5.rb +18 -18
  26. data/lib/widget_list/railtie.rb +42 -42
  27. data/lib/widget_list/sequel.rb +218 -218
  28. data/lib/widget_list/string.rb +41 -41
  29. data/lib/widget_list/tpl.rb +185 -185
  30. data/lib/widget_list/utils.rb +92 -92
  31. data/lib/widget_list/version.rb +3 -3
  32. data/lib/widget_list/widgets.rb +756 -756
  33. metadata +5 -2
@@ -1,8 +1,8 @@
1
- module WidgetList
2
- class Engine < Rails::Engine
3
- # auto wire
4
- initializer 'widget_list.load_static_assets' do |app|
5
- app.middleware.use ::ActionDispatch::Static, "#{root}/vendor"
6
- end
7
- end
8
- end
1
+ module WidgetList
2
+ class Engine < Rails::Engine
3
+ # auto wire
4
+ initializer 'widget_list.load_static_assets' do |app|
5
+ app.middleware.use ::ActionDispatch::Static, "#{root}/vendor"
6
+ end
7
+ end
8
+ end
@@ -1,114 +1,114 @@
1
- class Hash
2
-
3
- def to_params
4
- params = ''
5
- stack = []
6
-
7
- each do |k, v|
8
- if v.is_a?(Hash)
9
- stack << [k,v]
10
- elsif v.is_a?(Array)
11
- stack << [k,Hash.from_array(v)]
12
- else
13
- params << "#{k}=#{v}&"
14
- end
15
- end
16
-
17
- stack.each do |parent, hash|
18
- hash.each do |k, v|
19
- if v.is_a?(Hash)
20
- stack << ["#{parent}[#{k}]", v]
21
- else
22
- params << "#{parent}[#{k}]=#{v}&"
23
- end
24
- end
25
- end
26
-
27
- params.chop!
28
- params
29
- end
30
-
31
- def self.from_array(array = [])
32
- h = Hash.new
33
- array.size.times do |t|
34
- h[t] = array[t]
35
- end
36
- h
37
- end
38
-
39
- # Merges self with another hash, recursively.
40
- #
41
- # This code was lovingly stolen from some random gem:
42
- # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
43
- #
44
- # Thanks to whoever made it.
45
-
46
- def deep_merge(hash)
47
- target = dup
48
-
49
- hash.keys.each do |key|
50
- if hash[key].is_a? Hash and self[key].is_a? Hash
51
- target[key] = target[key].deep_merge(hash[key])
52
- next
53
- end
54
-
55
- target[key] = hash[key]
56
- end
57
-
58
- target
59
- end
60
-
61
-
62
- # From: http://www.gemtacular.com/gemdocs/cerberus-0.2.2/doc/classes/Hash.html
63
- # File lib/cerberus/utils.rb, line 42
64
-
65
- def deep_merge!(second)
66
- second.each_pair do |k,v|
67
- if self[k].is_a?(Hash) and second[k].is_a?(Hash)
68
- self[k].deep_merge!(second[k])
69
- else
70
- self[k] = second[k]
71
- end
72
- end
73
- end
74
-
75
-
76
- #-----------------
77
-
78
- # cf. http://subtech.g.hatena.ne.jp/cho45/20061122
79
- def deep_merge2(other)
80
- deep_proc = Proc.new { |k, s, o|
81
- if s.kind_of?(Hash) && o.kind_of?(Hash)
82
- next s.merge(o, &deep_proc)
83
- end
84
- next o
85
- }
86
- merge(other, &deep_proc)
87
- end
88
-
89
-
90
- def deep_merge3(second)
91
-
92
- # From: http://www.ruby-forum.com/topic/142809
93
- # Author: Stefan Rusterholz
94
-
95
- merger = proc { |key,v1,v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
96
- self.merge(second, &merger)
97
-
98
- end
99
-
100
-
101
- def keep_merge(hash)
102
- target = dup
103
- hash.keys.each do |key|
104
- if hash[key].is_a? Hash and self[key].is_a? Hash
105
- target[key] = target[key].keep_merge(hash[key])
106
- next
107
- end
108
- #target[key] = hash[key]
109
- target.update(hash) { |key, *values| values.flatten.uniq }
110
- end
111
- target
112
- end
113
-
1
+ class Hash
2
+
3
+ def to_params
4
+ params = ''
5
+ stack = []
6
+
7
+ each do |k, v|
8
+ if v.is_a?(Hash)
9
+ stack << [k,v]
10
+ elsif v.is_a?(Array)
11
+ stack << [k,Hash.from_array(v)]
12
+ else
13
+ params << "#{k}=#{v}&"
14
+ end
15
+ end
16
+
17
+ stack.each do |parent, hash|
18
+ hash.each do |k, v|
19
+ if v.is_a?(Hash)
20
+ stack << ["#{parent}[#{k}]", v]
21
+ else
22
+ params << "#{parent}[#{k}]=#{v}&"
23
+ end
24
+ end
25
+ end
26
+
27
+ params.chop!
28
+ params
29
+ end
30
+
31
+ def self.from_array(array = [])
32
+ h = Hash.new
33
+ array.size.times do |t|
34
+ h[t] = array[t]
35
+ end
36
+ h
37
+ end
38
+
39
+ # Merges self with another hash, recursively.
40
+ #
41
+ # This code was lovingly stolen from some random gem:
42
+ # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
43
+ #
44
+ # Thanks to whoever made it.
45
+
46
+ def deep_merge(hash)
47
+ target = dup
48
+
49
+ hash.keys.each do |key|
50
+ if hash[key].is_a? Hash and self[key].is_a? Hash
51
+ target[key] = target[key].deep_merge(hash[key])
52
+ next
53
+ end
54
+
55
+ target[key] = hash[key]
56
+ end
57
+
58
+ target
59
+ end
60
+
61
+
62
+ # From: http://www.gemtacular.com/gemdocs/cerberus-0.2.2/doc/classes/Hash.html
63
+ # File lib/cerberus/utils.rb, line 42
64
+
65
+ def deep_merge!(second)
66
+ second.each_pair do |k,v|
67
+ if self[k].is_a?(Hash) and second[k].is_a?(Hash)
68
+ self[k].deep_merge!(second[k])
69
+ else
70
+ self[k] = second[k]
71
+ end
72
+ end
73
+ end
74
+
75
+
76
+ #-----------------
77
+
78
+ # cf. http://subtech.g.hatena.ne.jp/cho45/20061122
79
+ def deep_merge2(other)
80
+ deep_proc = Proc.new { |k, s, o|
81
+ if s.kind_of?(Hash) && o.kind_of?(Hash)
82
+ next s.merge(o, &deep_proc)
83
+ end
84
+ next o
85
+ }
86
+ merge(other, &deep_proc)
87
+ end
88
+
89
+
90
+ def deep_merge3(second)
91
+
92
+ # From: http://www.ruby-forum.com/topic/142809
93
+ # Author: Stefan Rusterholz
94
+
95
+ merger = proc { |key,v1,v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
96
+ self.merge(second, &merger)
97
+
98
+ end
99
+
100
+
101
+ def keep_merge(hash)
102
+ target = dup
103
+ hash.keys.each do |key|
104
+ if hash[key].is_a? Hash and self[key].is_a? Hash
105
+ target[key] = target[key].keep_merge(hash[key])
106
+ next
107
+ end
108
+ #target[key] = hash[key]
109
+ target.update(hash) { |key, *values| values.flatten.uniq }
110
+ end
111
+ target
112
+ end
113
+
114
114
  end
@@ -1,19 +1,19 @@
1
- require 'digest/md5'
2
-
3
- class Object
4
- def md5key
5
- to_s
6
- end
7
- end
8
-
9
- class Array
10
- def md5key
11
- map(&:md5key).join
12
- end
13
- end
14
-
15
- class Hash
16
- def md5key
17
- sort.map(&:md5key).join
18
- end
1
+ require 'digest/md5'
2
+
3
+ class Object
4
+ def md5key
5
+ to_s
6
+ end
7
+ end
8
+
9
+ class Array
10
+ def md5key
11
+ map(&:md5key).join
12
+ end
13
+ end
14
+
15
+ class Hash
16
+ def md5key
17
+ sort.map(&:md5key).join
18
+ end
19
19
  end
@@ -1,42 +1,42 @@
1
- module WidgetList
2
- class Railtie < Rails::Railtie
3
-
4
- config.before_configuration do
5
- config_file = Rails.root.join("config", "widget-list.yml")
6
- if config_file.file?
7
- # WidgetList::List::connect
8
- else
9
- puts "\nWidget List config not found. Creating config/widget-list.yml. \n\nPlease configure it with the appropriate connections"
10
- File.open(Rails.root.join("config", "widget-list.yml"), 'w') { |file|
11
- file.write("#For connection examples see: http://sequel.rubyforge.org/rdoc/files/doc/opening_databases_rdoc.html\n\n")
12
- file.write("development:\n")
13
- file.write(" :primary: sqlite:/\n")
14
- file.write(" :secondary: sqlite:/\n")
15
- file.write("\n")
16
- file.write("test:\n")
17
- file.write(" :primary: sqlite:/\n")
18
- file.write(" :secondary: sqlite:/\n")
19
- file.write("\n")
20
- file.write("release:\n")
21
- file.write(" :primary: sqlite:/\n")
22
- file.write(" :secondary: sqlite:/\n")
23
- file.write("\n")
24
- file.write("production:\n")
25
- file.write(" :primary: sqlite:/\n")
26
- file.write(" :secondary: sqlite:/\n")
27
- }
28
- end
29
- end
30
-
31
- initializer "Include widget_list" do
32
- ActiveSupport.on_load(:action_controller) do
33
- if WidgetList::List::is_sequel(true) || WidgetList::List::is_sequel(false)
34
- require 'sequel'
35
- end
36
- require 'widget_list/sequel'
37
- end
38
- end
39
-
40
-
41
- end
42
- end
1
+ module WidgetList
2
+ class Railtie < Rails::Railtie
3
+
4
+ config.before_configuration do
5
+ config_file = Rails.root.join("config", "widget-list.yml")
6
+ if config_file.file?
7
+ # WidgetList::List::connect
8
+ else
9
+ puts "\nWidget List config not found. Creating config/widget-list.yml. \n\nPlease configure it with the appropriate connections"
10
+ File.open(Rails.root.join("config", "widget-list.yml"), 'w') { |file|
11
+ file.write("#For connection examples see: http://sequel.rubyforge.org/rdoc/files/doc/opening_databases_rdoc.html\n\n")
12
+ file.write("development:\n")
13
+ file.write(" :primary: sqlite:/\n")
14
+ file.write(" :secondary: sqlite:/\n")
15
+ file.write("\n")
16
+ file.write("test:\n")
17
+ file.write(" :primary: sqlite:/\n")
18
+ file.write(" :secondary: sqlite:/\n")
19
+ file.write("\n")
20
+ file.write("release:\n")
21
+ file.write(" :primary: sqlite:/\n")
22
+ file.write(" :secondary: sqlite:/\n")
23
+ file.write("\n")
24
+ file.write("production:\n")
25
+ file.write(" :primary: sqlite:/\n")
26
+ file.write(" :secondary: sqlite:/\n")
27
+ }
28
+ end
29
+ end
30
+
31
+ initializer "Include widget_list" do
32
+ ActiveSupport.on_load(:action_controller) do
33
+ if WidgetList::List::is_sequel(true) || WidgetList::List::is_sequel(false)
34
+ require 'sequel'
35
+ end
36
+ require 'widget_list/sequel'
37
+ end
38
+ end
39
+
40
+
41
+ end
42
+ end
@@ -1,219 +1,219 @@
1
- module Sequel
2
- class Database
3
- @final_results = {}
4
- attr_accessor :final_results
5
-
6
- @errors = false
7
- attr_accessor :errors
8
-
9
- @last_error = ''
10
- attr_accessor :last_error
11
-
12
- @db_type = ''
13
- attr_accessor :db_type
14
-
15
- @final_count = 0
16
- attr_accessor :final_count
17
-
18
- @last_sql = ''
19
- attr_accessor :last_sql
20
-
21
- def _convert_bind(bind=[])
22
- parameters = ''
23
- unless bind.empty?
24
- all = []
25
- (bind||{}).each { |v|
26
- if v.class.name.downcase == 'string'
27
- all << "'" + v.gsub(/'/,"\\\\'") + "'"
28
- else
29
- all << v
30
- end
31
- }
32
- parameters = "," + all.join(' ,')
33
- end
34
- parameters
35
- end
36
-
37
- def _convert_active_record_bind(sql='',bind=[])
38
- unless bind.empty?
39
- (bind||{}).each { |v|
40
- sql.sub!(/\?/,v.to_s)
41
- }
42
- end
43
- end
44
-
45
- # _exec, pass a block and iterate the total rows
46
- #
47
- # example
48
- #
49
- =begin
50
- $DATABASE._exec {|i|
51
- asdf = "#{@final_results['NAME'][i]}"
52
- }
53
- =end
54
- #
55
- # Alternatively you could
56
- =begin
57
- @final_results['ID'].each_with_index { |id,k|
58
- name = @final_results['NAME'][k]
59
- price = @final_results['PRICE'][k]
60
- }
61
- =end
62
-
63
- def _exec
64
- if block_given?
65
- @final_count.times {|i|
66
- yield i
67
- }
68
- end
69
- end
70
-
71
- def _determine_type(sql_or_obj)
72
- if sql_or_obj.class.name.downcase != 'string' && sql_or_obj.class.name.to_s.split('::').last.downcase == 'dataset'
73
- sql = sql_or_obj.get_sql()
74
- elsif sql_or_obj.class.name.downcase == 'string'
75
- sql = sql_or_obj
76
- end
77
- end
78
-
79
- # probably not needed really
80
- def _update(sql_or_obj,bind={})
81
-
82
- end
83
-
84
- # @param [Object] replace_in_query
85
- def _bind(sql='',replace_in_query={})
86
- if !replace_in_query.empty? && replace_in_query.class.name == 'Hash'
87
- tmp = {}
88
- replace_in_query.each { |k, v|
89
- new_key = ':' + k.to_s
90
- tmp[ new_key ] = v
91
- }
92
- sql = WidgetList::Utils::fill(tmp, sql)
93
- end
94
- sql
95
- end
96
-
97
- def _get_row_value(row,fieldName)
98
- row.send(fieldName).to_s
99
- end
100
-
101
- # @param [Object or String] sql_or_obj
102
- # will either take raw SQL or a Sequel object
103
- # @param [Array] bind
104
- # will be replacements for ? ? in your query. Must be in sequence
105
- # @param [Hash] replace_in_query
106
- # will be a traditional php bind hash {'BIND'=>'value'}. which will replace :BIND in the query. thanks mwild
107
-
108
- def _select(sql_or_obj, bind=[], replace_in_query={}, active_record_model=false)
109
- # supporting either
110
- # if get_database._select('select * from items where name = ? AND price > ?', ['abc', 37]) > 0
111
- # or
112
- # if get_database._select(get_database[:items].filter(:name => 'abc')) > 0
113
- #
114
- sql = ''
115
- sql = _determine_type(sql_or_obj)
116
-
117
- if self.class.name != 'WidgetListActiveRecord'
118
-
119
- # build csv of bind to eval below (arguments need to be like this for raw SQL passed with bind in Sequel)
120
- #
121
- parameters = _convert_bind(bind)
122
-
123
- # escape anything incoming in raw SQL such as bound items to create the ruby string to pass
124
- #
125
- sql.gsub!(/'/,"\\\\'")
126
- else
127
-
128
- _convert_active_record_bind(sql, bind)
129
-
130
- end
131
-
132
- sql = _bind(sql,replace_in_query)
133
-
134
- # build rows array['COLUMN'][0] = 1234;
135
- #
136
- first = 1
137
- cnt = 0
138
- @final_results = {}
139
- if Rails.env == 'development'
140
- Rails.logger.info(sql)
141
- end
142
-
143
- if self.class.name == 'WidgetListActiveRecord'
144
- begin
145
- results = active_record_model.find_by_sql(sql)
146
- (results||[]).each { |row|
147
- cnt += 1
148
- row.attributes.keys.each { |fieldName|
149
- if first == 1
150
- @final_results[fieldName.to_s.upcase] = []
151
- end
152
- @final_results[fieldName.to_s.upcase] << ((row.send(fieldName).nil? && row.attributes[fieldName].nil?) ? '' : _get_row_value(row,fieldName))
153
- }
154
- first = 0
155
- }
156
- @last_sql = sql_or_obj
157
-
158
- rescue Exception => e
159
- cnt = 0
160
- Rails.logger.info(e)
161
- @errors = true
162
- @last_error = e.to_s
163
- @last_sql = sql_or_obj
164
- end
165
- else
166
- eval("
167
- begin
168
- @errors = false
169
- self['" + sql + "' " + parameters + "].each { |row|
170
- cnt += 1
171
- row.each { |k,v|
172
- if first == 1
173
- @final_results[k.to_s.upcase] = []
174
- end
175
- @final_results[k.to_s.upcase] << v
176
- }
177
- first = 0
178
- }
179
- @last_sql = self['" + sql + "' " + parameters + "].get_sql
180
- rescue Exception => e
181
- Rails.logger.info(e)
182
- @errors = true
183
- @last_error = e.to_s
184
- @last_sql = '" + sql + "' + \"\n\n\n\" + ' With Bind => ' + bind.inspect + ' And BindLegacy => ' + replace_in_query.inspect
185
- end
186
- ")
187
- end
188
- @final_count = cnt
189
- return cnt
190
- end
191
- end
192
-
193
- class Dataset
194
- def get_sql
195
- select_sql()
196
- end
197
- end
198
- end
199
-
200
-
201
- class WidgetListActiveRecord < Sequel::Database
202
- @final_results = {}
203
- attr_accessor :final_results
204
-
205
- @errors = false
206
- attr_accessor :errors
207
-
208
- @last_error = ''
209
- attr_accessor :last_error
210
-
211
- @db_type = ''
212
- attr_accessor :db_type
213
-
214
- @final_count = 0
215
- attr_accessor :final_count
216
-
217
- @last_sql = ''
218
- attr_accessor :last_sql
1
+ module Sequel
2
+ class Database
3
+ @final_results = {}
4
+ attr_accessor :final_results
5
+
6
+ @errors = false
7
+ attr_accessor :errors
8
+
9
+ @last_error = ''
10
+ attr_accessor :last_error
11
+
12
+ @db_type = ''
13
+ attr_accessor :db_type
14
+
15
+ @final_count = 0
16
+ attr_accessor :final_count
17
+
18
+ @last_sql = ''
19
+ attr_accessor :last_sql
20
+
21
+ def _convert_bind(bind=[])
22
+ parameters = ''
23
+ unless bind.empty?
24
+ all = []
25
+ (bind||{}).each { |v|
26
+ if v.class.name.downcase == 'string'
27
+ all << "'" + v.gsub(/'/,"\\\\'") + "'"
28
+ else
29
+ all << v
30
+ end
31
+ }
32
+ parameters = "," + all.join(' ,')
33
+ end
34
+ parameters
35
+ end
36
+
37
+ def _convert_active_record_bind(sql='',bind=[])
38
+ unless bind.empty?
39
+ (bind||{}).each { |v|
40
+ sql.sub!(/\?/,v.to_s)
41
+ }
42
+ end
43
+ end
44
+
45
+ # _exec, pass a block and iterate the total rows
46
+ #
47
+ # example
48
+ #
49
+ =begin
50
+ $DATABASE._exec {|i|
51
+ asdf = "#{@final_results['NAME'][i]}"
52
+ }
53
+ =end
54
+ #
55
+ # Alternatively you could
56
+ =begin
57
+ @final_results['ID'].each_with_index { |id,k|
58
+ name = @final_results['NAME'][k]
59
+ price = @final_results['PRICE'][k]
60
+ }
61
+ =end
62
+
63
+ def _exec
64
+ if block_given?
65
+ @final_count.times {|i|
66
+ yield i
67
+ }
68
+ end
69
+ end
70
+
71
+ def _determine_type(sql_or_obj)
72
+ if sql_or_obj.class.name.downcase != 'string' && sql_or_obj.class.name.to_s.split('::').last.downcase == 'dataset'
73
+ sql = sql_or_obj.get_sql()
74
+ elsif sql_or_obj.class.name.downcase == 'string'
75
+ sql = sql_or_obj
76
+ end
77
+ end
78
+
79
+ # probably not needed really
80
+ def _update(sql_or_obj,bind={})
81
+
82
+ end
83
+
84
+ # @param [Object] replace_in_query
85
+ def _bind(sql='',replace_in_query={})
86
+ if !replace_in_query.empty? && replace_in_query.class.name == 'Hash'
87
+ tmp = {}
88
+ replace_in_query.each { |k, v|
89
+ new_key = ':' + k.to_s
90
+ tmp[ new_key ] = v
91
+ }
92
+ sql = WidgetList::Utils::fill(tmp, sql)
93
+ end
94
+ sql
95
+ end
96
+
97
+ def _get_row_value(row,fieldName)
98
+ row.send(fieldName).to_s
99
+ end
100
+
101
+ # @param [Object or String] sql_or_obj
102
+ # will either take raw SQL or a Sequel object
103
+ # @param [Array] bind
104
+ # will be replacements for ? ? in your query. Must be in sequence
105
+ # @param [Hash] replace_in_query
106
+ # will be a traditional php bind hash {'BIND'=>'value'}. which will replace :BIND in the query. thanks mwild
107
+
108
+ def _select(sql_or_obj, bind=[], replace_in_query={}, active_record_model=false)
109
+ # supporting either
110
+ # if get_database._select('select * from items where name = ? AND price > ?', ['abc', 37]) > 0
111
+ # or
112
+ # if get_database._select(get_database[:items].filter(:name => 'abc')) > 0
113
+ #
114
+ sql = ''
115
+ sql = _determine_type(sql_or_obj)
116
+
117
+ if self.class.name != 'WidgetListActiveRecord'
118
+
119
+ # build csv of bind to eval below (arguments need to be like this for raw SQL passed with bind in Sequel)
120
+ #
121
+ parameters = _convert_bind(bind)
122
+
123
+ # escape anything incoming in raw SQL such as bound items to create the ruby string to pass
124
+ #
125
+ sql.gsub!(/'/,"\\\\'")
126
+ else
127
+
128
+ _convert_active_record_bind(sql, bind)
129
+
130
+ end
131
+
132
+ sql = _bind(sql,replace_in_query)
133
+
134
+ # build rows array['COLUMN'][0] = 1234;
135
+ #
136
+ first = 1
137
+ cnt = 0
138
+ @final_results = {}
139
+ if Rails.env == 'development'
140
+ Rails.logger.info(sql)
141
+ end
142
+
143
+ if self.class.name == 'WidgetListActiveRecord'
144
+ begin
145
+ results = active_record_model.find_by_sql(sql)
146
+ (results||[]).each { |row|
147
+ cnt += 1
148
+ row.attributes.keys.each { |fieldName|
149
+ if first == 1
150
+ @final_results[fieldName.to_s.upcase] = []
151
+ end
152
+ @final_results[fieldName.to_s.upcase] << ((row.send(fieldName).nil? && row.attributes[fieldName].nil?) ? '' : _get_row_value(row,fieldName))
153
+ }
154
+ first = 0
155
+ }
156
+ @last_sql = sql_or_obj
157
+
158
+ rescue Exception => e
159
+ cnt = 0
160
+ Rails.logger.info(e)
161
+ @errors = true
162
+ @last_error = e.to_s
163
+ @last_sql = sql_or_obj
164
+ end
165
+ else
166
+ eval("
167
+ begin
168
+ @errors = false
169
+ self['" + sql + "' " + parameters + "].each { |row|
170
+ cnt += 1
171
+ row.each { |k,v|
172
+ if first == 1
173
+ @final_results[k.to_s.upcase] = []
174
+ end
175
+ @final_results[k.to_s.upcase] << v
176
+ }
177
+ first = 0
178
+ }
179
+ @last_sql = self['" + sql + "' " + parameters + "].get_sql
180
+ rescue Exception => e
181
+ Rails.logger.info(e)
182
+ @errors = true
183
+ @last_error = e.to_s
184
+ @last_sql = '" + sql + "' + \"\n\n\n\" + ' With Bind => ' + bind.inspect + ' And BindLegacy => ' + replace_in_query.inspect
185
+ end
186
+ ")
187
+ end
188
+ @final_count = cnt
189
+ return cnt
190
+ end
191
+ end
192
+
193
+ class Dataset
194
+ def get_sql
195
+ select_sql()
196
+ end
197
+ end
198
+ end
199
+
200
+
201
+ class WidgetListActiveRecord < Sequel::Database
202
+ @final_results = {}
203
+ attr_accessor :final_results
204
+
205
+ @errors = false
206
+ attr_accessor :errors
207
+
208
+ @last_error = ''
209
+ attr_accessor :last_error
210
+
211
+ @db_type = ''
212
+ attr_accessor :db_type
213
+
214
+ @final_count = 0
215
+ attr_accessor :final_count
216
+
217
+ @last_sql = ''
218
+ attr_accessor :last_sql
219
219
  end