class QRuby::Builder

Public Class Methods

escape_character=(character) click to toggle source
# File lib/qruby.rb, line 203
def self.escape_character=(character)
  @@escape_character = character
end
new() click to toggle source
# File lib/qruby.rb, line 7
def initialize
  @select = "*"
  @table, @join, @where, @group_by, @having, @order_by, @limit, @last_query = "", "", "", "", "", "", "", ""
  @operators = ["=", "!=", "<", ">", "<=", ">=", "<>"]
end

Public Instance Methods

alter(command, column, data_type = "") click to toggle source
# File lib/qruby.rb, line 180
def alter(command, column, data_type = "")
  query = "ALTER TABLE #{@table} #{command.gsub('_', ' ').upcase} #{column}"
  query += " #{data_type}" if !data_type.empty?
  end_query query
end
between(field, value1, value2, type = "", and_or = "AND") click to toggle source
# File lib/qruby.rb, line 77
def between(field, value1, value2, type = "", and_or = "AND")
  @where += @where.empty? ? "#{field} #{type}BETWEEN #{escape(value1)} AND #{escape(value2)}" : " #{and_or} #{field} #{type}BETWEEN #{escape(value1)} AND #{escape(value2)}"
  self
end
delete() click to toggle source
# File lib/qruby.rb, line 166
def delete
  query = "DELETE FROM #{@table}"
  query += " WHERE #{@where}" if !@where.empty?
  query += " ORDER BY #{@order_by}" if !@order_by.empty?
  query += " LIMIT #{@limit}" if !@limit.to_s.empty?
  query = "TRUNCATE TABLE #{@table}" if query == "DELETE FROM #{@table}"
  end_query query
end
drop(check_exists = false) click to toggle source
# File lib/qruby.rb, line 175
def drop(check_exists = false)
  query = "DROP TABLE#{check_exists ? " IF EXISTS" : ""} #{@table}"
  end_query query
end
get() click to toggle source
# File lib/qruby.rb, line 130
def get
  @limit = 1
  get_all
end
get_all() click to toggle source
# File lib/qruby.rb, line 135
def get_all
  query = "SELECT #{@select} FROM #{@table}"
  query += "#{@join}" if !@join.empty?
  query += " WHERE #{@where}" if !@where.empty?
  query += " GROUP BY #{@group_by}" if !@group_by.empty?
  query += " HAVING #{@having}" if !@having.empty?
  query += " ORDER BY #{@order_by}" if !@order_by.empty?
  query += " LIMIT #{@limit}" if !@limit.to_s.empty?
  end_query query
end
group_by(field) click to toggle source
# File lib/qruby.rb, line 114
def group_by(field)
  @group_by = field.is_a?(Array) ? field.join(", ") : field
  self
end
having(field, operator, val = nil) click to toggle source
# File lib/qruby.rb, line 119
def having(field, operator, val = nil)
  if operator.is_a?(Array)
    query = ""
    field.split("?").map.with_index { |val, i| query += i < operator.size ? "#{val}#{escape(operator[i])}" : "#{val}" }
    @having = query
  else
    @having = @operators.include?(operator.to_s) ? "#{field} #{operator} #{escape(val)}" : "#{field} > #{escape(operator)}"
  end
  self
end
in(field, values, type = "", and_or = "AND") click to toggle source
# File lib/qruby.rb, line 64
def in(field, values, type = "", and_or = "AND")
  keys = [] 
  values.each { |val| keys << "#{escape(val)}" }
  @where += @where.empty? ? "#{field} #{type}IN (#{keys.join(", ")})" : " #{and_or} #{field} #{type}IN (#{keys.join(", ")})"
  self
end
insert(datas) click to toggle source
# File lib/qruby.rb, line 146
def insert(datas)
  fields = datas.keys
  values = [] 
  datas.values.each { |val| values << "#{escape(val)}" }
  query = "INSERT INTO #{@table} (#{fields.join(", ")}) VALUES (#{values.join(", ")})"
  end_query query
