class Bodhi::Query

Attributes

context[R]
controller[R]
criteria[R]
fields[R]
klass[R]
paging[R]
sorting[R]
url[R]

Public Class Methods

new(klass, controller="resources") click to toggle source
# File lib/bodhi-slam/queries.rb, line 5
def initialize(klass, controller="resources")
  @controller = controller
  @klass = Object.const_get(klass.to_s)
  @criteria = {}
  @fields = []
  @paging = {}
  @sorting = {}
end

Public Instance Methods

all() click to toggle source
# File lib/bodhi-slam/queries.rb, line 116
def all
  if context.nil?
    raise ArgumentError.new("a Bodhi::Context is required to query the API")
  end

  if context.invalid?
    raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
  end

  result = context.connection.get do |request|
    request.url self.url
    request.headers[context.credentials_header] = context.credentials
  end

  if result.status != 200
    raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
  end

  result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }
end
and(query)
Alias for: where
clear!() click to toggle source
# File lib/bodhi-slam/queries.rb, line 14
def clear!
  @context = nil
  @criteria = {}
  @fields.clear
  @paging.clear
  @sorting.clear
end
count() click to toggle source
# File lib/bodhi-slam/queries.rb, line 74
def count
  if context.nil?
    raise ArgumentError.new("a Bodhi::Context is required to query the API")
  end

  if context.invalid?
    raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
  end

  result = context.connection.get do |request|
    request.url self.url.gsub(klass.name, "#{klass}/count")
    request.headers[context.credentials_header] = context.credentials
  end

  if result.status != 200
    raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
  end

  result.body["count"]
end
delete() click to toggle source
# File lib/bodhi-slam/queries.rb, line 95
def delete
  if context.nil?
    raise ArgumentError.new("a Bodhi::Context is required to query the API")
  end

  if context.invalid?
    raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
  end

  result = context.connection.delete do |request|
    request.url self.url
    request.headers[context.credentials_header] = context.credentials
  end

  if result.status != 200
    raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
  end

  result.body
end
first() click to toggle source
# File lib/bodhi-slam/queries.rb, line 137
def first
  if context.nil?
    raise ArgumentError.new("a Bodhi::Context is required to query the API")
  end

  if context.invalid?
    raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
  end

  result = context.connection.get do |request|
    request.url self.url
    request.headers[context.credentials_header] = context.credentials
  end

  if result.status != 200
    raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
  end

  result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }.first
end
from(context) click to toggle source
# File lib/bodhi-slam/queries.rb, line 179
def from(context)
  unless context.is_a? Bodhi::Context
    raise ArgumentError.new("Expected Bodhi::Context but received #{context.class}")
  end

  @context = context
  self
end
last() click to toggle source
# File lib/bodhi-slam/queries.rb, line 158
def last
  if context.nil?
    raise ArgumentError.new("a Bodhi::Context is required to query the API")
  end

  if context.invalid?
    raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
  end

  result = context.connection.get do |request|
    request.url self.url
    request.headers[context.credentials_header] = context.credentials
  end

  if result.status != 200
    raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
  end

  result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }.last
end
limit(number) click to toggle source
# File lib/bodhi-slam/queries.rb, line 213
def limit(number)
  unless number.is_a? Integer
    raise ArgumentError.new("Expected Integer but received #{number.class}")
  end

  unless number <= 100
    raise ArgumentError.new("Expected limit to be less than or equal to 100 but received #{number}")
  end

  @paging[:limit] = number
  self
end
page(number) click to toggle source
# File lib/bodhi-slam/queries.rb, line 226
def page(number)
  unless number.is_a? Integer
    raise ArgumentError.new("Expected Integer but received #{number.class}")
  end

  @paging[:page] = number
  self
end
select(field_names) click to toggle source
# File lib/bodhi-slam/queries.rb, line 201
def select(field_names)
  unless field_names.is_a? String
    raise ArgumentError.new("Expected String but received #{field_names.class}")
  end

  fields_array = field_names.split(',')
  @fields << fields_array
  @fields.flatten!
  @fields.uniq!
  self
end
sort(field, order=nil) click to toggle source
# File lib/bodhi-slam/queries.rb, line 235
def sort(field, order=nil)
  unless field.is_a? String
    raise ArgumentError.new("Expected String but received #{field.class}")
  end

  unless order.nil?
    @sorting[:order] = order
  end

  @sorting[:field] = field
  self
end
where(query) click to toggle source
# File lib/bodhi-slam/queries.rb, line 188
def where(query)
  if query.is_a?(String)
    json = JSON.parse(query)
    query = Bodhi::Support.symbolize_keys(json)
  else
    query = Bodhi::Support.symbolize_keys(query)
  end

  @criteria.merge!(query)
  self
end
Also aliased as: and