class Roaster::Query
Query
represents the operation performed on the target, and its parameters
Constants
- DEFAULT_PAGE_SIZE
TODO: Move in config class
- OPERATIONS
Attributes
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
TODO: This is not validating includes it seems (HARD VALIDATE EVERYTHING, raise is your FRIEND)
Public Class Methods
# File lib/roaster/query.rb, line 33 def initialize(operation, target, mapping, params = {}) raise "Invalid operation: #{operation}" unless OPERATIONS.include?(operation) params.symbolize_keys! if params.respond_to?(:symbolize_keys!) @operation = operation @target = target @page = params[:page] ? params[:page].to_i : 1 @page_size = params[:page_size] ? params[:page_size].to_i : DEFAULT_PAGE_SIZE @includes = includes_from_params(params, mapping) @fields = fields_from_params(params, mapping) @filters = filters_from_params(params, mapping) @sorting = sorting_from_params(params, mapping) #VALIDATE THIS (TARGET) ! omgz =D @mapping = mapping end
Public Instance Methods
# File lib/roaster/query.rb, line 49 def default_page_size? @page_size == DEFAULT_PAGE_SIZE end
# File lib/roaster/query.rb, line 53 def filters_as_url_params @filters.sort.map { |k,v| map_filter_ids(k,v) }.join('&') end
# File lib/roaster/query.rb, line 57 def sorting_as_url_params sorting_values = sorting.map { |k, v| v == :asc ? k : "-#{k}" }.join(',') "sort=#{sorting_values}" end
Private Instance Methods
# File lib/roaster/query.rb, line 78 def fields_from_params(params, mapping) return {} if params[:fields].blank? if params[:fields].class == Hash Hash[params[:fields].collect do |resource_name, fieldset| [resource_name.downcase.to_sym, parse_fieldset(fieldset)] end ] else {@target.resource_name => parse_fieldset(params[:fields])} end end
# File lib/roaster/query.rb, line 90 def filters_from_params(params, mapping) filters = {} mapping.filterable_attributes.each do |filter| filters[filter] = params[filter] if params[filter] end filters end
# File lib/roaster/query.rb, line 64 def includes_from_params(params, mapping) return [] unless params[:include] && params[:include].respond_to?(:split) includes = params[:include].split(',').map(&:to_sym) includes.select do |i| mapping.includeable_attributes.include?(i) end end
# File lib/roaster/query.rb, line 124 def map_filter_ids(key,value) case value when Hash value.map { |k,v| map_filter_ids(k,v) } else "#{key}=#{value.join(',')}" end end
# File lib/roaster/query.rb, line 72 def parse_fieldset(fields) fields.to_s.split(',').collect do |field| field.downcase.to_sym end end
# File lib/roaster/query.rb, line 98 def parse_sort_criteria(criteria) sorting_parameters = {} criteria.to_s.split(',').each do |sort_value| sort_order = sort_value[0] == '-' ? :desc : :asc sort_value = sort_value.gsub(/\A\-/, '').downcase.to_sym sorting_parameters[sort_value] = sort_order end sorting_parameters end
# File lib/roaster/query.rb, line 133 def query_to_array(value) case value when String value.split(',') when Hash value.each { |k, v| value[k] = query_to_array(v) } else value end end
# File lib/roaster/query.rb, line 111 def sorting_from_params(params, mapping) return {} if params[:sort].blank? || mapping.sortable_attributes.blank? if params[:sort].class == Hash sorting_parameters = {} params[:sort].each do |sorting_resource| sorting_parameters[sorting_resource[0].to_sym] = parse_sort_criteria sorting_resource[1] end sorting_parameters else {@target.resource_name => parse_sort_criteria(params[:sort])} end end
# File lib/roaster/query.rb, line 108 def validate_sorting_parameters(sort, mapping) end