class QueryInterface::Server::LazyQuery

Attributes

model[RW]
result_model[RW]
transformations[RW]

Public Class Methods

new(model, transformations=nil, result_model=nil) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 7
def initialize(model, transformations=nil, result_model=nil)
  self.model = model
  if transformations
    self.transformations = transformations.map {|item| item.dup}
  else
    self.transformations = []
  end
  self.result_model = result_model
end

Public Instance Methods

add_transformation(type, parameter=nil) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 33
def add_transformation(type, parameter=nil)
  self.transformations << {'transformation' => type, 'parameter' => parameter}
end
context(association, model=nil) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 59
def context(association, model=nil)
  self.copy.tap do |query|
    query.result_model = (model ? model : association.to_s.singularize.camelize.constantize)
    query.add_transformation("context", association.to_s)
  end
end
copy(options = {}) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 29
def copy(options = {})
  self.class.new(self.model, self.transformations, self.result_model)
end
count() click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 99
def count
  query = self.copy
  query.add_transformation("count")
  query.do_query[:count]
end
dataset() click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 89
def dataset
  self.do_query(false)
end
do_query(add_default_order=true) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 111
def do_query(add_default_order=true)
  transformer = Transformations::SequelTransformer.new(self.model.filter)
  transformer.run(self.transformations, add_default_order)
end
evaluate() click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 85
def evaluate
  self.do_query
end
exclude(conditions={}) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 37
def exclude(conditions={})
  self.copy.tap do |query|
    conditions.each do |key, value|
      query.add_transformation("exclude", {"field" => key, "value" => value})
    end
  end
end
filter(conditions={}) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 45
def filter(conditions={})
  self.copy.tap do |query|
    conditions.each do |key, value|
      query.add_transformation("filter", {"field" => key, "value" => value})
    end
  end
end
first(*args) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 116
def first(*args)
  one("first", *args)
end
ids() click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 93
def ids
  query = self.copy
  query.add_transformation("map_ids")
  query.do_query
end
instance(id) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 53
def instance(id)
  self.copy.tap do |query|
    query.add_transformation("instance", id)
  end
end
instantiate(data) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 21
def instantiate(data)
  (self.result_model ? self.result_model.new(data) : self.model.new(data))
end
instantiate_collection(parsed_data) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 25
def instantiate_collection(parsed_data)
  (self.result_model ? self.result_model.new_collection(parsed_data) : self.model.new_collection(parsed_data))
end
last(*args) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 120
def last(*args)
  one("last", *args)
end
method_missing(method_name, *args, &block) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 128
def method_missing(method_name, *args, &block)
  evaluate.send(method_name, *args, &block)
end
order(*fields) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 77
def order(*fields)
  self.copy.tap do |query|
    fields.each do |field|
      query.add_transformation("order", field)
    end
  end
end
parse(data) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 17
def parse(data)
  (self.result_model ? self.result_model.parse(data) : self.model.parse(data))
end
to_json(*args) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 124
def to_json(*args)
  evaluate.to_json(*args)
end
update(data) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 105
def update(data)
  query = self.copy
  query.add_transformation("update", data)
  query.do_query[:updated_count]
end
with(*fields, **opts) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 66
def with(*fields, **opts)
  self.copy.tap do |query|
    fields.each do |field|
      query.add_transformation("with", {"field" => field.to_s})
    end
    opts.each do |field, param|
      query.add_transformation("with", {"field" => field.to_s, "param" => param})
    end
  end
end

Protected Instance Methods

one(which, params = {}) click to toggle source
# File lib/query-interface-server/lazy_query.rb, line 133
def one(which, params = {})
  query = self.copy
  query.add_transformation(which)
  query.do_query
end