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.
31 32 33 34 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 31 def initialize(min, max) @min = min @max = max end |
Class Method Details
.from_hash(source) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 6 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
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 19 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?
129 130 131 132 133 134 135 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 129 def ==(other) if other.nil? min.nil? && max.nil? else min == other[:min] && max == other[:max] end end |
#[](key) ⇒ Object
105 106 107 108 109 110 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 105 def [](key) case key.to_s when 'min' then min when 'max' then max end end |
#as_json ⇒ Object
94 95 96 97 98 99 100 101 102 103 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 94 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
138 139 140 141 142 143 144 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 138 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
64 65 66 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 64 def bin_text "#{min},#{max}" end |
#cast(value) ⇒ Object
60 61 62 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 60 def cast(value) quote(value) end |
#cast_bin_text ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 68 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
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 81 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?
112 113 114 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 112 def has_key?(key) %w[min max].include?(key.to_s) end |
#hash ⇒ Object
125 126 127 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 125 def hash as_json.hash end |
#inspect ⇒ Object
121 122 123 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 121 def inspect "<Bin @min=#{min.inspect} @max=#{max.inspect}>" end |
#max ⇒ Object
40 41 42 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 40 def max @max && parse(@max) end |
#min ⇒ Object
36 37 38 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 36 def min @min && parse(@min) end |
#parse(value) ⇒ Object
52 53 54 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 52 def parse(value) value end |
#parses?(value) ⇒ Boolean
48 49 50 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 48 def parses?(value) parse(value).present? rescue false end |
#quote(value) ⇒ Object
56 57 58 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 56 def quote(value) ActiveRecord::Base.connection.quote(value) end |
#row_sql ⇒ Object
77 78 79 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 77 def row_sql "SELECT #{cast(min)} AS min, #{cast(max)} AS max, #{cast_bin_text} AS bin_text" end |
#valid? ⇒ Boolean
44 45 46 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 44 def valid? (@min.nil? || parses?(@min)) && (@max.nil? || parses?(@max)) end |
#values_at(*keys) ⇒ Object
117 118 119 |
# File 'lib/active_reporter/dimension/bin/set.rb', line 117 def values_at(*keys) keys.map { |k| self[key] } end |