Sha256: 31726a7406bf87754928793a13bc7f8eb974ca8ba490552dd36a05ba019e77e6

Contents?: true

Size: 1.58 KB

Versions: 15

Compression:

Stored size: 1.58 KB

Contents

module CloudSesame
	module Query
		module Node
			class Request < Abstract

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

				def query
					@query ||= Query.new(context[:query] ||= {})
				end

				def query_options
					@query_options ||= QueryOptions.new(context[:query_options] ||= {})
				end

				def query_parser
					@query_parser ||= QueryParser.new(context[:query_parser] ||= {})
				end

				def filter_query
					@filter_query ||= FilterQuery.new(context[:filter_query] ||= {})
				end

				def facet
					@facet ||= Facet.new(context[:facet] ||= {})
				end

				def page
					@page ||= Page.new(context[:page] ||= {})
				end

				def sort
					@sort ||= Sort.new(context[:sort] ||= {})
				end

				def return_field
					@return ||= Return.new(context[:return] ||= {})
				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

15 entries across 15 versions & 1 rubygems

Version Path
CloudSesame-0.6.4 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.6.3 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.6.2 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.6.1 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.6.0 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.5.5 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.5.4 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.5.3 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.5.2 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.5.1 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.5.0 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.4.6 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.4.5 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.4.4 lib/cloud_sesame/query/node/request.rb
CloudSesame-0.4.3 lib/cloud_sesame/query/node/request.rb