class TestdroidAPI::FilterBuilder

Public Class Methods

new() click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 4
def initialize
  @filters = []
end

Public Instance Methods

after(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 79
def after(name, value)
  add(name, value, 'after', 'd', true)
end
before(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 83
def before(name, value)
  add(name, value, 'before', 'd', true)
end
contains(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 95
def contains(name, value)
  add(name, value, 'contains', 's')
end
empty(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 103
def empty(name, value)
  nil # TODO (waiting for BE support)
end
eq(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 91
def eq(name, value)
  add(name, value, 'eq', nil)
end
gt(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 71
def gt(name, value)
  add(name, value, 'gt', 'n')
end
in(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 111
def in(name, value)
  add(name, value, 'in', nil, true)
end
isnull(name, operand) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 107
def isnull(name, operand)
  add(name, nil, 'isnull', operand)
end
like(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 99
def like(name, value)
  nil # TODO (waiting for BE support)
end
lt(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 75
def lt(name, value)
  add(name, value, 'lt', 'n')
end
on(name, value) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 87
def on(name, value)
  add(name, value, 'on', 'd')
end
to_s() click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 116
def to_s
  parts = []
  @filters.each do |filter|
    val = ''
    if filter.value.length > 1 or not filter.value.nil?
      val = '_' + filter.values
    end
    parts.push( filter.to_s + val )
  end
  parts.join(';')
end

Private Instance Methods

add(name, value, operand, type, check_nil=false) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 21
def add(name, value, operand, type, check_nil=false)
  unless value.is_a? Array
    value = [value]
  end

  if value.length == 0
    return self
  end

  # auto-convert
  value.each_with_index do |val, index|
    if val.is_a? Time
      value[index] = val.to_i.to_s
    elsif val.is_a? Fixnum
      value[index] = val.to_s
    end
  end

  # auto-check type
  if type.nil?
    value.each do |val|
      next if val.nil?
      type = check_type(val)
      break
    end

    if operand == 'in'
      type = 'l'+type
    end
  end

  # check nil existence
  if check_nil
    is_nil = false
    value.each do |val|
      next unless val.nil?
      is_nil = true
    end

    if is_nil
      value = value.select { |item| !item.nil? }
      operand += 'ornull'
    end
  end

  # add filter
  @filters.push(FilterItem.new(name, value, operand, type))
end
check_type(subject) click to toggle source
# File lib/testdroid-api-filter-builder.rb, line 9
def check_type(subject)
  if !!subject == subject # check if it's boolean
    return 'b'
  elsif (/^[0-9]{13}$/ =~ subject) != nil  # check if it's timestamp
    return 'd'
  elsif (/^[0-9]+(?:\.[0-9]+)?$/ =~ subject) != nil  # check if it's number
    return 'n'
  else
    return 's'
  end
end