class SqlQueryExecutor::Operators::Base

Public Class Methods

new(query) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 6
def initialize(query)
  @query = query
end

Public Instance Methods

logic(is_hash=false) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 15
def logic(is_hash=false)
  initialize_attributes(true)

  field = field(is_hash)
  value = @value || 'nil'

  if value.is_a?(String) && is_a_number?(value.gsub(/[\"|\']/, ''))
    "#{field} #{@operator} (#{field}.is_a?(Fixnum) ? #{value}.to_i : #{value})"
  else
    "#{field} #{@operator} #{value}"
  end
end
selector() click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 10
def selector
  initialize_attributes
  { @field => @value }
end

Protected Instance Methods

convert_value(value, logic=false) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 53
def convert_value(value, logic=false)
  real_value = value.dup
  value.gsub!(/[\(\)\'\"]/, "")

  methods = {3 => "convert_date", 7 => "convert_time"}

  array = split(value)

  if methods.keys.include?(array.size)
    date_value = send(methods[array.size], array, logic)

    return date_value if date_value
  end

  unless logic && ["'", '"'].include?(real_value[0])
    return value.to_i if is_a_number?(value)
    return value.to_f if is_a_number?(value, true)
    return eval(value) if ['true', 'false'].include?(value)
  end

  logic ? "'#{value}'" : value 
end
field(is_hash) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 29
def field(is_hash)
  is_hash ? "self[:#{@field}]" : "#{@field}"
end
get_field() click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 43
def get_field
  @array.first
end
get_value(logic=false) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 47
def get_value(logic=false)
  value = @array.last.gsub(SqlQueryExecutor::Base::STRING_SPACE, ' ')

  convert_value(value, logic)
end
initialize_attributes(logic=false) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 33
def initialize_attributes(logic=false)
  return if @array

  @query      = SqlQueryExecutor::Query::Normalizers::QueryNormalizer.execute(@query).gsub(SqlQueryExecutor::Base::QUERY_SPACE, ' ')
  @array      = @query.split(' ')
  @operator   = convert_operator
  @field      = get_field
  @value      = get_value(logic)
end

Private Instance Methods

convert_date(args, logic=false) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 101
def convert_date(args, logic=false)
  return if args.first.to_i < 1000
  
  if logic
    "Date.new(#{args[0].to_i}, #{args[1].to_i}, #{args[2].to_i})"
  else
    Date.new(args[0].to_i, args[1].to_i, args[2].to_i)
  end
end
convert_operator() click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 85
def convert_operator
  operators_to_convert = {'<>' => '!=', '=' => '=='}

  operator = @array[1]
  
  operators_to_convert[operator] || operator
end
convert_time(args, logic=false) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 111
def convert_time(args, logic=false)
  return if args.first.to_i < 1000
  args[6] = args[6].gsub('00', ':00').gsub("+:", "+")
  
  if logic
    timezone = args.delete(args.last)
    "Time.new(#{args.join(',')},'#{timezone}')"
  else
    Time.new(*args)
  end
end
is_a_number?(value, float=false) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 77
def is_a_number?(value, float=false)
  if float
    Float(value)
  else
    Integer(value)
  end rescue false
end
split(value) click to toggle source
# File lib/sql_query_executor/operators/base.rb, line 93
def split(value)
  return [] unless value.size >= 10

  array = value.split(/[ :]/)
  array[0] = array.first.split('-')
  array.flatten
end