Sha256: 1a4b1b9dddeaaab802e710cb5ffa2bb74bf0150aab3222e7090a963e1cf68ab8
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
class BazaModels::Query::SqlGenerator def initialize(args) @query = args.fetch(:query) instance_variables = [ :selects, :joins, :wheres, :groups, :orders, :per, :limit, :offset, :model, :table_name, :reverse_order ] instance_variables.each do |instance_variable| value = @query.instance_variable_get(:"@#{instance_variable}") instance_variable_set(:"@#{instance_variable}", value) end end def to_sql sql = "SELECT " if @selects.empty? sql << "`#{@model.table_name}`.*" else sql << @selects.join(", ") end sql << " FROM `#{@model.table_name}`" unless @joins.empty? @joins.each do |join| sql << " #{join}" end end unless @wheres.empty? sql << " WHERE " first = true @wheres.each do |where| if first == true first = false else sql << " AND " end sql << where end end unless @groups.empty? sql << " GROUP BY " first = true @groups.each do |group| if first first = false else sql << ", " end sql << group end end unless @orders.empty? sql << " ORDER BY " first = true @orders.each do |order| if first first = false else sql << ", " end if @reverse_order if order =~ /\s+desc/i order = order.gsub(/\s+desc/i, " ASC") elsif order =~ /\s+asc/i order = order.gsub(/\s+asc/i, " DESC") else order = "#{order} DESC" end end sql << order end end if @limit && @offset sql << " LIMIT #{@offset.to_i}, #{@limit.to_i}" elsif @limit sql << " LIMIT #{@limit.to_i}" end sql.strip end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
baza_models-0.0.6 | lib/baza_models/query/sql_generator.rb |