Sha256: 51d8c7d039ac0e96c4244ae97dfc7e895d5d9514043e27c42e41cbedc1016687

Contents?: true

Size: 1.68 KB

Versions: 2

Compression:

Stored size: 1.68 KB

Contents

# frozen_string_literal: true

# Index for searching value from config.yml
module Fusuma
  class Config
    # index for config.yml
    class Index
      def initialize(keys)
        @keys = case keys
        when Array
          keys.map do |key|
            if key.is_a? Key
              key
            else
              Key.new(key)
            end
          end
        else
          [Key.new(keys)]
        end
      end

      def inspect
        @keys.map(&:inspect)
      end

      attr_reader :keys

      def cache_key
        case @keys
        when Array
          @keys.map(&:symbol).join(",")
        when Key
          @keys.symbol
        else
          raise "invalid keys"
        end
      end

      # @return [Index]
      def with_context
        keys = @keys.map do |key|
          next if Searcher.skip? && key.skippable

          if Searcher.fallback? && key.fallback
            key.fallback
          else
            key
          end
        end
        self.class.new(keys.compact)
      end

      # Keys in Index
      class Key
        def initialize(symbol_word, skippable: false, fallback: nil)
          @symbol = begin
            symbol_word.to_sym
          rescue
            symbol_word
          end

          @skippable = skippable

          @fallback = begin
            fallback.to_sym
          rescue
            fallback
          end
        end

        def inspect
          skip_marker = @skippable && Searcher.skip? ? "(skip)" : ""
          fallback_marker = @fallback && Searcher.fallback? ? "(fallback)" : ""
          "#{@symbol}#{skip_marker}#{fallback_marker}"
        end

        attr_reader :symbol, :skippable, :fallback
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fusuma-2.5.1 lib/fusuma/config/index.rb
fusuma-2.5.0 lib/fusuma/config/index.rb