Sha256: 278a7d6c32f8f42104f053d8b0044f96459e65914e6a1c81264e7a250223d553

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

# frozen_string_literal: true

module Gamefic
  module Query
    # A special query that handles text instead of entities.
    #
    class Text
      # @param argument [String, Regexp]
      def initialize argument = /.*/
        @argument = argument
        validate
      end

      # @return [String, Regexp]
      def select(_subject)
        @argument
      end

      def query _subject, token
        if match? token
          Result.new(token, '')
        else
          Result.new(nil, token)
        end
      end

      def precision
        0
      end

      def accept? _subject, argument
        match? argument
      end

      def ambiguous?
        true
      end

      private

      def match? token
        return false unless token.is_a?(String)

        case @argument
        when Regexp
          token =~ @argument
        else
          token == @argument
        end
      end

      def validate
        return if @argument.is_a?(String) || @argument.is_a?(Regexp)

        raise ArgumentError, 'Invalid text query argument'
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gamefic-3.4.0 lib/gamefic/query/text.rb
gamefic-3.3.0 lib/gamefic/query/text.rb