Sha256: 35fb2a1327da1079934471f4f5d6b71ce2fba0029d5799407086e9f9f5cccba3

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 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,
						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].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

2 entries across 2 versions & 1 rubygems

Version Path
CloudSesame-0.2.0 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.1.6 lib/cloud_sesame/query/node/request.rb