Sha256: a47821de05a1b36ae4567e13d836cf47f6c085a365ed9e5d7c418f55f7818c5c

Contents?: true

Size: 913 Bytes

Versions: 5

Compression:

Stored size: 913 Bytes

Contents

# frozen_string_literal: true

module LB
  class Persistence
    module Relation
      # Helper for joining relations
      module Joins
        def left_join_all_qualified(joins)
          left_join_all(qualified, joins)
        end

        def left_join_all(base, joins)
          join_all(:left_join, base, joins)
        end

        def join_all(type, base, joins)
          joins.each do |relation, on|
            base = base.__send__(type, relation, qualify_on(on))
          end
          base
        end

        def qualify_on(on)
          on.map do |source, target|
            [source.qualified, target.qualified]
          end.to_h
        end

        def prefixed(relation,
                     prefix = Dry::Core::Inflector
                       .singularize(relation.schema.name.dataset))
          relation.qualified.prefix(prefix).schema.attributes
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
lb-persistence-0.0.8 lib/lb/persistence/relation/joins.rb
lb-persistence-0.0.7 lib/lb/persistence/relation/joins.rb
lb-persistence-0.0.6 lib/lb/persistence/relation/joins.rb
lb-persistence-0.0.5 lib/lb/persistence/relation/joins.rb
lb-persistence-0.0.4 lib/lb/persistence/relation/joins.rb