Sha256: 48f9c18b02f0b98190442ede29bb301fa0e36c2ccc1bb2f338f09f28dfdae21b
Contents?: true
Size: 1.44 KB
Versions: 1
Compression:
Stored size: 1.44 KB
Contents
require 'activesupport' class SolrQuery AND = ' AND ' OR = ' OR ' def self.escape( str ) str.to_s.gsub(/([!+\-\(\)\{\}\[\]^\"\~\*\?\:\\])/, '\\\\\1') end def self.create( operator = AND ) solr_query = new yield solr_query solr_query.to_s( operator ) end attr_reader :conditions def initialize @conditions = [] @stream = [ [] ] end def union( &block ) do_operation( OR, &block ) end def intersection( &block ) do_operation( AND, &block ) end def push( condition ) stream.push( condition ) end def stream @stream[-1] end def condition( field, value, escaping = true ) return if value.blank? stream.push("#{field}:#{escape(value, escaping)}") end def term( value, escaping = true ) return if value.to_s.strip.blank? stream.push( escape(value, escaping) ) end def like( value, escaping = true ) "#{escape(value.downcase, escaping)}*" end def to_s( operator = AND ) stream.join( operator ) end protected def parenthesize( str ) "( #{str} )" end def do_operation( op ) solr_query = SolrQuery.new @stream << solr_query yield generated = @stream.pop.to_s( op ) stream.push(parenthesize(generated)) if generated.present? end def escape( str, escaping = true ) if escaping self.class.escape( str ) else str end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cyx-solr_query-0.1.0 | lib/solr_query.rb |