Sha256: 167ebebd4bb64d70550b82b8fe37d5100b359680d3538239dda6b04cf3223f1d

Contents?: true

Size: 1.49 KB

Versions: 11

Compression:

Stored size: 1.49 KB

Contents

module Martyr
  module Runtime
    class PlainDimensionMemorySlice

      include Martyr::Runtime::HasScopedLevels

      attr_reader :dimension_definition, :data_slice, :levels
      delegate :keys, to: :levels

      # @param dimension_definition [PlainDimensionDefinition]
      # @option data_slice [PlainDimensionDataSlice, nil] data slice from sub cube if exists
      def initialize(dimension_definition, data_slice = nil)
        @dimension_definition = dimension_definition
        @data_slice = data_slice
        @levels = {}
      end

      def to_hash
        arr = scoped_levels.values.sort_by{|slice| slice.level.to_i}.inject({}){|h, slice| h.merge!(slice.to_hash) }
        Hash[arr]
      end

      def set_slice(level, **options)
        new_slice_definition = PlainDimensionLevelSliceDefinition.new(level: level, **options)
        if data_slice.try(:get_slice, level.id).blank?
          @levels[level.id] = new_slice_definition
        else
          @levels[level.id] = new_slice_definition.merge(data_slice.get_slice(level.id))
        end
      end

      # @return [PlainDimensionLevelSliceDefinition]
      def get_slice(level_id)
        scoped_levels[level_id]
      end

      def apply_on(facts)
        scoped_levels.keys.inject(facts) do |selected_facts, level_id|
          whitelist_arr = get_slice(level_id).with.map(&:to_s)
          selected_facts.select do |fact|
            whitelist_arr.include? fact.fact_key_for(level_id).to_s
          end
        end
      end

    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
martyr-0.1.85.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.84.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.82.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.81.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.80.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.79.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.78.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.77.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.76.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.75.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb
martyr-0.1.74.pre lib/martyr/runtime/slices/memory_slices/plain_dimension_memory_slice.rb