class QTest::REST::QueryBuilder

Constants

RESOURCES

Public Class Methods

new(*opts) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 17
def initialize(*opts)
  RESOURCES.each do |resource|
    define_resource(resource)
    define_resources(resource)
  end

  @options = opts

  @path = []
  @body = {}
  @query = {}
  @headers = {}
  @parent = {}
end

Public Instance Methods

body(params = {})
Alias for: data
build() click to toggle source
# File lib/qtest/rest/query_builder.rb, line 90
def build
  unless @options.include?(:without_api_path)
    @path = [QTest::REST::API::BASE_PATH, @path].flatten
  end

  @query.merge!(@parent)
  sanitize_params!
  sanitize_body!
  encode_body!

  {
    path: @path.join('/'),
    query: @query,
    headers: @headers,
    body: @body
  }
end
data(params = {}) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 65
def data(params = {})
  @body.merge!(params)

  self
end
Also aliased as: body
determine_parent!(opts = {}) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 78
def determine_parent!(opts = {})
  if opts[:release]
    parent(release: opts[:release])
  elsif opts[:test_suite]
    parent(test_suite: opts[:test_suite])
  elsif opts[:test_cycle]
    parent(test_cycle: opts[:test_cycle])
  end

  self
end
header(key, value) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 58
def header(key, value)
  key = encode_for_header(key)
  @headers[key] = value

  self
end
options(*opts) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 32
def options(*opts)
  opts.each do |opt|
    @options << opt unless @options.include?(opt)
  end

  self
end
param(key, value) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 72
def param(key, value)
  @query[key.to_s] = value

  self
end
parent(value) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 47
def parent(value)
  key = value.keys[0]
  @parent = {
    'parentType' => key.to_s.dasherize,
    'parentId' => value[key]
  }

  self
end
Also aliased as: under
under(value)
Alias for: parent
with(*paths) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 40
def with(*paths)
  paths.map! { |path| path.to_s.tr('_', '-') }

  @path << paths
  self
end

Private Instance Methods

define_resource(resource) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 110
def define_resource(resource)
  self.class.send(:define_method, resource) do |value|
    value = case value
            when Integer
              value.to_s
            when String
              value
            else
              value.id if value.respond_to?(:id)
            end

    @path << encode_for_path(resource)
    @path << value

    self
  end
end
define_resources(resource) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 128
def define_resources(resource)
  self.class.send(:define_method, resource.to_s.pluralize) do
    @path << encode_for_path(resource)
    self
  end
end
encode_body!() click to toggle source
# File lib/qtest/rest/query_builder.rb, line 147
def encode_body!
  if @options.include?(:json)
    header(:content_type, 'application/json')
    @body = @body.to_json if @options.include?(:json)
  end
end
encode_for_header(key) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 139
def encode_for_header(key)
  key.to_s.titleize.gsub(/\s+/, '-')
end
encode_for_path(resource) click to toggle source
# File lib/qtest/rest/query_builder.rb, line 135
def encode_for_path(resource)
  resource.to_s.pluralize.dasherize
end
sanitize_body!() click to toggle source
# File lib/qtest/rest/query_builder.rb, line 143
def sanitize_body!
  @body.reject! { |_k, v| v.nil? }
end
sanitize_params!() click to toggle source
# File lib/qtest/rest/query_builder.rb, line 154
def sanitize_params!
  @query.reject! { |_k, v| v.nil? }
end