simple_drilldown 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f3c60677d71d21cffa6cd996246f82edefaf6c2
4
- data.tar.gz: 8c1b98b1139629445493cbdb2e9665026347031a
3
+ metadata.gz: f142583337003129a4ed401d134a3e64700aedef
4
+ data.tar.gz: 03d966c4128c1868e45a43520af87039f16ff726
5
5
  SHA512:
6
- metadata.gz: 443ae0f7e73bdb786a29de09648a14c8acc50d8a8d74187304389b26f1b4194c1e780e34d5a1f586b202478506519075502b022f28a6c7bded73c98aefe01567
7
- data.tar.gz: b278ed3ac56d3421eb8f545608ee089ff3ce5acc55a393134e5e78085121d9a3dbeca15670e5419f63e3f18792bc35bd90d31f406686e42d0b7c6123d058685b
6
+ metadata.gz: 28ec3095cfa04d823bb11849cea7c9d3945c000dfdc9ca2c91aa9613cb293beb163332c7a1e7a59a9318ecdab755a737d0ac3bf75c36718d57c895cafd471028
7
+ data.tar.gz: a0a9f7c8fc5bb058e864b21c29d8e264efc93195887a1c9106be68be33a169e35930de105c59ae264ac07d2a0ef7501d9e76d5827856243a90d96e362d616a3d
@@ -1,4 +1,4 @@
1
- class DrilldownController < ApplicationController
1
+ module DrilldownController
2
2
  def initialize(fields, default_fields, target_class, select, list_includes, list_order)
3
3
  super()
4
4
  @fields = fields
@@ -8,7 +8,7 @@ class DrilldownController < ApplicationController
8
8
  @list_includes = list_includes
9
9
  @list_order = list_order
10
10
  end
11
-
11
+
12
12
  def xml_export
13
13
  params[:search][:list] = '1'
14
14
  index(false)
@@ -23,7 +23,7 @@ class DrilldownController < ApplicationController
23
23
  def index(do_render = true)
24
24
  @search = Search.new(params[:search], @default_fields)
25
25
 
26
- @transaction_fields = (@search.fields + ((@fields.keys.map{ |field_name| field_name.to_s }) - @search.fields))
26
+ @transaction_fields = (@search.fields + ((@fields.keys.map { |field_name| field_name.to_s }) - @search.fields))
27
27
  @transaction_fields_map = @fields
28
28
 
29
29
  select = @select.dup
@@ -46,45 +46,45 @@ class DrilldownController < ApplicationController
46
46
  if @search.order_by_value && @dimensions.size <= 1
47
47
  order = @search.select_value == Search::SelectValue::VOLUME ? 'volume DESC' : 'count DESC'
48
48
  else
49
- order = @dimensions.map{|d| d[:select_expression]}.join(', ')
49
+ order = @dimensions.map { |d| d[:select_expression] }.join(', ')
50
50
  order = nil if order.empty?
51
51
  end
52
- group = @dimensions.map{|d| d[:select_expression]}.join(', ')
52
+ group = @dimensions.map { |d| d[:select_expression] }.join(', ')
53
53
  group = nil if group.empty?
54
54
 
55
55
  rows = @target_class.find(
56
- :all, :select => select, :conditions => conditions,
57
- :joins => make_join(@target_class.name.underscore.to_sym, includes), :group => group,
58
- :order => order
56
+ :all, :select => select, :conditions => conditions,
57
+ :joins => make_join(@target_class.name.underscore.to_sym, includes), :group => group,
58
+ :order => order
59
59
  )
60
60
 
61
61
  if rows.empty?
62
- @result = {:value=>"All", :count=>0, :volume=>0, :volume_compensated=>0, :row_count=>0, :nodes=>0, :rows=>[]}
62
+ @result = {:value => "All", :count => 0, :volume => 0, :volume_compensated => 0, :row_count => 0, :nodes => 0, :rows => []}
63
63
  else
64
64
  @result = result_from_rows(rows, 0, 0, ['All'])
65
65
  end
66
66
  @search.list = false if @result[:count] > 10000
67
67
 
68
- @remaining_dimensions = @dimension_defs.dup.delete_if{|dim_name, dimension| @search.filter[dim_name] && @search.filter[dim_name].size == 1}
68
+ @remaining_dimensions = @dimension_defs.dup.delete_if { |dim_name, dimension| @search.filter[dim_name] && @search.filter[dim_name].size == 1 }
69
69
  populate_list(conditions, includes, @result, []) if @search.list
70
70
  render :template => '/transaction_drilldown/index' if do_render
71
71
  end
72
72
 
73
73
  # Empty summary rows are needed to plot zero points in the charts
74
74
  def add_zero_results(result_rows, dimension)
