Class: ReportsKit::Reports::Data::Utils
- Inherits:
-
Object
- Object
- ReportsKit::Reports::Data::Utils
- Defined in:
- lib/reports_kit/reports/data/utils.rb
Class Method Summary collapse
- .arrays_values_to_nested_hash(arrays_values) ⇒ Object
- .dimension_key_to_entity(dimension_key, dimension, dimension_ids_dimension_instances) ⇒ Object
- .dimension_key_to_label(dimension_instance, dimension, ids_dimension_instances) ⇒ Object
- .dimension_to_dimension_ids_dimension_instances(dimension, dimension_ids) ⇒ Object
- .format_configuration_time(time) ⇒ Object
- .format_csv_time(time) ⇒ Object
- .format_display_time(time) ⇒ Object
- .format_number(number) ⇒ Object
- .format_time_value(value) ⇒ Object
- .nested_hash_to_arrays_values(nested_hash) ⇒ Object
- .parse_date_string(string) ⇒ Object
- .populate_sparse_hash(hash, dimension:) ⇒ Object
- .populate_sparse_keys(keys, dimension:) ⇒ Object
- .quote_column_name(string) ⇒ Object
- .raw_value_to_value(raw_value, value_format_method) ⇒ Object
Class Method Details
.arrays_values_to_nested_hash(arrays_values) ⇒ Object
89 90 91 92 93 94 95 96 |
# File 'lib/reports_kit/reports/data/utils.rb', line 89 def self.arrays_values_to_nested_hash(arrays_values) nested_hash = {} arrays_values.each do |(key1, key2), value| nested_hash[key1] ||= {} nested_hash[key1][key2] ||= value end nested_hash end |
.dimension_key_to_entity(dimension_key, dimension, dimension_ids_dimension_instances) ⇒ Object
121 122 123 124 125 |
# File 'lib/reports_kit/reports/data/utils.rb', line 121 def self.dimension_key_to_entity(dimension_key, dimension, dimension_ids_dimension_instances) instance = dimension_ids_dimension_instances ? dimension_ids_dimension_instances[dimension_key] : dimension_key label = dimension_key_to_label(dimension_key, dimension, dimension_ids_dimension_instances) Entity.new(dimension_key, label, instance) end |
.dimension_key_to_label(dimension_instance, dimension, ids_dimension_instances) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/reports_kit/reports/data/utils.rb', line 127 def self.dimension_key_to_label(dimension_instance, dimension, ids_dimension_instances) label = dimension.key_to_label(dimension_instance) return label if label return dimension_instance.to_s if dimension.configured_by_column? && dimension.column_type == :integer case dimension_instance when Time, Date Utils.format_display_time(dimension_instance) when Fixnum raise ArgumentError.new("ids_dimension_instances must be present for Dimension with identifier: #{dimension_instance}") unless ids_dimension_instances instance = ids_dimension_instances[dimension_instance.to_i] return unless instance instance.to_s else dimension_instance.to_s.gsub(/\.0$/, '') end end |
.dimension_to_dimension_ids_dimension_instances(dimension, dimension_ids) ⇒ Object
112 113 114 115 116 117 118 119 |
# File 'lib/reports_kit/reports/data/utils.rb', line 112 def self.dimension_to_dimension_ids_dimension_instances(dimension, dimension_ids) return nil unless dimension.instance_class dimension_instances = dimension.instance_class.where(id: dimension_ids.uniq) dimension_ids_dimension_instances = dimension_instances.map do |dimension_instance| [dimension_instance.id, dimension_instance] end Hash[dimension_ids_dimension_instances] end |
.format_configuration_time(time) ⇒ Object
5 6 7 |
# File 'lib/reports_kit/reports/data/utils.rb', line 5 def self.format_configuration_time(time) time.strftime('%b %-d, %Y') end |
.format_csv_time(time) ⇒ Object
9 10 11 |
# File 'lib/reports_kit/reports/data/utils.rb', line 9 def self.format_csv_time(time) time.strftime('%Y-%m-%d') end |
.format_display_time(time) ⇒ Object
13 14 15 |
# File 'lib/reports_kit/reports/data/utils.rb', line 13 def self.format_display_time(time) time.strftime('%b %-d, \'%y') end |
.format_number(number) ⇒ Object
23 24 25 26 27 |
# File 'lib/reports_kit/reports/data/utils.rb', line 23 def self.format_number(number) number_i = number.to_i return number_i if number == number_i number.round(Generate::ROUND_PRECISION) end |
.format_time_value(value) ⇒ Object
17 18 19 20 21 |
# File 'lib/reports_kit/reports/data/utils.rb', line 17 def self.format_time_value(value) time = RelativeTime.parse(value, prevent_exceptions: true) return value unless time Utils.format_configuration_time(time) end |
.nested_hash_to_arrays_values(nested_hash) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/reports_kit/reports/data/utils.rb', line 98 def self.nested_hash_to_arrays_values(nested_hash) arrays_values = {} nested_hash.each do |key1, key2s_values| if key2s_values.blank? arrays_values[[key1, nil]] = 0 next end key2s_values.each do |key2, value| arrays_values[[key1, key2]] = value end end arrays_values end |
.parse_date_string(string) ⇒ Object
33 34 35 36 37 |
# File 'lib/reports_kit/reports/data/utils.rb', line 33 def self.parse_date_string(string) Date.parse(string) rescue ArgumentError RelativeTime.parse(string) end |
.populate_sparse_hash(hash, dimension:) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/reports_kit/reports/data/utils.rb', line 39 def self.populate_sparse_hash(hash, dimension:) keys = hash.keys is_nested = dimension.series.has_two_dimensions? if is_nested keys_values = arrays_values_to_nested_hash(hash) keys = keys_values.keys else keys_values = hash end first_key = dimension.first_key || keys.first return hash unless first_key.is_a?(Time) || first_key.is_a?(Date) keys_values = keys_values.map do |key, value| key = key.to_date if key.is_a?(Time) [key, value] end.to_h keys = populate_sparse_keys(keys, dimension: dimension) populated_keys_values = {} default_value = is_nested ? {} : 0 keys.each do |key| populated_keys_values[key] = keys_values[key] || default_value end return nested_hash_to_arrays_values(populated_keys_values) if is_nested populated_keys_values end |
.populate_sparse_keys(keys, dimension:) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/reports_kit/reports/data/utils.rb', line 66 def self.populate_sparse_keys(keys, dimension:) first_key = dimension.first_key || keys.first return keys unless first_key.is_a?(Time) || first_key.is_a?(Date) first_key = first_key.to_date granularity = dimension.granularity first_key = first_key.beginning_of_week(ReportsKit.configuration.first_day_of_week) if granularity == 'week' keys = keys.sort last_key = (dimension.last_key || keys.last).to_date last_key = last_key.beginning_of_week(ReportsKit.configuration.first_day_of_week) if granularity == 'week' last_key ||= Date.today.beginning_of_week(ReportsKit.configuration.first_day_of_week) if granularity == 'week' date = first_key populated_keys = [] interval = granularity == 'week' ? 1.week : 1.day loop do populated_keys << date break if date >= last_key date += interval end populated_keys end |
.quote_column_name(string) ⇒ Object
29 30 31 |
# File 'lib/reports_kit/reports/data/utils.rb', line 29 def self.quote_column_name(string) ActiveRecord::Base.connection.quote_column_name(string) end |
.raw_value_to_value(raw_value, value_format_method) ⇒ Object
144 145 146 147 148 |
# File 'lib/reports_kit/reports/data/utils.rb', line 144 def self.raw_value_to_value(raw_value, value_format_method) formatted_value = format_number(raw_value) formatted_value = value_format_method.call(raw_value) if value_format_method Value.new(raw_value, formatted_value) end |