class Querylet::Tree::Filter

Public Instance Methods

_eval(context) click to toggle source
# File lib/querylet/tree.rb, line 94
def _eval(context)
  val = context.get(parameter.item)
  if filter == 'int'
    if val.is_a?(Integer)
      val.to_s
    else
      raise "expected input for: #{parameter.item} to be an Integer"
    end
  elsif filter == 'float'
    if val.is_a?(Float)
      val.to_s
    else
      raise "expected input for: #{parameter.item} to be a Float"
    end
  elsif filter == 'arr'
    if val.is_a?(Array)
      if val.all?{|a| a.class.to_s == 'String' } # to_a? was not working
        "'#{val.join("','")}'"
      elsif val.all?{|a| a.is_a?(Integer) }
        val.join(',')
      elsif val.all?{|a| a.is_a?(Float) }
        val.join(',')
      else
        raise "expected input for: #{parameter.item} to be an Array with all of the same datatype eg String, Integer, Float"
      end
    else
      raise "expected input for: #{parameter.item} to be an Array"
    end
  elsif filter == 'str'
    if val.class.to_s == 'String' # to_a? was not working
      "'#{val}'"
    else
      raise "expected input for: #{parameter.item} to be a String"
    end
  elsif filter == 'wild'
    if val.class.to_s == 'String' || val.is_a?(Integer) || val.is_a?(Float)
      "'%#{val}%'"
    else
      raise "expected input for: #{parameter.item} to be String, Integer or Array"
    end
  end
end