Sha256: fe610230e6347c73df9344ee24a80948393ce7e05b3a3fe511fc5b4c70c7a8e0

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

# coding: utf-8
RSpec.describe 'Repository with multi-adapters configuration' do
  let(:configuration) {
    ROM::Configuration.new(default: [:sql, DB_URI], memory: [:memory])
  }

  let(:sql_conn) { configuration.gateways[:default].connection }

  let(:rom) { ROM.container(configuration) }

  let(:users) { rom.relation(:sql_users) }
  let(:tasks) { rom.relation(:memory_tasks) }

  let(:repo) { Test::Repository.new(rom) }

  before do
    [:tags, :tasks, :posts, :books, :users, :posts_labels, :labels,
     :reactions, :messages].each { |table| sql_conn.drop_table?(table) }

    sql_conn.create_table :users do
      primary_key :id
      column :name, String
    end

    module Test
      class Users < ROM::Relation[:sql]
        gateway :default
        schema(:users, infer: true)
        register_as :sql_users
      end

      class Tasks < ROM::Relation[:memory]
        schema(:tasks) do
          attribute :user_id, ROM::Types::Int
          attribute :title, ROM::Types::String
        end

        register_as :memory_tasks
        gateway :memory

        use :key_inference

        view(:base, [:user_id, :title]) do
          self
        end

        def for_users(users)
          restrict(user_id: users.pluck(:id))
        end
      end

      class Repository < ROM::Repository[:sql_users]
        relations :memory_tasks

        def users_with_tasks(id)
          aggregate(many: { tasks: memory_tasks }).where(id: id)
        end
      end
    end

    configuration.register_relation(Test::Users)
    configuration.register_relation(Test::Tasks)

    user_id = configuration.gateways[:default].dataset(:users).insert(name: 'Jane')
    configuration.gateways[:memory].dataset(:tasks).insert(user_id: user_id, title: 'Jane Task')
  end

  specify 'ᕕ⁞ ᵒ̌ 〜 ᵒ̌ ⁞ᕗ' do
    user = repo.users_with_tasks(users.last[:id]).first

    expect(user.name).to eql('Jane')

    expect(user.tasks[0].user_id).to eql(user.id)
    expect(user.tasks[0].title).to eql('Jane Task')
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rom-repository-1.3.3 spec/integration/multi_adapter_spec.rb
rom-repository-1.3.2 spec/integration/multi_adapter_spec.rb