Sha256: 3c0eb64e3520ca91e2c6b4d9adcb5242818a495f0fd27a0531bad54bd78893fa

Contents?: true

Size: 1.57 KB

Versions: 14

Compression:

Stored size: 1.57 KB

Contents

module CloudSesame
	module Query
		module Node
			class Request < Abstract

				# CHILDREN
				# =========================================

				def query
					@query ||= Query.new(context[:query, true])
				end

				def query_options
					@query_options ||= QueryOptions.new(context[:query_options, true])
				end

				def query_parser
					@query_parser ||= QueryParser.new(context[:query_parser, true])
				end

				def filter_query
					@filter_query ||= FilterQuery.new(context[:filter_query, true])
				end

				def facet
					@facet ||= Facet.new(context[:facet, true])
				end

				def page
					@page ||= Page.new(context[:page, true])
				end

				def sort
					@sort ||= Sort.new(context[:sort, true])
				end

				def return_field
					@return ||= Return.new(context[:return, true])
				end

				# EVALUATION
				# =========================================

				def compile
					compiled = [
						query,
						query_options,
						query_parser,
						filter_query,
						facet,
						page,
						sort,
						return_field
					].each_with_object({}) do |node, compiled|
						compiled.merge!(node.compile || {})
					end

					if compiled[:filter_query].empty?
						compiled.delete(:filter_query)
					elsif compiled[:query].nil? || compiled[:query].empty?
						convert_to_structured_query(compiled)
					end

					compiled
				end

				private

				def convert_to_structured_query(compiled)
					replace(compiled, :query, :filter_query).merge! query_parser.structured.compile
				end

				def replace(hash, key1, key2)
					hash[key1] = hash.delete key2
					hash
				end

			end
		end
	end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
CloudSesame-0.4.2 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.4.1 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.4.0 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.3.6 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.3.5 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.3.4 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.3.3 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.3.2 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.3.1 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.3.0 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.2.5 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.2.4 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.2.3 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.2.2 lib/cloud_sesame/query/node/request.rb