Sha256: c9d9df75fdedc449177f7f22cdfffbca1919fb2882c582b9e06bc86ba0049f51

Contents?: true

Size: 1.78 KB

Versions: 14

Compression:

Stored size: 1.78 KB

Contents

class Card
  class Query
    class Join
      attr_accessor :conditions, :side,
        :from, :to,
        :from_table, :to_table,
        :from_alias, :to_alias,
        :from_field, :to_field,
        :superjoin, :subjoins

      def initialize opts={}
        from_and_to opts
        opts.each do |key, value|
          send "#{key}=", value if value.present?
        end
        @from_field ||= :id
        @to_field   ||= :id
        @conditions = []
        @subjoins = []
        if @from.is_a? Join
          @superjoin = @from
          @superjoin.subjoins << self
        end
        self
      end

      def from_and_to opts
        [:from, :to].each do |side|
          object = opts[side]
          case object
          when nil; next
          when Array
            { table: object.shift, alias: object.shift, field: object.shift }
          when Card::Query
            { table: 'cards', alias: object.table_alias }
          when Card::Query::Reference
            { table: 'card_references', alias: object.table_alias }
          when Card::Query::Join
            fail "to: cannot be Join" if side == :to
            { table: object.to_table, alias: object.to_alias }
          else
            raise "invalid #{side} option: #{object}"
          end.map do |key, value|
            opts[:"#{side}_#{key}"] ||= value
          end
        end
      end

      def side
        if !@side.nil?
          @side
        else
          in_or = from && from.is_a?(Card::Query) && from.mods[:conj] == 'or'
          @side = in_or ? 'LEFT' : nil
        end
      end

      def left?
        side == 'LEFT'
      end

      def in_left?
        if !@in_left.nil?
          @in_left
        else
          @in_left = left? || (!@superjoin.nil? && @superjoin.in_left?)
        end
      end

    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
card-1.17.4 lib/card/query/join.rb
card-1.17.3 lib/card/query/join.rb
card-1.17.2 lib/card/query/join.rb
card-1.17.1 lib/card/query/join.rb
card-1.17.0 lib/card/query/join.rb
card-1.16.15 lib/card/query/join.rb
card-1.16.14 lib/card/query/join.rb
card-1.16.13 lib/card/query/join.rb
card-1.16.12 lib/card/query/join.rb
card-1.16.11 lib/card/query/join.rb
card-1.16.10 lib/card/query/join.rb
card-1.16.9 lib/card/query/join.rb
card-1.16.8 lib/card/query/join.rb
card-1.16.7 lib/card/query/join.rb