75
- legal_values = legal_values_for(@dimensions[dimension][:url_param_name], true).call(@search).map{|lv| lv[1]}
76
- current_values = result_rows.map{|r| r[:value]}.compact
75
+ legal_values = legal_values_for(@dimensions[dimension][:url_param_name], true).call(@search).map { |lv| lv[1] }
76
+ current_values = result_rows.map { |r| r[:value] }.compact
77
77
  empty_values = legal_values - current_values
78
78
 
79
79
  unless empty_values.empty?
80
- empty_values.each do | v |
80
+ empty_values.each do |v|
81
81
  sub_result = {
82
- :value => v,
83
- :count => 0,
84
- :volume => 0,
85
- :volume_compensated => 0,
86
- :row_count => 0,
87
- :nodes => 0,
82
+ :value => v,
83
+ :count => 0,
84
+ :volume => 0,
85
+ :volume_compensated => 0,
86
+ :row_count => 0,
87
+ :nodes => 0,
88
88
  }
89
89
  if dimension < @dimensions.size - 1
90
90
  sub_result[:rows] = add_zero_results([], dimension + 1)
@@ -99,17 +99,17 @@ class DrilldownController < ApplicationController
99
99
  def result_from_rows(rows, row_index, dimension, previous_values)
100
100
  row = rows[row_index]
101
101
  return nil if row.nil?
102
- values = (0..dimension).to_a.map{|i| row["value#{i}"]}
102
+ values = (0..dimension).to_a.map { |i| row["value#{i}"] }
103
103
  return nil if values != previous_values
104
104
 
105
105
  if dimension == @dimensions.size
106
106
  return {
107
- :value => values[-1],
108
- :count => row[:count].to_i,
109
- :volume => row[:volume].to_i,
110
- :volume_compensated => row[:volume_compensated].to_i,
111
- :row_count => 1,
112
- :nodes => 1,
107
+ :value => values[-1],
108
+ :count => row[:count].to_i,
109
+ :volume => row[:volume].to_i,
110
+ :volume_compensated => row[:volume_compensated].to_i,
111
+ :row_count => 1,
112
+ :nodes => 1,
113
113
  }
114
114
  end
115
115
 
@@ -125,13 +125,13 @@ class DrilldownController < ApplicationController
125
125
  result_rows = add_zero_results(result_rows, dimension)
126
126
 
127
127
  {
128
- :value => values[-1],
129
- :count => result_rows.inject(0){|t, r| t + r[:count].to_i},
130
- :volume => result_rows.inject(0){|t, r| t + r[:volume]},
131
- :volume_compensated => result_rows.inject(0){|t, r| t + r[:volume_compensated]},
132
- :row_count => result_rows.inject(0){|t, r| t + r[:row_count]},
133
- :nodes => result_rows.inject(0){|t, r| t + r[:nodes]} + 1,
134
- :rows => result_rows,
128
+ :value => values[-1],
129
+ :count => result_rows.inject(0) { |t, r| t + r[:count].to_i },
130
+ :volume => result_rows.inject(0) { |t, r| t + r[:volume] },
131
+ :volume_compensated => result_rows.inject(0) { |t, r| t + r[:volume_compensated] },
132
+ :row_count => result_rows.inject(0) { |t, r| t + r[:row_count] },
133
+ :nodes => result_rows.inject(0) { |t, r| t + r[:nodes] } + 1,
134
+ :rows => result_rows,
135
135
  }
136
136
  end
137
137
 
@@ -221,83 +221,83 @@ class DrilldownController < ApplicationController
221
221
  filter_texts << "#{dimension_def[:pretty_name]} #{dimension_def[:label_method] ? dimension_def[:label_method].call(value) : value}"
222
222
  includes << dimension_def[:includes] if dimension_def[:includes]
223
223
  dimension_def[:condition_string]
224
- end.join(' OR ')
225
- end
224
+ end.join(' OR ')
226
225
  end
227
- filter_text = filter_texts.join(' and ')
228
- conditions = [condition_strings.map{|c|"(#{c})"}.join(" AND "), *condition_values]
229
- includes.uniq!
230
- else
231
- filter_text = nil
232
- conditions = nil
233
226
  end
234
- return conditions, filter_text, includes
227
+ filter_text = filter_texts.join(' and ')
228
+ conditions = [condition_strings.map { |c| "(#{c})" }.join(" AND "), *condition_values]
229
+ includes.uniq!
230
+ else
231
+ filter_text = nil
232
+ conditions = nil
235
233
  end
234
+ return conditions, filter_text, includes
235
+ end
236
236
 
