Class: Repor::Dimensions::BinDimension::Bin
- Inherits:
-
Object
- Object
- Repor::Dimensions::BinDimension::Bin
show all
- Defined in:
- lib/repor/dimensions/bin_dimension/bin.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(min, max) ⇒ Bin
Returns a new instance of Bin.
5
6
7
8
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 5
def initialize(min, max)
@min = min
@max = max
end
|
Class Method Details
.from_hash(h) ⇒ Object
79
80
81
82
83
84
85
86
87
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 79
def self.from_hash(h)
return new(nil, nil) if h.nil?
return unless h.is_a?(Hash)
min, max = h.symbolize_keys.values_at(:min, :max)
return if min.blank? && max.blank?
new(min.presence, max.presence)
end
|
.from_sql(value) ⇒ Object
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 68
def self.from_sql(value)
case value
when /^([^,]+),(.+)$/ then new($1, $2)
when /^([^,]+),$/ then new($1, nil)
when /^,(.+)$/ then new(nil, $1)
when ',' then new(nil, nil)
else
raise "Unexpected SQL bin format #{value}"
end
end
|
Instance Method Details
#==(other) ⇒ Object
Also known as:
eql?
125
126
127
128
129
130
131
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 125
def ==(other)
if other.nil?
min.nil? && max.nil?
else
min == other[:min] && max == other[:max]
end
end
|
#[](key) ⇒ Object
102
103
104
105
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 102
def [](key)
return min if key.to_s == 'min'
return max if key.to_s == 'max'
end
|
#as_json ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 89
def as_json(*)
return @as_json if instance_variable_defined?(:@as_json)
@as_json = if min && max
{ min: min, max: max }
elsif min
{ min: min }
elsif max
{ max: max }
else
nil
end
end
|
#bin_text ⇒ Object
39
40
41
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 39
def bin_text
"#{min},#{max}"
end
|
#cast(value) ⇒ Object
35
36
37
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 35
def cast(value)
quote(value)
end
|
#cast_bin_text ⇒ Object
43
44
45
46
47
48
49
50
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 43
def cast_bin_text
case Repor.database_type
when :postgres, :sqlite
"CAST(#{quote(bin_text)} AS text)"
else
quote(bin_text)
end
end
|
#contains_sql(expr) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 56
def contains_sql(expr)
if min && max
"(#{expr} >= #{quote(min)} AND #{expr} < #{quote(max)})"
elsif max
"#{expr} < #{quote(max)}"
elsif min
"#{expr} >= #{quote(min)}"
else
"#{expr} IS NULL"
end
end
|
#has_key?(key) ⇒ Boolean
Also known as:
key?
107
108
109
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 107
def has_key?(key)
key.to_s == 'min' || key.to_s == 'max'
end
|
#hash ⇒ Object
121
122
123
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 121
def hash
as_json.hash
end
|
#inspect ⇒ Object
117
118
119
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 117
def inspect
"<Bin @min=#{min.inspect} @max=#{max.inspect}>"
end
|
#max ⇒ Object
14
15
16
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 14
def max
@max && parse(@max)
end
|
#min ⇒ Object
10
11
12
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 10
def min
@min && parse(@min)
end
|
#parse(value) ⇒ Object
27
28
29
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 27
def parse(value)
value
end
|
#parses?(value) ⇒ Boolean
23
24
25
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 23
def parses?(value)
parse(value).present? rescue false
end
|
#quote(value) ⇒ Object
31
32
33
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 31
def quote(value)
ActiveRecord::Base.connection.quote(value)
end
|
#row_sql ⇒ Object
52
53
54
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 52
def row_sql
"SELECT #{cast(min)} AS min, #{cast(max)} AS max, #{cast_bin_text} AS bin_text"
end
|
#valid? ⇒ Boolean
18
19
20
21
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 18
def valid?
(@min.nil? || parses?(@min)) &&
(@max.nil? || parses?(@max))
end
|
#values_at(*keys) ⇒ Object
113
114
115
|
# File 'lib/repor/dimensions/bin_dimension/bin.rb', line 113
def values_at(*keys)
keys.map { |k| self[key] }
end
|