Sha256: 82e2ef7f5dc85109d438082433f0a50aa85adebafba7ae0b02ad0926d9734da0

Contents?: true

Size: 1.61 KB

Versions: 9

Compression:

Stored size: 1.61 KB

Contents

module ROM
  module Plugins
    module Relation
      module SQL
        # @api private
        module AutoWrap
          # @api private
          def self.included(klass)
            super
            klass.class_eval do
              include(InstanceInterface)
              extend(ClassInterface)
            end
          end

          # @api private
          module ClassInterface
            # @api private
            def inherited(klass)
              super
              klass.auto_curry :for_wrap
            end
          end

          # @api private
          module InstanceInterface
            # Default methods for fetching wrapped relation
            #
            # This method is used by default by `wrap` and `wrap_parents`
            #
            # @return [SQL::Relation]
            #
            # @api private
            def for_wrap(keys, name)
              rel, other =
                if associations.key?(name)
                  assoc = associations[name]
                  other = __registry__[assoc.target.to_sym]

                  [assoc.join(__registry__, :inner_join, self), other]
                else
                  # TODO: deprecate this before 2.0
                  other = __registry__[name]
                  other_dataset = other.name.dataset

                  [qualified.inner_join(other_dataset, keys), other]
                end

              rel.schema.merge(other.schema.wrap).qualified.(rel)
            end
          end
        end
      end
    end
  end
end

ROM.plugins do
  adapter :sql do
    register :auto_wrap, ROM::Plugins::Relation::SQL::AutoWrap, type: :relation
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
rom-sql-1.2.2 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.2.1 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.2.0 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.1.2 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.1.1 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.1.0 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.0.3 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.0.2 lib/rom/plugins/relation/sql/auto_wrap.rb
rom-sql-1.0.1 lib/rom/plugins/relation/sql/auto_wrap.rb