simple_drilldown 0.0.2 → 0.0.3

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.
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