Sha256: d7b5ed7bce3cff5192c6d55143283f409685a4ec4564ff8c417eb643617c70b8

Contents?: true

Size: 1000 Bytes

Versions: 6

Compression:

Stored size: 1000 Bytes

Contents

require 'togostanza/stanza/search_query'

class TogoStanza::NoSearchDeclarationError < StandardError; end

module TogoStanza::Stanza
  module TextSearch
    extend ActiveSupport::Concern

    def text_search_filter(var_name, query)
      query.to_filter(TogoStanza.text_search_method, var_name)
    end

    def text_search(input)
      raise TogoStanza::NoSearchDeclarationError unless self.class.method_defined?(:search_declarations)

      query = SearchQuery.new(input)

      return [] if query.tokens.empty?

      search_declarations.each_value.flat_map {|block|
        instance_exec(query, &block)
      }
    end

    module ClassMethods
      def search(symbol, &block)
        unless method_defined?(:search_declarations)
          # テキスト検索宣言の初期化
          instance_eval do
            class_attribute :search_declarations
            self.search_declarations = {}
          end
        end

        search_declarations[symbol] = block
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
togostanza-1.3.1 lib/togostanza/stanza/text_search.rb
togostanza-1.3.0 lib/togostanza/stanza/text_search.rb
togostanza-1.2.2 lib/togostanza/stanza/text_search.rb
togostanza-1.2.1 lib/togostanza/stanza/text_search.rb
togostanza-1.2.0 lib/togostanza/stanza/text_search.rb
togostanza-1.1.0 lib/togostanza/stanza/text_search.rb