class Blazer::Statement

Attributes

bind_statement[R]
bind_values[R]
data_source[R]
statement[R]
values[RW]

Public Class Methods

new(statement, data_source = nil) click to toggle source
# File lib/blazer/statement.rb, line 6
def initialize(statement, data_source = nil)
  @statement = statement
  @data_source = data_source.is_a?(String) ? Blazer.data_sources[data_source] : data_source
  @values = {}
end

Public Instance Methods

add_values(var_params) click to toggle source
# File lib/blazer/statement.rb, line 18
def add_values(var_params)
  variables.each do |var|
    value = var_params[var].presence
    value = nil unless value.is_a?(String) # ignore arrays and hashes
    if value
      if ["start_time", "end_time"].include?(var)
        value = value.to_s.gsub(" ", "+") # fix for Quip bug
      end

      if var.end_with?("_at")
        begin
          value = Blazer.time_zone.parse(value)
        rescue
          # do nothing
        end
      end

      unless value.is_a?(ActiveSupport::TimeWithZone)
        if value.match?(/\A\d+\z/)
          value = value.to_i
        elsif value.match?(/\A\d+\.\d+\z/)
          value = value.to_f
        end
      end
    end
    value = Blazer.transform_variable.call(var, value) if Blazer.transform_variable
    @values[var] = value
  end
end
apply_cohort_analysis(period:, days:) click to toggle source
# File lib/blazer/statement.rb, line 52
def apply_cohort_analysis(period:, days:)
  @statement = data_source.cohort_analysis_statement(statement, period: period, days: days).sub("{placeholder}") { statement }
end
bind() click to toggle source
# File lib/blazer/statement.rb, line 64
def bind
  @bind_statement, @bind_values = data_source.bind_params(transformed_statement, values)
end
clear_cache() click to toggle source
# File lib/blazer/statement.rb, line 72
def clear_cache
  bind if bind_statement.nil?
  data_source.clear_cache(self)
end
cohort_analysis?() click to toggle source
# File lib/blazer/statement.rb, line 48
def cohort_analysis?
  /\/\*\s*cohort analysis\s*\*\//i.match?(statement)
end
display_statement() click to toggle source
# File lib/blazer/statement.rb, line 68
def display_statement
  data_source.sub_variables(transformed_statement, values)
end
transformed_statement() click to toggle source

should probably transform before cohort analysis but keep previous order for now

# File lib/blazer/statement.rb, line 58
def transformed_statement
  statement = self.statement.dup
  Blazer.transform_statement.call(data_source, statement) if Blazer.transform_statement
  statement
end
variables() click to toggle source
# File lib/blazer/statement.rb, line 12
def variables
  # strip commented out lines
  # and regex {1} or {1,2}
  @variables ||= statement.to_s.gsub(/\-\-.+/, "").gsub(/\/\*.+\*\//m, "").scan(/\{\w*?\}/i).map { |v| v[1...-1] }.reject { |v| /\A\d+(\,\d+)?\z/.match(v) || v.empty? }.uniq
end