Class: FactMetrics::CountConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/fact_metrics/count_config.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, uses: nil, **options) ⇒ CountConfig

Returns a new instance of CountConfig.



4
5
6
7
8
# File 'lib/fact_metrics/count_config.rb', line 4

def initialize(name, uses: nil, **options)
  @name = name
  @uses = options["uses"] || nil
  @options = options
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



2
3
4
# File 'lib/fact_metrics/count_config.rb', line 2

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



2
3
4
# File 'lib/fact_metrics/count_config.rb', line 2

def options
  @options
end

#usesObject (readonly)

Returns the value of attribute uses.



2
3
4
# File 'lib/fact_metrics/count_config.rb', line 2

def uses
  @uses
end

Instance Method Details

#composed_of_attributesObject



14
15
16
17
18
19
20
21
# File 'lib/fact_metrics/count_config.rb', line 14

def composed_of_attributes
  [
    composed_of_name.to_sym,
    class_name: "Metric",
    mapping: {sql_result_name => :value},
    constructor: proc { |value| FactMetrics::Metric.new(value, metric_options) }
  ]
end

#composed_of_nameObject



12
# File 'lib/fact_metrics/count_config.rb', line 12

def composed_of_name = "#{sql_result_name}_metric"

#condition_sqlObject



29
30
31
32
33
34
35
36
37
# File 'lib/fact_metrics/count_config.rb', line 29

def condition_sql
  if options[:all] == true
    options[:all].to_s
  elsif options[:equal].present?
    "#{options[:field] || name} = '#{options[:equal]}'"
  elsif options[:condition].present?
    options[:condition].to_s
  end
end

#metric_optionsObject



39
40
41
# File 'lib/fact_metrics/count_config.rb', line 39

def metric_options
  {name: composed_of_name, precision: 0}.merge(options)
end

#scope_nameObject



10
# File 'lib/fact_metrics/count_config.rb', line 10

def scope_name = "#{name}_counts"

#sqlObject



23
24
25
26
27
# File 'lib/fact_metrics/count_config.rb', line 23

def sql
  <<~SQL
    COUNT(*) FILTER (WHERE #{condition_sql}) AS #{sql_result_name}
  SQL
end

#sql_result_nameObject



11
# File 'lib/fact_metrics/count_config.rb', line 11

def sql_result_name = "#{name}_count"