class ReportsKits::Reports::DimensionWithSeries
Constants
- ADAPTER_NAMES_CLASSES
- DEFAULT_GRANULARITY
- VALID_GRANULARITIES
Attributes
configuration[RW]
dimension[RW]
series[RW]
Public Class Methods
new(dimension:, series:)
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 18 def initialize(dimension:, series:) self.dimension = dimension self.series = series self.configuration = InferrableConfiguration.new(self, :dimensions) missing_group_setting = settings && !settings.key?(:group) raise ArgumentError.new("Dimension settings for dimension '#{key}' of #{model_class} must include :group") if missing_group_setting end
Public Instance Methods
adapter()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 118 def adapter @adapter ||= begin adapter_name = model_class.connection_config[:adapter] adapter = ADAPTER_NAMES_CLASSES[adapter_name] raise ArgumentError.new("Unsupported adapter: #{adapter_name}") unless adapter adapter end end
column_expression()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 127 def column_expression "#{model_class.table_name}.#{key}" end
datetime_filters()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 109 def datetime_filters return [] unless series.filters.present? series.filters.map(&:filter_type).select { |filter_type| filter_type.is_a?(FilterTypes::Datetime) } end
day_expression()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 131 def day_expression adapter.truncate_to_day(column_expression) end
dimension_instances_limit()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 86 def dimension_instances_limit if configured_by_time? properties[:limit] else properties[:limit] || ReportsKits.configuration.default_dimension_limit end end
first_key()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 94 def first_key return unless configured_by_time? && datetime_filters.present? datetime_filters.map(&:start_at).compact.sort.first end
granularity()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 26 def granularity @granularity ||= begin return unless configured_by_time? granularity = properties[:granularity] || DEFAULT_GRANULARITY raise ArgumentError.new("Invalid granularity: #{granularity}") unless VALID_GRANULARITIES.include?(granularity) granularity end end
group_expression()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 49 def group_expression if configured_by_model? settings_from_model[:group] elsif configured_by_association? inferred_settings_from_association[:column] elsif configured_by_column? && configured_by_time? case granularity when 'day' then day_expression when 'month' then month_expression else week_expression end elsif configured_by_column? column_expression else raise ArgumentError.new('Invalid group_expression') end end
inferred_dimension_settings()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 43 def inferred_dimension_settings { group: group_expression } end
inferred_settings()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 39 def inferred_settings configuration.inferred_settings.merge(inferred_dimension_settings) end
inferred_settings_from_association()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 67 def inferred_settings_from_association through_reflection = reflection.through_reflection if through_reflection { joins: through_reflection.name, column: "#{through_reflection.table_name}.#{reflection.source_reflection.foreign_key}" } else { column: "#{model_class.table_name}.#{reflection.foreign_key}" } end end
joins()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 81 def joins return settings_from_model[:joins] if configured_by_model? inferred_settings_from_association[:joins] if configured_by_association? end
key_to_label(key)
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 104 def key_to_label(key) return unless settings[:key_to_label] settings[:key_to_label].call(key) end
last_key()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 99 def last_key return unless configured_by_time? && datetime_filters.present? datetime_filters.map(&:end_at).compact.sort.last end
month_expression()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 139 def month_expression adapter.truncate_to_month(column_expression) end
settings()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 35 def settings inferred_settings.merge(settings_from_model) end
should_be_sorted_by_count?()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 114 def should_be_sorted_by_count? !configured_by_time? end
week_expression()
click to toggle source
# File lib/reports_kits/reports/dimension_with_series.rb, line 135 def week_expression adapter.truncate_to_week(column_expression) end