Class: ActiveReporter::Dimension::Bin::Set
- Inherits:
-
Object
- Object
- ActiveReporter::Dimension::Bin::Set
- Defined in:
- lib/active_reporter/dimension/bin/set.rb
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #[](key) ⇒ Object
- #as_json ⇒ Object
- #bin_edges ⇒ Object
- #bin_text ⇒ Object
- #cast(value) ⇒ Object
- #cast_bin_text ⇒ Object
- #contains_sql(expr) ⇒ Object
- #has_key?(key) ⇒ Boolean (also: #key?)
- #hash ⇒ Object
-
#initialize(min, max) ⇒ Set
constructor
A new instance of Set.
- #inspect ⇒ Object
- #max ⇒ Object
- #min ⇒ Object
- #parse(value) ⇒ Object
- #parses?(value) ⇒ Boolean
- #quote(value) ⇒ Object
- #row_sql ⇒ Object
- #valid? ⇒ Boolean
- #values_at(*keys) ⇒ Object
Constructor Details
#initialize(min, max) ⇒ Set
Returns a new instance of Set.
33 34 35 36 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 33 def initialize(min, max) @min = min @max = max end |
Class Method Details
.from_hash(source) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 8 def from_hash(source) # Returns either a bin or nil, depending on whether the input is valid. case source when nil new(nil, nil) when Hash then min, max = source.symbolize_keys.values_at(:min, :max) new(min.presence, max.presence) unless min.blank? && max.blank? else nil end end |
.from_sql(value) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 21 def from_sql(value) case value when /^([^,]+),(.+)$/ then new($1, $2) when /^([^,]+),$/ then new($1, nil) when /^,(.+)$/ then new(nil, $1) when ",", nil then new(nil, nil) else raise "Unexpected SQL bin format #{value}" end end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
131 132 133 134 135 136 137 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 131 def ==(other) if other.nil? min.nil? && max.nil? else min == other[:min] && max == other[:max] end end |
#[](key) ⇒ Object
107 108 109 110 111 112 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 107 def [](key) case key.to_s when "min" then min when "max" then max end end |
#as_json ⇒ Object
96 97 98 99 100 101 102 103 104 105 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 96 def as_json(*) @as_json ||= case bin_edges when :min_and_max { min: min, max: max } when :min { min: min } when :max { max: max } end end |
#bin_edges ⇒ Object
140 141 142 143 144 145 146 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 140 def bin_edges case when min_and_max? then :min_and_max when min? then :min when max? then :max end end |
#bin_text ⇒ Object
66 67 68 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 66 def bin_text "#{min},#{max}" end |
#cast(value) ⇒ Object
62 63 64 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 62 def cast(value) quote(value) end |
#cast_bin_text ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 70 def cast_bin_text case ActiveReporter.database_type when :postgres, :sqlite "CAST(#{quote(bin_text)} AS text)" else quote(bin_text) end end |
#contains_sql(expr) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 83 def contains_sql(expr) case bin_edges when :min_and_max "(#{expr} >= #{quote(min)} AND #{expr} < #{quote(max)})" when :min "#{expr} >= #{quote(min)}" when :max "#{expr} < #{quote(max)}" else "#{expr} IS NULL" end end |
#has_key?(key) ⇒ Boolean Also known as: key?
114 115 116 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 114 def has_key?(key) %w[min max].include?(key.to_s) end |
#hash ⇒ Object
127 128 129 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 127 def hash as_json.hash end |
#inspect ⇒ Object
123 124 125 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 123 def inspect "<Bin @min=#{min.inspect} @max=#{max.inspect}>" end |
#max ⇒ Object
42 43 44 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 42 def max @max && parse(@max) end |
#min ⇒ Object
38 39 40 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 38 def min @min && parse(@min) end |
#parse(value) ⇒ Object
54 55 56 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 54 def parse(value) value end |
#parses?(value) ⇒ Boolean
50 51 52 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 50 def parses?(value) parse(value).present? rescue false end |
#quote(value) ⇒ Object
58 59 60 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 58 def quote(value) ActiveRecord::Base.connection.quote(value) end |
#row_sql ⇒ Object
79 80 81 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 79 def row_sql "SELECT #{cast(min)} AS min, #{cast(max)} AS max, #{cast_bin_text} AS bin_text" end |
#valid? ⇒ Boolean
46 47 48 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 46 def valid? (@min.nil? || parses?(@min)) && (@max.nil? || parses?(@max)) end |
#values_at(*keys) ⇒ Object
119 120 121 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 119 def values_at(*keys) keys.map { |k| self[k] } end |