end
join(table, field1, field2 = nil, type = "") click to toggle source
# File lib/qruby.rb, line 33
def join(table, field1, field2 = nil, type = "")
  @join += field2.nil? ? " #{type}JOIN #{table} ON #{field1}" : " #{type}JOIN #{table} ON #{field1} = #{field2}"
  self
end
last_query() click to toggle source
# File lib/qruby.rb, line 199
def last_query
  @last_query
end
like(field, value, type = "", and_or = "AND") click to toggle source
# File lib/qruby.rb, line 88
def like(field, value, type = "", and_or = "AND")
  @where += @where.empty? ? "#{field} #{type}LIKE #{escape(value)}" : " #{and_or} #{field} #{type}LIKE #{escape(value)}"
  self
end
limit(limit, limit_end = nil) click to toggle source
# File lib/qruby.rb, line 99
def limit(limit, limit_end = nil)
  @limit = !limit_end.nil? ? "#{limit}, #{limit_end}" : "#{limit}"
  self
end
order_by(field, dir = nil) click to toggle source
# File lib/qruby.rb, line 104
def order_by(field, dir = nil)
  if !dir.nil?
    order_by = "#{field} #{dir.upcase}"
  else
    order_by = (field.include?(" ") || field == "rand()") ? field : "#{field} ASC"
  end
  @order_by += @order_by.empty? ? order_by : ", #{order_by}"
  self
end
query(sql, params) click to toggle source
# File lib/qruby.rb, line 186
def query(sql, params)
  query = ""
  sql.split("?").map.with_index { |val, i| query += i < params.size ? "#{val}#{escape(params[i])}" : "#{val}" }
  end_query query
end
select(fields) click to toggle source
# File lib/qruby.rb, line 18
def select(fields)
  value = fields.is_a?(Array) ? fields.join(", ") : fields.to_s
  @select = (@select<=>"*").eql?(0) ? value : "#{@select}, #{value}"
  self
end
table(name) click to toggle source
# File lib/qruby.rb, line 13
def table(name)
  @table = name.is_a?(Array) ? name.join(", ") : name.to_s
  self
end
update(datas) click to toggle source
# File lib/qruby.rb, line 154
def update(datas)
  query = "UPDATE #{@table} SET"
  fields = datas.keys
  values = [] 
  datas.values.map.with_index { |val, i| values << "#{fields[i]} = #{escape(val)}" }
  query += " #{values.join(", ")}"
  query += " WHERE #{@where}" if !@where.empty?
  query += " ORDER BY #{@order_by}" if !@order_by.empty?
  query += " LIMIT #{@limit}" if !@limit.to_s.empty?
  end_query query
end
where(field, operator, val = nil, type = "", and_or = "AND") click to toggle source
# File lib/qruby.rb, line 44
def where(field, operator, val = nil, type = "", and_or = "AND")
  if operator.is_a?(Array)
    query = ""
    field.split("?").map.with_index { |val, i| query += i < operator.size ? "#{type}#{val}#{escape(operator[i])}" : "#{val}" }
    where = query
  elsif @operators.include?(operator.to_s)
    where = "#{type}#{field} #{operator} #{escape(val)}"
  else
    where = "#{type}#{field} = #{escape(operator)}"
  end
  @where += @where.empty? ? where : " #{and_or} #{where}"
  self
end

Private Instance Methods

end_query(query) click to toggle source
# File lib/qruby.rb, line 214
def end_query(query)
  reset
  @last_query = query
  query
end
escape(data) click to toggle source
# File lib/qruby.rb, line 220
def escape(data)
  return "NULL" if data.nil?
  "'#{data.to_s.gsub(/\\|'/) { |c| @@escape_character + c }}'"
end
reset() click to toggle source
# File lib/qruby.rb, line 209
def reset
  @table, @join, @where, @group_by, @having, @order_by, @limit, @last_query = "", "", "", "", "", "", "", ""
  @select = "*"
end