Sha256: 18d7b91ecad1b1f49eb6501734a29039f15d7983e9d466977138c8e32a9b7474

Contents?: true

Size: 1.54 KB

Versions: 18

Compression:

Stored size: 1.54 KB

Contents

module CloudSesame
	module Query
		module DSL
			module LiteralChainingMethods

				# NOT
				# =======================================
				def not(*values)
					parents[1] = { klass: AST::Not, options: extract_options(values) }
				  insert values
				end

				alias_method :is_not, :not

				# NEAR
				# =======================================
				def near(*values)
					parents[0] = { klass: AST::Near, options: extract_options(values) }
				  insert values
				end

				alias_method :sloppy, :near

				# PREFIX
				# =======================================
				def prefix(*values)
				  parents[0] = { klass: AST::Prefix, options: extract_options(values) }
				  insert values
				end

				alias_method :start_with, :prefix
				alias_method :begin_with, :prefix

				def insert(values = [])
					values.each do |value|
						_scope << create_parents(build_literal(value))
					end
					parents.clear unless values.empty?
				  _return != _scope ? _return : self
				end

				private

				def extract_options(values)
					values[-1].is_a?(Hash) ? values.delete_at(-1) : {}
				end

				def create_parents(child)
					parents.compact.each do |parent|
						node = parent[:klass].new _context, parent[:options]
						node << child
						child = node
					end
					child
				end

				def build_literal(value)
					if value.kind_of?(AST::Abstract::SingleExpressionOperator) || value.is_a?(AST::Literal)
						value.is_for field, _context[:fields][field]
						value
					else
						AST::Literal.new field, value, _context[:fields][field]
					end
				end

			end
		end
	end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
CloudSesame-1.0.1 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-1.0.0 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.9.4 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.9.3 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.9.2 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.9.1 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.9.0 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.8.3 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.8.2 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.8.1 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.8.0 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.7.13 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.7.12 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.7.11 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.7.10 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.7.9 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.7.8 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
CloudSesame-0.7.7 lib/cloud_sesame/query/dsl/literal_chaining_methods.rb