module PostJson::QueryMethods
Public Instance Methods
add_query(method, *arguments)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 25 def add_query(method, *arguments) query_tree[method] = (query_tree[method] || []) + arguments self end
except(*attributes)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 36 def except(*attributes) query_clone.except!(*attributes) end
except!(*attributes)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 30 def except!(*attributes) remove_keys = flatten_arguments(attributes).map(&:to_sym) query_tree.except!(*remove_keys) self end
limit(value)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 44 def limit(value) query_clone.limit!(value) end
limit!(value)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 40 def limit!(value) except!(:limit).add_query(:limit, value.to_i) end
offset(value)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 52 def offset(value) query_clone.offset!(value) end
offset!(value)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 48 def offset!(value) except!(:offset).add_query(:offset, value.to_i) end
only(*attributes)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 72 def only(*attributes) query_clone.only!(*attributes) end
only!(*attributes)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 66 def only!(*attributes) keep_keys = flatten_arguments(attributes).map(&:to_sym) query_tree.keep_if{|key| key.in?(keep_keys)} self end
order(*args)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 95 def order(*args) query_clone.order!(*args) end
order!(*args)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 76 def order!(*args) if 0 < args.length flatten_arguments(args).each do |arg| name, direction = arg.split(' ') direction = direction.to_s.upcase direction = "ASC" unless direction.present? if direction.in?(["ASC", "DESC"]) == false raise ArgumentError, "Direction should be 'asc' or 'desc'" end add_query(:order, "#{name} #{direction}") end end self end
page(page, per_page)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 62 def page(page, per_page) query_clone.page!(page, per_page) end
page!(page, per_page)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 56 def page!(page, per_page) page_int = page.to_i per_page_int = per_page.to_i offset!((page_int-1)*per_page_int).limit!(per_page_int) end
query_clone()
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 19 def query_clone cloned_self = clone cloned_self.query_tree_renew! cloned_self end
query_tree()
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 11 def query_tree @query_tree ||= {} end
query_tree_renew!()
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 15 def query_tree_renew! @query_tree = @query_tree.deep_dup end
reorder(*args)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 103 def reorder(*args) query_clone.reorder!(*args) end
reorder!(*args)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 99 def reorder!(*args) except!(:order).order!(*args) end
reverse_order()
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 123 def reverse_order query_clone.reverse_order! end
Also aliased as: reverse
reverse_order!()
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 107 def reverse_order! current_order = query_tree.delete(:order) if current_order.present? current_order.each do |arg| name, direction = arg.split(' ') reverse_direction = direction == "DESC" ? "ASC" : "DESC" order!("#{name} #{reverse_direction}") end self else order!("id DESC") end end
Also aliased as: reverse!
where(filter = :none, *options)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 153 def where(filter = :none, *options) query_clone.where!(filter, *options) end
where!(opts = :chain, *rest)
click to toggle source
# File lib/post_json/concerns/query_methods.rb, line 129 def where!(opts = :chain, *rest) if opts == :chain || opts.blank? self else case opts when String if opts.start_with?("function") add_query(:where_function, {function: opts, arguments: rest}) else add_query(:where_forward, [opts] + rest) end when Array add_query(:where_forward, [opts] + rest) when Hash opts.stringify_keys.flatten_hash.each do |attribute, value| add_query(:where_equal, {attribute: attribute, argument: value}) end else add_query(:where_forward, [opts] + rest) end self end end