Module: ROM::SQL::RelationInclusion

Defined in:
lib/rom/sql/relation_inclusion.rb

Overview

Sequel-specific relation extensions

Defined Under Namespace

Modules: AssociationDSL

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rom/sql/relation_inclusion.rb', line 8

def self.included(klass)
  klass.extend(AssociationDSL)

  klass.send(:undef_method, :select)

  klass.class_eval {
    class << self
      attr_accessor :model
    end

    self.model = Class.new(Sequel::Model)
  }
end

Instance Method Details

#association_join(*args) ⇒ Object

Join configured association.

Uses INNER JOIN type.

Examples:


setup.relation(:tasks)

setup.relations(:users) do
  one_to_many :tasks, key: :user_id

  def with_tasks
    association_join(:tasks, select: [:title])
  end
end


45
46
47
# File 'lib/rom/sql/relation_inclusion.rb', line 45

def association_join(*args)
  send(:append_association, __method__, *args)
end

#association_left_join(*args) ⇒ Object

Join configured association

Uses LEFT JOIN type.

Examples:


setup.relation(:tasks)

setup.relations(:users) do
  one_to_many :tasks, key: :user_id

  def with_tasks
    association_left_join(:tasks, select: [:title])
  end
end


66
67
68
# File 'lib/rom/sql/relation_inclusion.rb', line 66

def association_left_join(*args)
  send(:append_association, __method__, *args)
end

#initialize(*args) ⇒ Object



22
23
24
25
26
# File 'lib/rom/sql/relation_inclusion.rb', line 22

def initialize(*args)
  super
  @model = self.class.model
  @header = dataset.header
end