class Blazer::Statement
Attributes
Public Class Methods
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
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/) # check no leading zeros (when not zero) if value == value.to_i.to_s value = value.to_i end 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
Source
# File lib/blazer/statement.rb, line 55 def apply_cohort_analysis(period:, days:) @statement = data_source.cohort_analysis_statement(statement, period: period, days: days).sub("{placeholder}") { statement } end
Source
# File lib/blazer/statement.rb, line 67 def bind @bind_statement, @bind_values = data_source.bind_params(transformed_statement, values) end
Source
# File lib/blazer/statement.rb, line 75 def clear_cache bind if bind_statement.nil? data_source.clear_cache(self) end
Source
# File lib/blazer/statement.rb, line 51 def cohort_analysis? /\/\*\s*cohort analysis\s*\*\//i.match?(statement) end
Source
# File lib/blazer/statement.rb, line 71 def display_statement data_source.sub_variables(transformed_statement, values) end
Source
# File lib/blazer/statement.rb, line 61 def transformed_statement statement = self.statement.dup Blazer.transform_statement.call(data_source, statement) if Blazer.transform_statement statement end
should probably transform before cohort analysis but keep previous order for now
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