Class: Repor::Dimensions::BinDimension
- Inherits:
-
BaseDimension
show all
- Defined in:
- lib/repor/dimensions/bin_dimension.rb,
lib/repor/dimensions/bin_dimension/bin.rb,
lib/repor/dimensions/bin_dimension/bin_table.rb
Defined Under Namespace
Classes: Bin, BinTable
Instance Attribute Summary
#name, #opts, #report
Instance Method Summary
collapse
#expression, #extract_sql_value, #filtering?, #grouping?, #initialize, #null_order, #nulls_last?, #order, #order_expression, #params, #relate, #sort_desc?, #sort_order
Instance Method Details
#bin_start ⇒ Object
79
80
81
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 79
def bin_start
self.min
end
|
#bin_width ⇒ Object
75
76
77
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 75
def bin_width
raise NotImplementedError
end
|
#domain ⇒ Object
24
25
26
27
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 24
def domain
return 0 if min.nil? || max.nil?
max - min
end
|
#filter(relation) ⇒ Object
37
38
39
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 37
def filter(relation)
filter_values.filter(relation, expression)
end
|
#filter_max ⇒ Object
20
21
22
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 20
def filter_max
filter_values_for(:max).max
end
|
#filter_min ⇒ Object
16
17
18
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 16
def filter_min
filter_values_for(:min).min
end
|
#filter_values ⇒ Object
33
34
35
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 33
def filter_values
@filter_values ||= to_bins(super)
end
|
#group(relation) ⇒ Object
41
42
43
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 41
def group(relation)
group_values.group(relation, expression, sql_value_name)
end
|
#group_values ⇒ Object
29
30
31
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 29
def group_values
@group_values ||= to_bins(array_param(:bins).presence || autopopulate_bins)
end
|
#max ⇒ Object
12
13
14
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 12
def max
@max ||= filter_max || report.records.maximum(expression)
end
|
#max_bins ⇒ Object
4
5
6
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 4
def max_bins
2000
end
|
#min ⇒ Object
8
9
10
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 8
def min
@min ||= filter_min || report.records.minimum(expression)
end
|
#validate_params! ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/repor/dimensions/bin_dimension.rb', line 45
def validate_params!
super
if params.key?(:bin_count)
unless Repor.numeric?(params[:bin_count])
invalid_param!(:bin_count, "must be numeric")
end
unless params[:bin_count].to_i > 0
invalid_param!(:bin_count, "must be greater than 0")
end
unless params[:bin_count].to_i <= max_bins
invalid_param!(:bin_count, "must be less than #{max_bins}")
end
end
if array_param(:bins).present?
unless group_values.all?(&:valid?)
invalid_param!(:bins, "must be hashes with min/max keys and valid values, or nil")
end
end
if array_param(:only).present?
unless filter_values.all?(&:valid?)
invalid_param!(:only, "must be hashes with min/max keys and valid values, or nil")
end
end
end
|