Sha256: b2a77a762fbbfa383e2e2eafc55e7ee7937f78e725c717a5f7af2d7b36e0ebee

Contents?: true

Size: 1.18 KB

Versions: 44

Compression:

Stored size: 1.18 KB

Contents

module Bizside
  class QueryBuilder

    attr_reader :sql, :params

    def initialize
      @sql = ''
      @params = []
      @indent = 0
    end

    def append(*args)
      if args.size == 1
        if args[0].is_a?(Array)
          append(*args[0])
        elsif args[0].is_a?(QueryBuilder)
          append(args[0].to_array)
        else
          append_sql(args[0])
        end
      else
        args.each_with_index do |arg, i|
          if i == 0
            append_sql(arg)
          else
            @params << arg
          end
        end
      end

      self
    end

    def and(*args)
      append_sql('and (')

      if block_given?
        @indent += 1
        yield self
        @indent -= 1
      else
        append(*args)
      end

      append_sql(')')
    end

    def or(*args)
      append_sql('or (')

      if block_given?
        @indent += 1
        yield self
        @indent -= 1
      else
        append(*args)
      end

      append_sql(')')
    end

    def to_array
      [@sql] + @params
    end

    def to_a
      to_array
    end

    private

    def append_sql(sql)
      @indent.times { @sql << '  ' }
      @sql << sql
      @sql << "\n"
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
bizside-3.0.7 lib/bizside/query_builder.rb
bizside-3.0.6 lib/bizside/query_builder.rb
bizside-3.0.5 lib/bizside/query_builder.rb
bizside-3.0.4 lib/bizside/query_builder.rb
bizside-2.3.9 lib/bizside/query_builder.rb
bizside-3.0.3 lib/bizside/query_builder.rb
bizside-2.3.8 lib/bizside/query_builder.rb
bizside-3.0.2 lib/bizside/query_builder.rb
bizside-3.0.1 lib/bizside/query_builder.rb
bizside-3.0.0 lib/bizside/query_builder.rb
bizside-2.3.7 lib/bizside/query_builder.rb
bizside-2.3.6 lib/bizside/query_builder.rb
bizside-2.3.5 lib/bizside/query_builder.rb
bizside-2.3.4 lib/bizside/query_builder.rb
bizside-2.3.3 lib/bizside/query_builder.rb
bizside-2.3.2 lib/bizside/query_builder.rb
bizside-2.3.1 lib/bizside/query_builder.rb
bizside-2.3.0 lib/bizside/query_builder.rb
bizside-2.2.3 lib/bizside/query_builder.rb
bizside-2.2.2 lib/bizside/query_builder.rb