Sha256: 03a472fc055fb2b405e1ebf8a57f14afe3314e2de527ec026247f0dba70d8805
Contents?: true
Size: 1.53 KB
Versions: 2
Compression:
Stored size: 1.53 KB
Contents
module ReportsKit module Reports class Measure attr_accessor :properties, :filters, :context_record def initialize(properties, context_record: nil) properties = { key: properties } if properties.is_a?(String) raise ArgumentError.new("Measure properties must be a String or Hash, not a #{properties.class.name}: #{properties.inspect}") unless properties.is_a?(Hash) properties = properties.deep_symbolize_keys filter_hashes = properties.delete(:filters) || [] filter_hashes = filter_hashes.values if filter_hashes.is_a?(Hash) && filter_hashes.key?(:'0') self.properties = properties self.filters = filter_hashes.map { |filter_hash| Filter.new(filter_hash, measure: self) } self.context_record = context_record end def key properties[:key] end def label key.pluralize.titleize end def aggregate_function :count end def conditions nil end def base_relation return context_record.public_send(key.pluralize) if context_record model_class end def model_class key.camelize.constantize end def filtered_relation relation = base_relation filters.each do |filter| relation = filter.apply(relation) end relation end def properties_with_filters all_properties = properties all_properties[:filters] = filters.map(&:properties) all_properties end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
reports_kit-0.0.2 | lib/reports_kit/reports/measure.rb |
reports_kit-0.0.1 | lib/reports_kit/reports/measure.rb |