Sha256: 18163ebc751ff453414fa92c2542a55813531331a498a85fbe3fac29d81281b1

Contents?: true

Size: 1.27 KB

Versions: 16

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module Fusuma
  module Plugin
    module Events
      module Records
        # Vector Record
        # have index
        class IndexRecord < Record
          # define gesture format
          attr_reader :index
          attr_reader :position

          # @param [Config::Index] index
          # @param [Symbol] position [:prefix, :body, :surfix]
          def initialize(index:, position: :body)
            @index = index
            @position = position
          end

          def type
            :index
          end

          # @param records [Array<IndexRecord>]
          # @return [IndexRecord]
          def merge(records:)
            raise "position is NOT body: #{self}" unless mergable?

            @index = records.reduce(@index) do |merged_index, record|
              case record.position
              when :prefix
                Config::Index.new([*record.index.keys, *merged_index.keys])
              when :surfix
                Config::Index.new([*merged_index.keys, *record.index.keys])
              else
                raise "invalid index position: #{record}"
              end
            end
            self
          end

          def mergable?
            @position == :body
          end
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
fusuma-2.0.0.pre lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.11.1 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.10.2 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.10.1 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.10.0 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.9.0 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.8.0 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.7.0 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.6.0 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.5.0 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.4.1 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.4.0 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.3.3 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.3.2 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.3.1 lib/fusuma/plugin/events/records/index_record.rb
fusuma-1.3.0 lib/fusuma/plugin/events/records/index_record.rb