class ReportsKits::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_kits/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_kits/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_kits/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_kits/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_kits/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_kits/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_kits/reports/filter_with_series.rb, line 51 def inferred_filter_settings { column: column } end
inferred_settings()
click to toggle source
# File lib/reports_kits/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_kits/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(ReportsKits::Reports::FilterTypes::Datetime::SEPARATOR) values = values.map { |value| ReportsKits::Reports::Data::Utils.format_time_value(value) } properties[:criteria][:value] = values.join(ReportsKits::Reports::FilterTypes::Datetime::SEPARATOR) properties end
settings()
click to toggle source
# File lib/reports_kits/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_kits/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