rom 0.5.0 → 0.6.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +19 -15
- data/.rubocop_todo.yml +28 -0
- data/.travis.yml +8 -1
- data/CHANGELOG.md +40 -0
- data/Gemfile +10 -2
- data/Guardfile +12 -10
- data/README.md +42 -43
- data/Rakefile +13 -23
- data/lib/rom.rb +19 -27
- data/lib/rom/command.rb +118 -0
- data/lib/rom/command_registry.rb +13 -27
- data/lib/rom/commands.rb +1 -59
- data/lib/rom/commands/abstract.rb +147 -0
- data/lib/rom/commands/composite.rb +47 -0
- data/lib/rom/commands/create.rb +2 -17
- data/lib/rom/commands/delete.rb +5 -25
- data/lib/rom/commands/result.rb +5 -5
- data/lib/rom/commands/update.rb +3 -27
- data/lib/rom/constants.rb +19 -0
- data/lib/rom/env.rb +85 -35
- data/lib/rom/global.rb +173 -42
- data/lib/rom/header.rb +5 -5
- data/lib/rom/header/attribute.rb +2 -2
- data/lib/rom/lint/enumerable_dataset.rb +52 -0
- data/lib/rom/lint/linter.rb +64 -0
- data/lib/rom/lint/repository.rb +78 -0
- data/lib/rom/lint/spec.rb +20 -0
- data/lib/rom/lint/test.rb +98 -0
- data/lib/rom/mapper.rb +32 -5
- data/lib/rom/mapper/attribute_dsl.rb +240 -0
- data/lib/rom/mapper/dsl.rb +100 -0
- data/lib/rom/mapper/model_dsl.rb +55 -0
- data/lib/rom/mapper_registry.rb +8 -1
- data/lib/rom/memory.rb +4 -0
- data/lib/rom/memory/commands.rb +46 -0
- data/lib/rom/memory/dataset.rb +72 -0
- data/lib/rom/memory/relation.rb +44 -0
- data/lib/rom/memory/repository.rb +62 -0
- data/lib/rom/memory/storage.rb +57 -0
- data/lib/rom/model_builder.rb +44 -5
- data/lib/rom/processor.rb +1 -1
- data/lib/rom/processor/transproc.rb +109 -16
- data/lib/rom/reader.rb +91 -39
- data/lib/rom/relation.rb +165 -26
- data/lib/rom/relation/composite.rb +132 -0
- data/lib/rom/relation/curried.rb +48 -0
- data/lib/rom/relation/lazy.rb +173 -0
- data/lib/rom/relation/loaded.rb +75 -0
- data/lib/rom/relation/registry_reader.rb +23 -0
- data/lib/rom/repository.rb +93 -34
- data/lib/rom/setup.rb +54 -98
- data/lib/rom/setup/finalize.rb +85 -76
- data/lib/rom/setup_dsl/command.rb +36 -0
- data/lib/rom/setup_dsl/command_dsl.rb +34 -0
- data/lib/rom/setup_dsl/mapper.rb +32 -0
- data/lib/rom/setup_dsl/mapper_dsl.rb +30 -0
- data/lib/rom/setup_dsl/relation.rb +21 -0
- data/lib/rom/setup_dsl/setup.rb +75 -0
- data/lib/rom/support/array_dataset.rb +38 -0
- data/lib/rom/support/class_builder.rb +44 -0
- data/lib/rom/support/class_macros.rb +56 -0
- data/lib/rom/support/data_proxy.rb +102 -0
- data/lib/rom/support/enumerable_dataset.rb +58 -0
- data/lib/rom/support/inflector.rb +73 -0
- data/lib/rom/support/options.rb +188 -0
- data/lib/rom/support/registry.rb +4 -8
- data/lib/rom/version.rb +1 -1
- data/rakelib/benchmark.rake +13 -0
- data/rakelib/mutant.rake +16 -0
- data/rakelib/rubocop.rake +18 -0
- data/rom.gemspec +4 -7
- data/spec/integration/commands/create_spec.rb +32 -24
- data/spec/integration/commands/delete_spec.rb +15 -7
- data/spec/integration/commands/update_spec.rb +13 -11
- data/spec/integration/mappers/deep_embedded_spec.rb +4 -11
- data/spec/integration/mappers/definition_dsl_spec.rb +31 -44
- data/spec/integration/mappers/embedded_spec.rb +9 -24
- data/spec/integration/mappers/group_spec.rb +22 -30
- data/spec/integration/mappers/prefixing_attributes_spec.rb +18 -23
- data/spec/integration/mappers/renaming_attributes_spec.rb +23 -38
- data/spec/integration/mappers/symbolizing_attributes_spec.rb +18 -24
- data/spec/integration/mappers/wrap_spec.rb +22 -30
- data/spec/integration/multi_repo_spec.rb +15 -37
- data/spec/integration/relations/reading_spec.rb +82 -14
- data/spec/integration/repositories/extending_relations_spec.rb +50 -0
- data/spec/integration/{adapters → repositories}/setting_logger_spec.rb +6 -5
- data/spec/integration/setup_spec.rb +59 -62
- data/spec/shared/enumerable_dataset.rb +49 -0
- data/spec/shared/one_behavior.rb +26 -0
- data/spec/shared/users_and_tasks.rb +11 -23
- data/spec/spec_helper.rb +16 -7
- data/spec/support/constant_leak_finder.rb +14 -0
- data/spec/test/memory_repository_lint_test.rb +27 -0
- data/spec/unit/rom/command_registry_spec.rb +44 -0
- data/spec/unit/rom/commands/result_spec.rb +14 -0
- data/spec/unit/rom/commands_spec.rb +174 -0
- data/spec/unit/rom/env_spec.rb +40 -7
- data/spec/unit/rom/global_spec.rb +14 -0
- data/spec/unit/rom/{mapper_builder_spec.rb → mapper/dsl_spec.rb} +52 -38
- data/spec/unit/rom/mapper_spec.rb +51 -10
- data/spec/unit/rom/{adapter/memory → memory}/dataset_spec.rb +6 -4
- data/spec/unit/rom/memory/repository_spec.rb +12 -0
- data/spec/unit/rom/memory/storage_spec.rb +45 -0
- data/spec/unit/rom/model_builder_spec.rb +4 -3
- data/spec/unit/rom/processor/transproc_spec.rb +1 -0
- data/spec/unit/rom/reader_spec.rb +97 -24
- data/spec/unit/rom/relation/composite_spec.rb +65 -0
- data/spec/unit/rom/relation/lazy_spec.rb +145 -0
- data/spec/unit/rom/relation/loaded_spec.rb +28 -0
- data/spec/unit/rom/relation_spec.rb +111 -6
- data/spec/unit/rom/repository_spec.rb +59 -9
- data/spec/unit/rom/setup_spec.rb +99 -11
- data/spec/unit/rom/support/array_dataset_spec.rb +59 -0
- data/spec/unit/rom/support/class_builder_spec.rb +42 -0
- data/spec/unit/rom/support/enumerable_dataset_spec.rb +17 -0
- data/spec/unit/rom/support/inflector_spec.rb +89 -0
- data/spec/unit/rom/support/options_spec.rb +119 -0
- metadata +74 -112
- data/lib/rom/adapter.rb +0 -191
- data/lib/rom/adapter/memory.rb +0 -32
- data/lib/rom/adapter/memory/commands.rb +0 -31
- data/lib/rom/adapter/memory/dataset.rb +0 -67
- data/lib/rom/adapter/memory/storage.rb +0 -26
- data/lib/rom/commands/with_options.rb +0 -18
- data/lib/rom/config.rb +0 -70
- data/lib/rom/mapper_builder.rb +0 -52
- data/lib/rom/mapper_builder/mapper_dsl.rb +0 -114
- data/lib/rom/mapper_builder/model_dsl.rb +0 -29
- data/lib/rom/reader_builder.rb +0 -48
- data/lib/rom/relation_builder.rb +0 -62
- data/lib/rom/setup/base_relation_dsl.rb +0 -46
- data/lib/rom/setup/command_dsl.rb +0 -46
- data/lib/rom/setup/mapper_dsl.rb +0 -19
- data/lib/rom/setup/relation_dsl.rb +0 -20
- data/lib/rom/setup/schema_dsl.rb +0 -33
- data/spec/integration/adapters/extending_relations_spec.rb +0 -41
- data/spec/integration/commands/try_spec.rb +0 -27
- data/spec/integration/schema_spec.rb +0 -77
- data/spec/unit/config_spec.rb +0 -60
- data/spec/unit/rom/adapter_spec.rb +0 -79
- data/spec/unit/rom_spec.rb +0 -14
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Commands / Try api' do
|
4
|
-
include_context 'users and tasks'
|
5
|
-
|
6
|
-
before do
|
7
|
-
setup.relation(:users)
|
8
|
-
|
9
|
-
setup.commands(:users) do
|
10
|
-
define(:create)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
let(:user_commands) { rom.command(:users) }
|
15
|
-
|
16
|
-
it 'exposes command functions inside the block' do
|
17
|
-
input = { name: 'Piotr', email: 'piotr@test.com' }
|
18
|
-
|
19
|
-
result = user_commands.try { create(input) }
|
20
|
-
|
21
|
-
expect(result.value).to eql([input])
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'raises on method missing' do
|
25
|
-
expect { users.try { not_here } }.to raise_error(NameError)
|
26
|
-
end
|
27
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Defining schema' do
|
4
|
-
let(:setup) { ROM.setup(memory: 'memory://localhost') }
|
5
|
-
let(:rom) { setup.finalize }
|
6
|
-
let(:schema) { rom.schema }
|
7
|
-
|
8
|
-
shared_context 'valid schema' do
|
9
|
-
before do
|
10
|
-
setup.schema do
|
11
|
-
base_relation(:users) do
|
12
|
-
repository :memory
|
13
|
-
|
14
|
-
attribute :id
|
15
|
-
attribute :name
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns schema with relations' do
|
21
|
-
users = schema.users
|
22
|
-
|
23
|
-
expect(users.dataset.to_a).to eql(rom.memory.users.to_a)
|
24
|
-
expect(users.header).to eql([:id, :name])
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe '.schema' do
|
29
|
-
it 'returns an empty schema if it was not defined' do
|
30
|
-
expect { schema.users }.to raise_error(NoMethodError)
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'with an adapter that supports header injection' do
|
34
|
-
it_behaves_like 'valid schema'
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'can be called multiple times' do
|
38
|
-
before do
|
39
|
-
setup.schema do
|
40
|
-
base_relation(:tasks) do
|
41
|
-
repository :memory
|
42
|
-
attribute :title
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
setup.schema do
|
47
|
-
base_relation(:tags) do
|
48
|
-
repository :memory
|
49
|
-
attribute :name
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it_behaves_like 'valid schema' do
|
55
|
-
it 'registers all base relations' do
|
56
|
-
expect(schema.tasks.dataset).to be(rom.memory.tasks)
|
57
|
-
expect(schema.tasks.header).to eql([:title])
|
58
|
-
|
59
|
-
expect(schema.tags.dataset).to be(rom.memory.tags)
|
60
|
-
expect(schema.tags.header).to eql([:name])
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with an adapter that does not support header injection' do
|
66
|
-
before do
|
67
|
-
ROM::Adapter::Memory::Dataset.send(:undef_method, :header)
|
68
|
-
end
|
69
|
-
|
70
|
-
after do
|
71
|
-
ROM::Adapter::Memory::Dataset.send(:attr_reader, :header)
|
72
|
-
end
|
73
|
-
|
74
|
-
it_behaves_like 'valid schema'
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/spec/unit/config_spec.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ROM::Config do
|
4
|
-
describe '.build' do
|
5
|
-
let(:raw_config) do
|
6
|
-
{ adapter: 'memory', hostname: 'localhost', database: 'test' }
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'returns rom repository configuration hash' do
|
10
|
-
config = ROM::Config.build(raw_config)
|
11
|
-
|
12
|
-
expect(config).to eql(default: 'memory://localhost/test')
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'sets additional options' do
|
16
|
-
config = ROM::Config.build(raw_config.update(port: 312, root: '/somewhere'))
|
17
|
-
|
18
|
-
expect(config).to eql(
|
19
|
-
default: { uri: 'memory://localhost/test', options: { port: 312 } }
|
20
|
-
)
|
21
|
-
|
22
|
-
config = ROM::Config.build('memory://localhost/test', super: :option)
|
23
|
-
|
24
|
-
expect(config).to eql(
|
25
|
-
default: { uri: 'memory://localhost/test', options: { super: :option } }
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'builds absolute path to the database file when database is a file' do
|
30
|
-
expect(ROM::Adapter[:memory]).to receive(:database_file?)
|
31
|
-
.with('memory').and_return(true)
|
32
|
-
|
33
|
-
config = ROM::Config.build(
|
34
|
-
adapter: 'memory', database: 'test', root: '/somewhere'
|
35
|
-
)
|
36
|
-
|
37
|
-
expect(config).to eql(default: 'memory:///somewhere/test')
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'sets default password to an empty string' do
|
41
|
-
config = ROM::Config.build(raw_config.update(username: 'root'))
|
42
|
-
expect(config).to eql(default: 'memory://root:@localhost/test')
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'turns a uri into configuration hash' do
|
46
|
-
config = ROM::Config.build('test://localhost/rom')
|
47
|
-
expect(config).to eql(default: 'test://localhost/rom')
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'returns original config hash if it is already in rom format' do
|
51
|
-
config = ROM::Config.build(test: 'test://localhost/rom')
|
52
|
-
expect(config).to eql(test: 'test://localhost/rom')
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'asks adapters to normalize scheme' do
|
56
|
-
expect(ROM::Adapter[:memory]).to receive(:normalize_scheme).with('memory')
|
57
|
-
ROM::Config.build(raw_config)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ROM::Adapter do
|
4
|
-
before do
|
5
|
-
class TestAdapter < ROM::Adapter
|
6
|
-
def self.schemes
|
7
|
-
[:test_scheme]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '.setup' do
|
13
|
-
it 'sets up connection based on a uri' do
|
14
|
-
adapter = ROM::Adapter.setup("test_scheme::memory")
|
15
|
-
|
16
|
-
expect(adapter).to be_instance_of(TestAdapter)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'raises an exception if the scheme is not supported' do
|
20
|
-
expect {
|
21
|
-
ROM::Adapter.setup("bogus://any-host")
|
22
|
-
}.to raise_error(ArgumentError, '"bogus://any-host" uri is not supported')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '.[]' do
|
27
|
-
it "looks up and return the adapter class for the given schema" do
|
28
|
-
expect(ROM::Adapter[:test_scheme]).to eq TestAdapter
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'Registration order' do
|
33
|
-
it "prefers the last-defined adapter" do
|
34
|
-
class OrderTestFirst < TestAdapter
|
35
|
-
def self.schemes
|
36
|
-
[:order_test]
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
adapter = ROM::Adapter.setup("order_test::memory")
|
41
|
-
expect(adapter).to be_instance_of(OrderTestFirst)
|
42
|
-
|
43
|
-
OrderTestSecond = Class.new(OrderTestFirst)
|
44
|
-
|
45
|
-
adapter = ROM::Adapter.setup("order_test::memory")
|
46
|
-
|
47
|
-
expect(adapter).to be_instance_of(OrderTestSecond)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '#disconnect' do
|
52
|
-
it 'does nothing' do
|
53
|
-
adapter_class = Class.new(ROM::Adapter) {
|
54
|
-
def self.schemes
|
55
|
-
[:bazinga]
|
56
|
-
end
|
57
|
-
}
|
58
|
-
|
59
|
-
adapter = adapter_class.new('bazinga://localhost')
|
60
|
-
|
61
|
-
expect(adapter.disconnect).to be(nil)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '.setup' do
|
66
|
-
it 'supports connection uri and additional options' do
|
67
|
-
Class.new(ROM::Adapter) {
|
68
|
-
def self.schemes
|
69
|
-
[:bazinga]
|
70
|
-
end
|
71
|
-
}
|
72
|
-
|
73
|
-
adapter = ROM::Adapter.setup('bazinga://localhost', super: :option)
|
74
|
-
|
75
|
-
expect(adapter.uri).to eql(Addressable::URI.parse('bazinga://localhost'))
|
76
|
-
expect(adapter.options).to eql(super: :option)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
data/spec/unit/rom_spec.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ROM do
|
4
|
-
describe '.setup' do
|
5
|
-
it 'creates a boot instance using a database config hash' do
|
6
|
-
boot = ROM.setup(
|
7
|
-
adapter: 'memory', database: 'test', hostname: 'localhost'
|
8
|
-
)
|
9
|
-
|
10
|
-
expect(boot[:default]).to be(boot.repositories[:default])
|
11
|
-
expect(boot.default.adapter.uri.to_s).to eql("memory://localhost/test")
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|