Sha256: 09237b1f6eef11047791148ae97f7c6eec929f8a3075f406aff727cd2523b047

Contents?: true

Size: 1.47 KB

Versions: 6

Compression:

Stored size: 1.47 KB

Contents

require 'spec_helper'

require 'rom/lint/spec'

describe 'YAML adapter' do
  subject(:rom) { setup.finalize }

  let(:root) { Pathname(__FILE__).dirname.join('..') }

  let(:path) { "#{root}/fixtures/test_db.yml" }
  let(:setup) { ROM.setup(:yaml, path) }

  before do
    setup.relation(:users) do
      def by_name(name)
        restrict(name: name)
      end
    end

    setup.mappers do
      define(:users) do
        register_as :entity

        model name: 'User'

        attribute :name
        attribute :email

        embedded :roles, type: :array do
          attribute :name, from: 'role_name'
        end
      end
    end
  end

  describe 'env#relation' do
    it 'returns mapped object' do
      jane = rom.relation(:users).as(:entity).by_name('Jane').first

      expect(jane.name).to eql('Jane')
      expect(jane.email).to eql('jane@doe.org')
      expect(jane.roles.length).to eql(2)
      expect(jane.roles).to eql([
        { name: 'Member' }, { name: 'Admin' }
      ])
    end
  end

  describe 'multi-file setup' do
    it 'uses one-file-per-relation' do
      setup = ROM.setup(:yaml, "#{root}/fixtures/db")

      setup.relation(:users)
      setup.relation(:tasks)

      rom = setup.finalize

      expect(rom.relation(:users)).to match_array([
        { name: 'Jane', email: 'jane@doe.org' }
      ])

      expect(rom.relation(:tasks)).to match_array([
        { title: 'Task One' },
        { title: 'Task Two' },
        { title: 'Task Three' }
      ])
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rom-yaml-0.2.0 spec/integration/adapter_spec.rb
rom-yaml-0.2.0.rc.1 spec/integration/adapter_spec.rb
rom-yaml-0.1.2 spec/integration/adapter_spec.rb
rom-yaml-0.1.1 spec/integration/adapter_spec.rb
rom-yaml-0.1.0 spec/integration/adapter_spec.rb
rom-yaml-0.0.1 spec/integration/adapter_spec.rb