# File lib/jsonapi/consumer/query/builder.rb, line 118 def primary_key_params return {} unless @primary_key @primary_key.is_a?(Array) ? {klass.primary_key.to_s.pluralize.to_sym => @primary_key.join(",")} : {klass.primary_key => @primary_key} end
class JSONAPI::Consumer::Query::Builder
Attributes
klass[R]
requestor[R]
Public Class Methods
new(klass, requestor = nil)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 8 def initialize(klass, requestor = nil) @klass = klass @requestor = requestor || klass.requestor @primary_key = nil @pagination_params = {} @path_params = {} @additional_params = {} @filters = {} @includes = [] @orders = [] @fields = [] end
Public Instance Methods
build()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 73 def build klass.new(params) end
find(args = {})
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 93 def find(args = {}) case args when Hash where(args) else @primary_key = args end requestor.get(params) end
first()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 65 def first paginate(page: 1, per_page: 1).to_a.first end
includes(*tables)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 33 def includes(*tables) @includes += parse_related_links(*tables) self end
last()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 69 def last paginate(page: 1, per_page: 1).pages.last.to_a.last end
method_missing(method_name, *args, &block)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 104 def method_missing(method_name, *args, &block) to_a.send(method_name, *args, &block) end
order(*args)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 28 def order(*args) @orders += parse_orders(*args) self end
page(number)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 50 def page(number) @pagination_params[ klass.paginator.page_param ] = number self end
paginate(conditions = {})
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 43 def paginate(conditions = {}) scope = self scope = scope.page(conditions[:page]) if conditions[:page] scope = scope.per(conditions[:per_page]) if conditions[:per_page] scope end
params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 77 def params filter_params .merge(pagination_params) .merge(includes_params) .merge(order_params) .merge(select_params) .merge(primary_key_params) .merge(path_params) .merge(additional_params) end
per(size)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 55 def per(size) @pagination_params[ klass.paginator.per_page_param ] = size self end
select(*fields)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 38 def select(*fields) @fields += parse_fields(*fields) self end
to_a()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 88 def to_a @to_a ||= find end
Also aliased as: all
where(conditions = {})
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 21 def where(conditions = {}) # pull out any path params here @path_params.merge!(conditions.slice(*klass.prefix_params)) @filters.merge!(conditions.except(*klass.prefix_params)) self end
with_params(more_params)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 60 def with_params(more_params) @additional_params.merge!(more_params) self end
Private Instance Methods
additional_params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 114 def additional_params @additional_params end
filter_params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 134 def filter_params @filters.empty? ? {} : {filter: @filters} end
includes_params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 130 def includes_params @includes.empty? ? {} : {include: @includes.join(",")} end
order_params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 138 def order_params @orders.empty? ? {} : {sort: @orders.join(",")} end
pagination_params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 126 def pagination_params @pagination_params.empty? ? {} : {page: @pagination_params} end
parse_fields(*fields)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 195 def parse_fields(*fields) fields = fields.split(',') if fields.is_a? String fields.map do |field| case field when Hash field.each do |k,v| field[k] = parse_fields(v) end field else Array(field).flatten.map { |i| i.to_s.split(",") }.flatten.map(&:strip) end end.flatten end
parse_orders(*args)
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 181 def parse_orders(*args) args.map do |arg| case arg when Hash arg.map do |k, v| operator = (v == :desc ? "-" : "") "#{operator}#{k}" end else "#{arg}" end end.flatten end
path_params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 110 def path_params @path_params.empty? ? {} : {path: @path_params} end
primary_key_params()
click to toggle source
select_params()
click to toggle source
# File lib/jsonapi/consumer/query/builder.rb, line 142 def select_params if @fields.empty? {} else field_result = Hash.new { |h,k| h[k] = [] } @fields.each do |field| if field.is_a? Hash field.each do |k,v| field_result[k.to_s] << v field_result[k.to_s] = field_result[k.to_s].flatten end else field_result[klass.table_name] << field end end field_result.each { |k,v| field_result[k] = v.join(',') } {fields: field_result} end end