Sha256: 286e8dd4690c906db909b3a9a9ac7f44dc077bc592060a9d7e4241557f55cf23

Contents?: true

Size: 1.08 KB

Versions: 4

Compression:

Stored size: 1.08 KB

Contents

module BB
  class Relation
    extend Forwardable
    attr_reader :builder

    def initialize
      @builder = Builder.new
    end

    def_delegator(:builder, :build)
    alias_method(:to_sql, :build)

    API[:basic].each do |name|
      define_method(name) do |*args|
        raise ArgumentError, "wrong number of arguments ##{__method__} (at least 1)" if args.empty?

        tap { builder.assign(name).append_formatted_filters(args) }
      end
    end

    API[:joins].each do |name|
      define_method(name) do |*args|
        raise ArgumentError, "wrong number of arguments ##{__method__} (at least 1)" if args.empty?

        tap { builder.append_joins(name).append_formatted_filters(args) }
      end
    end

    def and
      tap { builder.options[:operator] = "AND" }
    end

    def or
      tap { builder.options[:operator] = "OR" }
    end

    def not
      tap { builder.options[:negation] = true }
    end

    def on(rel)
      tap { builder.add_option_to_just_before_join(rel) }
    end

    def offset(offset)
      tap { builder.add_offset_to_limit(offset) }
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
b_b-0.1.3 lib/b_b/relation.rb
b_b-0.1.2 lib/b_b/relation.rb
b_b-0.1.1 lib/b_b/relation.rb
b_b-0.1.0 lib/b_b/relation.rb