rom 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +81 -0
- data/.travis.yml +2 -1
- data/CHANGELOG.md +41 -0
- data/Gemfile +12 -8
- data/Guardfile +17 -11
- data/README.md +7 -7
- data/Rakefile +29 -0
- data/lib/rom.rb +9 -66
- data/lib/rom/adapter.rb +45 -12
- data/lib/rom/adapter/memory.rb +0 -4
- data/lib/rom/adapter/memory/commands.rb +0 -10
- data/lib/rom/adapter/memory/dataset.rb +18 -6
- data/lib/rom/adapter/memory/storage.rb +0 -3
- data/lib/rom/command_registry.rb +24 -43
- data/lib/rom/commands.rb +5 -6
- data/lib/rom/commands/create.rb +5 -5
- data/lib/rom/commands/delete.rb +8 -6
- data/lib/rom/commands/result.rb +82 -0
- data/lib/rom/commands/update.rb +5 -4
- data/lib/rom/commands/with_options.rb +1 -4
- data/lib/rom/config.rb +70 -0
- data/lib/rom/env.rb +11 -3
- data/lib/rom/global.rb +107 -0
- data/lib/rom/header.rb +122 -89
- data/lib/rom/header/attribute.rb +148 -0
- data/lib/rom/mapper.rb +46 -67
- data/lib/rom/mapper_builder.rb +20 -73
- data/lib/rom/mapper_builder/mapper_dsl.rb +114 -0
- data/lib/rom/mapper_builder/model_dsl.rb +29 -0
- data/lib/rom/mapper_registry.rb +21 -0
- data/lib/rom/model_builder.rb +11 -17
- data/lib/rom/processor.rb +28 -0
- data/lib/rom/processor/transproc.rb +105 -0
- data/lib/rom/reader.rb +81 -21
- data/lib/rom/reader_builder.rb +14 -4
- data/lib/rom/relation.rb +19 -5
- data/lib/rom/relation_builder.rb +20 -6
- data/lib/rom/repository.rb +0 -2
- data/lib/rom/setup.rb +156 -0
- data/lib/rom/{boot → setup}/base_relation_dsl.rb +4 -8
- data/lib/rom/setup/command_dsl.rb +46 -0
- data/lib/rom/setup/finalize.rb +125 -0
- data/lib/rom/setup/mapper_dsl.rb +19 -0
- data/lib/rom/{boot → setup}/relation_dsl.rb +1 -4
- data/lib/rom/setup/schema_dsl.rb +33 -0
- data/lib/rom/support/registry.rb +10 -6
- data/lib/rom/version.rb +1 -1
- data/rom.gemspec +3 -1
- data/spec/integration/adapters/extending_relations_spec.rb +0 -2
- data/spec/integration/commands/create_spec.rb +2 -9
- data/spec/integration/commands/delete_spec.rb +4 -5
- data/spec/integration/commands/error_handling_spec.rb +4 -3
- data/spec/integration/commands/update_spec.rb +3 -8
- data/spec/integration/mappers/deep_embedded_spec.rb +52 -0
- data/spec/integration/mappers/definition_dsl_spec.rb +0 -118
- data/spec/integration/mappers/embedded_spec.rb +82 -0
- data/spec/integration/mappers/group_spec.rb +170 -0
- data/spec/integration/mappers/prefixing_attributes_spec.rb +2 -2
- data/spec/integration/mappers/renaming_attributes_spec.rb +8 -6
- data/spec/integration/mappers/symbolizing_attributes_spec.rb +80 -0
- data/spec/integration/mappers/wrap_spec.rb +162 -0
- data/spec/integration/multi_repo_spec.rb +64 -0
- data/spec/integration/relations/reading_spec.rb +12 -8
- data/spec/integration/relations/registry_dsl_spec.rb +1 -3
- data/spec/integration/schema_spec.rb +10 -0
- data/spec/integration/setup_spec.rb +57 -6
- data/spec/spec_helper.rb +2 -1
- data/spec/unit/config_spec.rb +60 -0
- data/spec/unit/rom/adapter/memory/dataset_spec.rb +52 -0
- data/spec/unit/rom/adapter_spec.rb +31 -11
- data/spec/unit/rom/header_spec.rb +60 -16
- data/spec/unit/rom/mapper_builder_spec.rb +311 -0
- data/spec/unit/rom/mapper_registry_spec.rb +25 -0
- data/spec/unit/rom/mapper_spec.rb +4 -5
- data/spec/unit/rom/model_builder_spec.rb +15 -13
- data/spec/unit/rom/processor/transproc_spec.rb +331 -0
- data/spec/unit/rom/reader_spec.rb +73 -0
- data/spec/unit/rom/registry_spec.rb +38 -0
- data/spec/unit/rom/relation_spec.rb +0 -1
- data/spec/unit/rom/setup_spec.rb +55 -0
- data/spec/unit/rom_spec.rb +14 -0
- metadata +62 -22
- data/Gemfile.devtools +0 -71
- data/lib/rom/boot.rb +0 -197
- data/lib/rom/boot/command_dsl.rb +0 -48
- data/lib/rom/boot/dsl.rb +0 -37
- data/lib/rom/boot/mapper_dsl.rb +0 -23
- data/lib/rom/boot/schema_dsl.rb +0 -27
- data/lib/rom/ra.rb +0 -172
- data/lib/rom/ra/operation/group.rb +0 -47
- data/lib/rom/ra/operation/join.rb +0 -39
- data/lib/rom/ra/operation/wrap.rb +0 -45
- data/lib/rom/transformer.rb +0 -77
- data/spec/integration/ra/group_spec.rb +0 -46
- data/spec/integration/ra/join_spec.rb +0 -50
- data/spec/integration/ra/wrap_spec.rb +0 -37
- data/spec/unit/rom/ra/operation/group_spec.rb +0 -55
- data/spec/unit/rom/ra/operation/wrap_spec.rb +0 -29
- data/spec/unit/rom/transformer_spec.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39759c82e1343f0fbffc57f13776e3c6c32a8cc9
|
4
|
+
data.tar.gz: 28daebfe7db350be6ac1b591d369274a6d64dea2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27528eadcc25bd65907de664a36a88a3abd9478873d9f213111c8aa33b32dccb95e22596202459bf43c9e7c093688807f8d218351b17d16defd40af683085720
|
7
|
+
data.tar.gz: 22d152bd43402e7d04d6ac53e80ea8744fb683742fe92710f796e8853e505823d0c3070923137b2e8da75c3271ecbe6c404e90206841dbfac4e3fa675c8ee115
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# FIXME: Lower by refactoring biggest offenders
|
2
|
+
Metrics/AbcSize:
|
3
|
+
Max: 27
|
4
|
+
|
5
|
+
# FIXME: Lower by refactoring biggest offenders
|
6
|
+
Metrics/MethodLength:
|
7
|
+
Max: 29
|
8
|
+
|
9
|
+
# FIXME: Lower by refactoring biggest offenders
|
10
|
+
Metrics/PerceivedComplexity:
|
11
|
+
Max: 8
|
12
|
+
|
13
|
+
# It’s quite readable when we know what we are doing
|
14
|
+
Lint/AssignmentInCondition:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Lint/HandleExceptions:
|
18
|
+
Exclude:
|
19
|
+
- Rakefile
|
20
|
+
|
21
|
+
Metrics/ClassLength:
|
22
|
+
Max: 120
|
23
|
+
|
24
|
+
# gemspec is a special snowflake
|
25
|
+
Metrics/LineLength:
|
26
|
+
Max: 84
|
27
|
+
Exclude:
|
28
|
+
- rom.gemspec
|
29
|
+
|
30
|
+
# The enforced style doesn’t match Vim’s defaults
|
31
|
+
Style/AlignParameters:
|
32
|
+
Enabled: false
|
33
|
+
|
34
|
+
# UTF-8 is perfectly fine in comments
|
35
|
+
Style/AsciiComments:
|
36
|
+
Enabled: false
|
37
|
+
|
38
|
+
# Allow using braces for value-returning blocks
|
39
|
+
Style/Blocks:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
# Documentation checked by Inch CI
|
43
|
+
Style/Documentation:
|
44
|
+
Enabled: false
|
45
|
+
|
46
|
+
# Early returns have their vices
|
47
|
+
Style/GuardClause:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
# Need to be skipped for >-> usage
|
51
|
+
Style/Lambda:
|
52
|
+
Enabled: false
|
53
|
+
|
54
|
+
# Multiline block chains are ok
|
55
|
+
Style/MultilineBlockChain:
|
56
|
+
Enabled: false
|
57
|
+
|
58
|
+
# Result::Success and Result::Failure use > for callbacks
|
59
|
+
Style/OpMethod:
|
60
|
+
Exclude:
|
61
|
+
- lib/rom/command_registry.rb
|
62
|
+
|
63
|
+
# Even a single escaped slash can be confusing
|
64
|
+
Style/RegexpLiteral:
|
65
|
+
MaxSlashes: 0
|
66
|
+
|
67
|
+
# Don’t introduce semantic fail/raise distinction
|
68
|
+
Style/SignalException:
|
69
|
+
EnforcedStyle: only_raise
|
70
|
+
|
71
|
+
# Need to be skipped for >-> usage
|
72
|
+
Style/SpaceAroundOperators:
|
73
|
+
Enabled: false
|
74
|
+
|
75
|
+
# Accept both single and double quotes
|
76
|
+
Style/StringLiterals:
|
77
|
+
Enabled: false
|
78
|
+
|
79
|
+
# Allow def self.foo; @foo; end
|
80
|
+
Style/TrivialAccessors:
|
81
|
+
Enabled: false
|
data/.travis.yml
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
language: ruby
|
2
2
|
env:
|
3
3
|
- CODECLIMATE_REPO_TOKEN=f7c652b65a700fcf1032174afc5ea243b991e48bf73077cc34c148e1c800a2f7
|
4
|
-
bundler_args: --without sql benchmarks console
|
4
|
+
bundler_args: --without sql benchmarks console tools
|
5
5
|
script: "bundle exec rake spec"
|
6
6
|
rvm:
|
7
7
|
- 2.0
|
8
8
|
- 2.1
|
9
|
+
- 2.2
|
9
10
|
- rbx-2
|
10
11
|
- jruby
|
11
12
|
- ruby-head
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,44 @@
|
|
1
|
+
## v0.5.0 2014-12-31
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
* Mapper DSL supports `embedded` interface for nested tuples (solnic)
|
6
|
+
* Support for nested `group` mapping (solnic)
|
7
|
+
* Support for nested `wrap` mapping (solnic)
|
8
|
+
* Support for primitive type coercions (:to_string, :to_integer etc.) (solnic)
|
9
|
+
* Support for top-level `:prefix` option in mapping DSL (solnic)
|
10
|
+
* Support for top-level `:symbolize_keys` option in mapping DSL (solnic)
|
11
|
+
* Support for `:prefix` option in wrap/group mapping DSL (solnic)
|
12
|
+
* Interface for registering data mapping processors (solnic)
|
13
|
+
* Remaining relations are automatically setup from the schema (solnic)
|
14
|
+
* Each relation has now access to other relations (previously they only had
|
15
|
+
access to raw datasets) (solnic)
|
16
|
+
* `ROM.setup` supports passing in *just an uri* which will setup a default repository (solnic)
|
17
|
+
* `ROM.setup` supports passing in conventional database connection hash (solnic)
|
18
|
+
* Adapters support extra options in addition to the base connection URI (solnic)
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
|
22
|
+
* Mapping backend replaced by integration with transproc (solnic)
|
23
|
+
* Readers no longer expose adapter query DSL (solnic)
|
24
|
+
* Registry objects raise `ROM::Registry::ElementNotFoundError` when missing
|
25
|
+
element is referenced (rather than raw KeyError) (solnic)
|
26
|
+
* Performance improvements in Reader (solnic)
|
27
|
+
* `ROM::RA` was merged into in-memory adapter as this fits there perfectly (solnic)
|
28
|
+
* It is no longer needed to explicitly execute a delete command in try block (solnic)
|
29
|
+
|
30
|
+
### Fixed
|
31
|
+
|
32
|
+
* Wrap/group skips empty tuples now (solnic)
|
33
|
+
* Readers raise a meaningful error when relation is missing (solnic)
|
34
|
+
|
35
|
+
## Internal
|
36
|
+
|
37
|
+
* Massive code clean-up and rubocop integration (chastell)
|
38
|
+
* Refactored `Reader` and mapper-specific logic into `MapperRegistry` (solnic)
|
39
|
+
|
40
|
+
[Compare v0.4.2...v0.5.0](https://github.com/rom-rb/rom/compare/v0.4.2...v0.5.0)
|
41
|
+
|
1
42
|
## v0.4.2 2014-12-19
|
2
43
|
|
3
44
|
### Added
|
data/Gemfile
CHANGED
@@ -9,18 +9,11 @@ end
|
|
9
9
|
|
10
10
|
group :test do
|
11
11
|
gem 'virtus'
|
12
|
-
gem 'guard'
|
13
|
-
gem 'guard-rspec'
|
14
12
|
|
15
13
|
platforms :rbx do
|
16
14
|
gem 'rubysl-bigdecimal', platforms: :rbx
|
17
15
|
gem 'codeclimate-test-reporter', require: false
|
18
16
|
end
|
19
|
-
|
20
|
-
platforms :mri do
|
21
|
-
gem 'mutant'
|
22
|
-
gem 'mutant-rspec'
|
23
|
-
end
|
24
17
|
end
|
25
18
|
|
26
19
|
group :sql do
|
@@ -31,6 +24,17 @@ group :sql do
|
|
31
24
|
end
|
32
25
|
|
33
26
|
group :benchmarks do
|
34
|
-
gem 'activerecord', '4.2.0
|
27
|
+
gem 'activerecord', '4.2.0'
|
35
28
|
gem 'benchmark-ips'
|
36
29
|
end
|
30
|
+
|
31
|
+
group :tools do
|
32
|
+
gem 'rubocop'
|
33
|
+
|
34
|
+
gem 'guard'
|
35
|
+
gem 'guard-rspec'
|
36
|
+
gem 'guard-rubocop'
|
37
|
+
|
38
|
+
gem 'mutant'
|
39
|
+
gem 'mutant-rspec'
|
40
|
+
end
|
data/Guardfile
CHANGED
@@ -1,16 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
group :red_green_refactor, halt_on_fail: true do
|
2
|
+
guard :rspec, cmd: "rspec" do
|
3
|
+
# run all specs if configuration is modified
|
4
|
+
watch('Guardfile') { 'spec' }
|
5
|
+
watch('Gemfile.lock') { 'spec' }
|
6
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
# run all specs if supporting files files are modified
|
9
|
+
watch(%r{\Aspec/(?:lib|support|shared)/.+\.rb\z}) { 'spec' }
|
9
10
|
|
10
|
-
|
11
|
+
watch(%r{\Alib/(.+)\.rb\z}) { |_m| 'spec' }
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
# run a spec if it is modified
|
14
|
+
watch(%r{\Aspec/(?:unit|integration)/.+_spec\.rb\z})
|
14
15
|
|
15
|
-
|
16
|
+
notification :tmux, display_message: true
|
17
|
+
end
|
18
|
+
|
19
|
+
guard :rubocop do
|
20
|
+
watch(%r{\Alib/(.+)\.rb\z})
|
21
|
+
end
|
16
22
|
end
|
data/README.md
CHANGED
@@ -1,10 +1,3 @@
|
|
1
|
-
[][gem]
|
2
|
-
[][travis]
|
3
|
-
[][gemnasium]
|
4
|
-
[][codeclimate]
|
5
|
-
[][codeclimate]
|
6
|
-
[][inchpages]
|
7
|
-
|
8
1
|
[gem]: https://rubygems.org/gems/rom
|
9
2
|
[travis]: https://travis-ci.org/rom-rb/rom
|
10
3
|
[gemnasium]: https://gemnasium.com/rom-rb/rom
|
@@ -14,6 +7,13 @@
|
|
14
7
|
|
15
8
|
# Ruby Object Mapper
|
16
9
|
|
10
|
+
[][gem]
|
11
|
+
[][travis]
|
12
|
+
[][gemnasium]
|
13
|
+
[][codeclimate]
|
14
|
+
[][codeclimate]
|
15
|
+
[][inchpages]
|
16
|
+
|
17
17
|
ROM is an experimental Ruby ORM that aims to bring powerful object mapping
|
18
18
|
capabilities and give you back the full power of your database. It is based on
|
19
19
|
a couple of core concepts which makes it different from a typical ORM:
|
data/Rakefile
CHANGED
@@ -1,3 +1,32 @@
|
|
1
1
|
require "rspec/core/rake_task"
|
2
2
|
|
3
3
|
RSpec::Core::RakeTask.new(:spec)
|
4
|
+
task default: [:spec]
|
5
|
+
|
6
|
+
begin
|
7
|
+
require "rubocop/rake_task"
|
8
|
+
|
9
|
+
Rake::Task[:default].enhance [:rubocop]
|
10
|
+
|
11
|
+
RuboCop::RakeTask.new do |task|
|
12
|
+
task.options << "--display-cop-names"
|
13
|
+
end
|
14
|
+
rescue LoadError
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run mutant against a specific subject"
|
18
|
+
task :mutant do
|
19
|
+
subject = ARGV.last
|
20
|
+
if subject == 'mutant'
|
21
|
+
abort "usage: rake mutant SUBJECT\nexample: rake mutant ROM::Header"
|
22
|
+
else
|
23
|
+
opts = {
|
24
|
+
'include' => 'lib',
|
25
|
+
'require' => 'rom',
|
26
|
+
'use' => 'rspec',
|
27
|
+
'ignore-subject' => "#{subject}#respond_to_missing?"
|
28
|
+
}.to_a.map { |k, v| "--#{k} #{v}" }.join(' ')
|
29
|
+
|
30
|
+
exec("bundle exec mutant #{opts} #{subject}")
|
31
|
+
end
|
32
|
+
end
|
data/lib/rom.rb
CHANGED
@@ -7,24 +7,27 @@ require 'rom/support/registry'
|
|
7
7
|
|
8
8
|
require 'rom/header'
|
9
9
|
require 'rom/relation'
|
10
|
-
require 'rom/transformer'
|
11
10
|
require 'rom/mapper'
|
12
11
|
require 'rom/reader'
|
13
12
|
|
13
|
+
require 'rom/processor/transproc'
|
14
|
+
|
14
15
|
require 'rom/commands'
|
15
16
|
|
16
17
|
require 'rom/adapter'
|
17
18
|
require 'rom/repository'
|
18
|
-
require 'rom/env'
|
19
19
|
|
20
|
-
require 'rom/
|
20
|
+
require 'rom/config'
|
21
|
+
require 'rom/env'
|
21
22
|
|
22
|
-
require 'rom/
|
23
|
+
require 'rom/global'
|
24
|
+
require 'rom/setup'
|
23
25
|
|
24
26
|
module ROM
|
25
27
|
EnvAlreadyFinalizedError = Class.new(StandardError)
|
26
28
|
CommandError = Class.new(StandardError)
|
27
29
|
TupleCountMismatchError = Class.new(CommandError)
|
30
|
+
NoRelationError = Class.new(StandardError)
|
28
31
|
|
29
32
|
InvalidOptionError = Class.new(StandardError) do
|
30
33
|
def initialize(option, valid_values)
|
@@ -36,67 +39,7 @@ module ROM
|
|
36
39
|
RelationRegistry = Class.new(Registry)
|
37
40
|
ReaderRegistry = Class.new(Registry)
|
38
41
|
|
39
|
-
|
40
|
-
#
|
41
|
-
# @param [Hash] options repository URIs
|
42
|
-
#
|
43
|
-
# @return [Boot] boot object
|
44
|
-
#
|
45
|
-
# @api public
|
46
|
-
def self.setup(options, &block)
|
47
|
-
adapters = options.each_with_object({}) do |(name, uri), hash|
|
48
|
-
hash[name] = Adapter.setup(uri)
|
49
|
-
end
|
50
|
-
|
51
|
-
repositories = adapters.each_with_object({}) do |(name, adapter), hash|
|
52
|
-
hash[name] = Repository.new(adapter)
|
53
|
-
end
|
54
|
-
|
55
|
-
boot = Boot.new(repositories)
|
56
|
-
|
57
|
-
if block
|
58
|
-
boot.instance_exec(&block)
|
59
|
-
boot.finalize
|
60
|
-
else
|
61
|
-
@boot = boot
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# @api public
|
66
|
-
def self.schema(&block)
|
67
|
-
boot.schema(&block)
|
68
|
-
end
|
69
|
-
|
70
|
-
# @api public
|
71
|
-
def self.relation(*args, &block)
|
72
|
-
boot.relation(*args, &block)
|
73
|
-
end
|
74
|
-
|
75
|
-
# @api public
|
76
|
-
def self.commands(*args, &block)
|
77
|
-
boot.commands(*args, &block)
|
78
|
-
end
|
79
|
-
|
80
|
-
# @api public
|
81
|
-
def self.mappers(*args, &block)
|
82
|
-
boot.mappers(*args, &block)
|
83
|
-
end
|
84
|
-
|
85
|
-
# @api public
|
86
|
-
def self.env
|
87
|
-
@env
|
88
|
-
end
|
89
|
-
|
90
|
-
# @api public
|
91
|
-
def self.finalize
|
92
|
-
@env = boot.finalize
|
93
|
-
@boot = nil
|
94
|
-
self
|
95
|
-
end
|
96
|
-
|
97
|
-
# @api private
|
98
|
-
def self.boot
|
99
|
-
@boot
|
100
|
-
end
|
42
|
+
EMPTY_HASH = {}.freeze
|
101
43
|
|
44
|
+
extend Global
|
102
45
|
end
|
data/lib/rom/adapter.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
require 'addressable/uri'
|
2
2
|
|
3
3
|
module ROM
|
4
|
-
|
5
4
|
# Abstract adapter class
|
6
5
|
#
|
7
6
|
# @api public
|
8
7
|
class Adapter
|
9
8
|
include Equalizer.new(:connection)
|
10
9
|
|
11
|
-
@adapters = []
|
12
|
-
|
13
10
|
# Return connection URI associated with the adapter
|
14
11
|
#
|
15
12
|
# @return [String]
|
@@ -24,6 +21,23 @@ module ROM
|
|
24
21
|
# @api public
|
25
22
|
attr_reader :connection
|
26
23
|
|
24
|
+
# Additional options hash
|
25
|
+
#
|
26
|
+
# @return [Hash]
|
27
|
+
#
|
28
|
+
# @api public
|
29
|
+
attr_reader :options
|
30
|
+
|
31
|
+
# @api private
|
32
|
+
def self.inherited(adapter)
|
33
|
+
Adapter.adapters.unshift(adapter)
|
34
|
+
end
|
35
|
+
|
36
|
+
# @api private
|
37
|
+
def self.adapters
|
38
|
+
@_adapters ||= []
|
39
|
+
end
|
40
|
+
|
27
41
|
# Setup an adapter instance with the given connection URI
|
28
42
|
#
|
29
43
|
# @example
|
@@ -41,14 +55,15 @@ module ROM
|
|
41
55
|
# @return [Adapter]
|
42
56
|
#
|
43
57
|
# @api public
|
44
|
-
def self.setup(uri_string)
|
58
|
+
def self.setup(uri_string, options = {})
|
45
59
|
uri = Addressable::URI.parse(uri_string)
|
60
|
+
adapter = self[uri.scheme]
|
46
61
|
|
47
|
-
unless adapter
|
62
|
+
unless adapter
|
48
63
|
raise ArgumentError, "#{uri_string.inspect} uri is not supported"
|
49
64
|
end
|
50
65
|
|
51
|
-
adapter.new(uri)
|
66
|
+
adapter.new(uri, options)
|
52
67
|
end
|
53
68
|
|
54
69
|
# Register adapter class
|
@@ -67,8 +82,8 @@ module ROM
|
|
67
82
|
# @return [Array] registered adapters
|
68
83
|
#
|
69
84
|
# @api public
|
70
|
-
def self.register(
|
71
|
-
|
85
|
+
def self.register(_adapter)
|
86
|
+
warn "Adapter.register is no longer needed [#{caller[0]}"
|
72
87
|
end
|
73
88
|
|
74
89
|
# Return adapter class for the given scheme
|
@@ -79,12 +94,25 @@ module ROM
|
|
79
94
|
#
|
80
95
|
# @api public
|
81
96
|
def self.[](scheme)
|
82
|
-
|
97
|
+
adapters.detect { |adapter| adapter.schemes.include?(scheme.to_sym) }
|
83
98
|
end
|
84
99
|
|
100
|
+
# Hook for adapters to normalize scheme name
|
101
|
+
#
|
85
102
|
# @api private
|
86
|
-
def
|
103
|
+
def self.normalize_scheme(scheme)
|
104
|
+
scheme
|
105
|
+
end
|
106
|
+
|
107
|
+
# @api private
|
108
|
+
def self.database_file?(_scheme)
|
109
|
+
false
|
110
|
+
end
|
111
|
+
|
112
|
+
# @api private
|
113
|
+
def initialize(uri, options = {})
|
87
114
|
@uri = uri
|
115
|
+
@options = options
|
88
116
|
end
|
89
117
|
|
90
118
|
# Extension hook for adding adapter-specific behavior to a relation class
|
@@ -144,6 +172,13 @@ module ROM
|
|
144
172
|
[]
|
145
173
|
end
|
146
174
|
|
175
|
+
# Disconnect is optional and it's a no-op by default
|
176
|
+
#
|
177
|
+
# @api public
|
178
|
+
def disconnect
|
179
|
+
# noop
|
180
|
+
end
|
181
|
+
|
147
182
|
# Return namespace with adapter-specific command classes
|
148
183
|
#
|
149
184
|
# @return [Module]
|
@@ -152,7 +187,5 @@ module ROM
|
|
152
187
|
def command_namespace
|
153
188
|
self.class.const_get(:Commands)
|
154
189
|
end
|
155
|
-
|
156
190
|
end
|
157
|
-
|
158
191
|
end
|