Sha256: 6e1f0b7a94dbee3c9f2d94638319ec9d32e0573082f9e1ea582099159f2e705c

Contents?: true

Size: 1.2 KB

Versions: 2

Compression:

Stored size: 1.2 KB

Contents

require 'spec_helper'
require 'virtus'

describe 'Reading relations' do
  include_context 'users and tasks'

  it 'loads domain objects' do
    class Task
      include Virtus.value_object(coerce: true)

      values do
        attribute :id, Integer
        attribute :title, String
      end
    end

    class User
      include Virtus.value_object(coerce: true)

      values do
        attribute :id, Integer
        attribute :name, String
        attribute :tasks, Array[Task]
      end
    end

    setup.relation(:tasks)

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

      def by_name(name)
        where(name: name)
      end

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

      def all
        select(:id, :name)
      end
    end

    setup.mappers do
      define(:users) do
        model User

        group :tasks do
          model Task

          attribute :id, from: :tasks_id
          attribute :title
        end
      end
    end

    user = rom.read(:users).with_tasks.by_name('Piotr').to_a.first

    expect(user).to eql(
      User.new(
        id: 1, name: 'Piotr', tasks: [Task.new(id: 1, title: 'Finish ROM')]
      ))
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rom-sql-0.3.2 spec/integration/read_spec.rb
rom-sql-0.3.1 spec/integration/read_spec.rb