237
- def legal_values_for(field, preserve_filter = false)
238
- lambda do |search|
239
- my_filter = search.filter.dup
240
- my_filter.delete(field.to_s) unless preserve_filter
241
- conditions, t, includes = make_conditions(my_filter)
242
- dimension = @dimension_defs[field.to_s]
243
- if dimension[:includes]
244
- if dimension[:includes].is_a?(Array)
245
- includes += dimension[:includes]
246
- else
247
- includes << dimension[:includes]
248
- end
249
- includes.uniq!
237
+ def legal_values_for(field, preserve_filter = false)
238
+ lambda do |search|
239
+ my_filter = search.filter.dup
240
+ my_filter.delete(field.to_s) unless preserve_filter
241
+ conditions, t, includes = make_conditions(my_filter)
242
+ dimension = @dimension_defs[field.to_s]
243
+ if dimension[:includes]
244
+ if dimension[:includes].is_a?(Array)
245
+ includes += dimension[:includes]
246
+ else
247
+ includes << dimension[:includes]
250
248
  end
251
- rows = @target_class.find(
249
+ includes.uniq!
250
+ end
251
+ rows = @target_class.find(
252
252
  :all,
253
253
  :select => "DISTINCT(#{dimension[:select_expression]}) AS value",
254
254
  :conditions => conditions,
255
255
  :joins => make_join(@target_class.name.underscore.to_sym, includes),
256
256
  :order => 'value'
257
- )
258
- if search.filter[field.to_s]
259
- search.filter[field.to_s].each do |selected_value|
260
- unless rows.find{|r| r[:value] == selected_value}
261
- rows << {:value => selected_value}
262
- end
257
+ )
258
+ if search.filter[field.to_s]
259
+ search.filter[field.to_s].each do |selected_value|
260
+ unless rows.find { |r| r[:value] == selected_value }
261
+ rows << {:value => selected_value}
263
262
  end
264
- rows.sort_by{|r| r[:value]}
265
263
  end
266
- values = rows.map{|r| [dimension[:label_method] && dimension[:label_method].call(r[:value]) || r[:value], r[:value]]}
267
- values
264
+ rows.sort_by { |r| r[:value] }
268
265
  end
266
+ values = rows.map { |r| [dimension[:label_method] && dimension[:label_method].call(r[:value]) || r[:value], r[:value]] }
267
+ values
269
268
  end
269
+ end
270
270
 
271
- def dimension(name, select_expression, options = {})
272
- includes = options.delete(:includes)
273
- interval = options.delete(:interval)
274
- label_method = options.delete(:label_method)
275
- legal_values = options.delete(:legal_values) || legal_values_for(name)
271
+ def dimension(name, select_expression, options = {})
272
+ includes = options.delete(:includes)
273
+ interval = options.delete(:interval)
274
+ label_method = options.delete(:label_method)
275
+ legal_values = options.delete(:legal_values) || legal_values_for(name)
276
276
 
277
- raise "Unknown options: #{options.keys.inspect}" unless options.empty?
277
+ raise "Unknown options: #{options.keys.inspect}" unless options.empty?
278
278
 
279
- @dimension_defs[name.to_s] = {
279
+ @dimension_defs[name.to_s] = {
280
280
  :select_expression => select_expression,
281
281
  :condition_string => interval ? "#{select_expression} BETWEEN ? AND ?" : "(#{select_expression}) = ?",
282
- :condition_values_method => interval ? lambda { |values| [values[0], values[1] || values[0]]} : nil,
282
+ :condition_values_method => interval ? lambda { |values| [values[0], values[1] || values[0]] } : nil,
283
283
  :pretty_name => t(name),
284
284
  :url_param_name => name.to_s,
285
285
  :legal_values => legal_values,
286
286
  :label_method => label_method,
287
287
  :includes => includes,
288
288
  :interval => interval,
289
- }
290
- end
289
+ }
290
+ end
291
291
 
292
292
  def get_transactions(tree)
293
293
  return tree[:transactions] if tree[:transactions]
294
- tree[:rows].map{|r| get_transactions(r)}.flatten
294
+ tree[:rows].map { |r| get_transactions(r) }.flatten
295
295
  end
296
296
 
297
297
  def make_join(model, include)
298
298
  case include
299
299
  when Array
300
- include.map{|i| make_join(model, i)}.join(' ')
300
+ include.map { |i| make_join(model, i) }.join(' ')
301
301
  when Hash
302
302
  sql = ''
303
303
  include.each do |parent, child|
@@ -315,4 +315,4 @@ class DrilldownController < ApplicationController
315
315
  end
316
316
  end
317
317
 
318
- end
318
+ end
@@ -1,3 +1,3 @@
1
1
  module SimpleDrilldown
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_drilldown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uwe Kubosch