class ReportsKit::Reports::FilterWithSeries

Constants

COLUMN_TYPES_FILTER_TYPE_CLASSES
CONFIGURATION_STRATEGIES_FILTER_TYPE_CLASSES

Attributes

configuration[RW]
filter[RW]
series[RW]

Public Class Methods

new(filter:, series:) click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 25
def initialize(filter:, series:)
  self.filter = filter
  self.series = series
  self.configuration = InferrableConfiguration.new(self, :filters)

  properties[:criteria] = filter_type.default_criteria unless properties[:criteria]
end

Public Instance Methods

apply(relation) click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 92
def apply(relation)
  filter_type.apply_filter(relation)
end
apply_contextual_filters(relation, context_params) click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 83
def apply_contextual_filters(relation, context_params)
  return relation if properties[:contextual_filters].blank? || context_params.blank?
  contextual_filters = properties[:contextual_filters].map { |key| ContextualFilter.new(key, relation.base_class) }
  contextual_filters.each do |contextual_filter|
    relation = contextual_filter.apply(relation, context_params)
  end
  relation
end
context_record_association() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 57
def context_record_association
  properties[:context_record_association] || instance_class.name.tableize
end
filter_type() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 70
def filter_type
  type_klass.new(settings, properties, primary_dimension: series.dimensions.first)
end
filter_type_class_from_model() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 74
def filter_type_class_from_model
  return unless settings
  type_key = settings[:type_key]
  raise ArgumentError.new("No type specified for filter with key: '#{key}'") unless type_key
  type_class = CONFIGURATION_STRATEGIES_FILTER_TYPE_CLASSES[type_key]
  raise ArgumentError.new("Invalid type ('#{type_key}') specified for filter with key: '#{key}'") unless type_class
  type_class
end
inferred_filter_settings() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 51
def inferred_filter_settings
  {
    column: column
  }
end
inferred_settings() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 47
def inferred_settings
  configuration.inferred_settings.merge(inferred_filter_settings)
end
normalized_properties() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 33
def normalized_properties
  return properties unless configured_by_time?
  criteria = properties[:criteria]
  return properties if criteria.blank? || criteria[:value].blank?
  values = criteria[:value].split(ReportsKit::Reports::FilterTypes::Datetime::SEPARATOR)
  values = values.map { |value| ReportsKit::Reports::Data::Utils.format_time_value(value) }
  properties[:criteria][:value] = values.join(ReportsKit::Reports::FilterTypes::Datetime::SEPARATOR)
  properties
end
settings() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 43
def settings
  inferred_settings.merge(settings_from_model)
end
type_klass() click to toggle source
# File lib/reports_kit/reports/filter_with_series.rb, line 61
def type_klass
  type_klass_for_configuration_strategy = CONFIGURATION_STRATEGIES_FILTER_TYPE_CLASSES[configuration_strategy]
  return type_klass_for_configuration_strategy if type_klass_for_configuration_strategy
  type_klass_for_column_type = COLUMN_TYPES_FILTER_TYPE_CLASSES[column_type]
  return type_klass_for_column_type if type_klass_for_column_type
  return filter_type_class_from_model if configured_by_model?
  raise ArgumentError.new("No configuration found for filter with key: '#{key}'")
end