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