dry-system 0.6.0 → 0.7.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/CHANGELOG.md +38 -4
- data/CONTRIBUTING.md +29 -0
- data/examples/custom_configuration_auto_register/Gemfile +5 -0
- data/examples/custom_configuration_auto_register/lib/entities/user.rb +7 -0
- data/examples/custom_configuration_auto_register/lib/user_repo.rb +5 -0
- data/examples/custom_configuration_auto_register/run.rb +8 -0
- data/examples/custom_configuration_auto_register/system/boot/persistence.rb +13 -0
- data/examples/custom_configuration_auto_register/system/container.rb +16 -0
- data/examples/custom_configuration_auto_register/system/import.rb +3 -0
- data/lib/dry/system/auto_registrar.rb +25 -15
- data/lib/dry/system/auto_registrar/configuration.rb +39 -0
- data/lib/dry/system/booter.rb +10 -5
- data/lib/dry/system/component.rb +8 -12
- data/lib/dry/system/constants.rb +1 -0
- data/lib/dry/system/container.rb +36 -15
- data/lib/dry/system/errors.rb +8 -8
- data/lib/dry/system/magic_comments_parser.rb +31 -0
- data/lib/dry/system/manual_registrar.rb +57 -0
- data/lib/dry/system/version.rb +1 -1
- data/spec/fixtures/components/no_register.rb +4 -0
- data/spec/fixtures/magic_comments/comments.rb +17 -0
- data/spec/fixtures/manual_registration/container/foo.rb +6 -0
- data/spec/fixtures/manual_registration/lib/test/foo.rb +9 -0
- data/spec/fixtures/multiple_namespaced_components/multiple/level/baz.rb +7 -0
- data/spec/fixtures/multiple_namespaced_components/multiple/level/foz.rb +6 -0
- data/spec/fixtures/other/config/boot/hell.rb +3 -0
- data/spec/fixtures/test/system/boot/hell.rb +3 -0
- data/spec/integration/container/lazy_loading/manual_registration_spec.rb +18 -0
- data/spec/integration/import_spec.rb +2 -2
- data/spec/unit/auto_registrar/configuration_spec.rb +26 -0
- data/spec/unit/component_spec.rb +0 -5
- data/spec/unit/container/auto_register_spec.rb +34 -6
- data/spec/unit/container/import_spec.rb +5 -22
- data/spec/unit/container_spec.rb +8 -0
- data/spec/unit/magic_comments_parser_spec.rb +41 -0
- metadata +36 -5
- data/.rubocop.yml +0 -34
- data/.rubocop_todo.yml +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz: '
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0793e53e85b2a2fa0ea7da93bb11734362f87cd9'
|
4
|
+
data.tar.gz: 9d0cc9e0989fe9f071468e4e6b310a3fc009b06f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50818887822ec2a8130910a359d45690312cd10c28b1537d5dbf0a45f98eb2f1abc0d70bf6f709313a939927a22c2d8e29fc8f2aa5806f53206d0b6390c37b6d
|
7
|
+
data.tar.gz: 1a350ffcba4a4bd7fca37be0976a55711aad5feaa70d493280aa477d4ea0723d5092fa35031c71c2b1d1ab6adaff6054d2a24e12fbdf4517b6eadb77e2850fe7
|
data/CHANGELOG.md
CHANGED
@@ -1,13 +1,47 @@
|
|
1
|
-
# 0.
|
1
|
+
# 0.7.0 - 2017-06-15
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
- Added `manual_registrar` container setting (along with default `ManualRegistrar` implementation), and `registrations_dir` setting. These provide support for a well-established place for keeping files with manual container registrations (timriley)
|
6
|
+
- AutoRegistrar parses initial lines of Ruby source files for "magic comments" when auto-registering components. An `# auto_register: false` magic comment will prevent a Ruby file from being auto-registered (timriley)
|
7
|
+
- `Container.auto_register!`, when called with a block, yields a configuration object to control the auto-registration behavior for that path, with support for configuring 2 different aspects of auto-registration behavior (both optional):
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class MyContainer < Dry::System::Container
|
11
|
+
auto_register!('lib') do |config|
|
12
|
+
config.instance do |component|
|
13
|
+
# custom logic for initializing a component
|
14
|
+
end
|
15
|
+
|
16
|
+
config.exclude do |component|
|
17
|
+
# return true to skip auto-registration of the component, e.g.
|
18
|
+
# component.path =~ /entities/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
```
|
23
|
+
|
24
|
+
- A helpful error will be raised if a bootable component's finalize block name doesn't match its boot file name (GustavoCaso)
|
25
|
+
|
26
|
+
### Changed
|
27
|
+
|
28
|
+
- The `default_namespace` container setting now supports multi-level namespaces (GustavoCaso)
|
29
|
+
- `Container.auto_register!` yields a configuration block instead of a block for returning a custom instance (see above) (GustavoCaso)
|
30
|
+
- `Container.import` now requires an explicit local name for the imported container (e.g. `import(local_name: AnotherContainer)`) (timriley)
|
31
|
+
|
32
|
+
[Compare v0.6.0...v0.7.0](https://github.com/dry-rb/dry-system/compare/v0.6.0...v0.7.0)
|
33
|
+
|
34
|
+
|
35
|
+
# 0.6.0 - 2016-02-02
|
2
36
|
|
3
37
|
### Changed
|
4
38
|
|
5
39
|
* Lazy load components as they are resolved, rather than on injection (timriley)
|
6
40
|
* Perform registration even though component already required (blelump)
|
7
41
|
|
8
|
-
[Compare v0.5.
|
42
|
+
[Compare v0.5.1...v0.6.0](https://github.com/dry-rb/dry-system/compare/v0.5.1...v0.6.0)
|
9
43
|
|
10
|
-
# 0.5.1 2016-08-23
|
44
|
+
# 0.5.1 - 2016-08-23
|
11
45
|
|
12
46
|
### Fixed
|
13
47
|
|
@@ -15,7 +49,7 @@
|
|
15
49
|
|
16
50
|
[Compare v0.5.0...v0.5.1](https://github.com/dry-rb/dry-system/compare/v0.5.0...v0.5.1)
|
17
51
|
|
18
|
-
# 0.5.0 2016-08-15
|
52
|
+
# 0.5.0 - 2016-08-15
|
19
53
|
|
20
54
|
This is a major refactoring with better internal APIs and improved support
|
21
55
|
for multi-container setups. As part of this release `dry-system` has been renamed to `dry-system`.
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Issue Guidelines
|
2
|
+
|
3
|
+
## Reporting bugs
|
4
|
+
|
5
|
+
If you found a bug, report an issue and describe what's the expected behavior versus what actually happens. If the bug causes a crash, attach a full backtrace. If possible, a reproduction script showing the problem is highly appreciated.
|
6
|
+
|
7
|
+
## Reporting feature requests
|
8
|
+
|
9
|
+
Report a feature request **only after discussing it first on [discuss.dry-rb.org](https://discuss.dry-rb.org)** where it was accepted. Please provide a concise description of the feature, don't link to a discussion thread, and instead summarize what was discussed.
|
10
|
+
|
11
|
+
## Reporting questions, support requests, ideas, concerns etc.
|
12
|
+
|
13
|
+
**PLEASE DON'T** - use [discuss.dry-rb.org](http://discuss.dry-rb.org) instead.
|
14
|
+
|
15
|
+
# Pull Request Guidelines
|
16
|
+
|
17
|
+
A Pull Request will only be accepted if it addresses a specific issue that was reported previously, or fixes typos, mistakes in documentation etc.
|
18
|
+
|
19
|
+
Other requirements:
|
20
|
+
|
21
|
+
1) Do not open a pull request if you can't provide tests along with it. If you have problems writing tests, ask for help in the related issue.
|
22
|
+
2) Follow the style conventions of the surrounding code. In most cases, this is standard ruby style.
|
23
|
+
3) Add API documentation if it's a new feature
|
24
|
+
4) Update API documentation if it changes an existing feature
|
25
|
+
5) Bonus points for sending a PR to [github.com/dry-rb/dry-rb.org](github.com/dry-rb/dry-rb.org) which updates user documentation and guides
|
26
|
+
|
27
|
+
# Asking for help
|
28
|
+
|
29
|
+
If these guidelines aren't helpful, and you're stuck, please post a message on [discuss.dry-rb.org](https://discuss.dry-rb.org).
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'dry/system/container'
|
2
|
+
|
3
|
+
class App < Dry::System::Container
|
4
|
+
load_paths!('lib', 'system')
|
5
|
+
|
6
|
+
auto_register!('lib') do |config|
|
7
|
+
config.instance do |component|
|
8
|
+
# some custom initialization logic
|
9
|
+
component.instance
|
10
|
+
end
|
11
|
+
|
12
|
+
config.exclude do |component|
|
13
|
+
component.path =~ /entities/
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'dry/system/constants'
|
2
|
+
require 'dry/system/magic_comments_parser'
|
3
|
+
require 'dry/system/auto_registrar/configuration'
|
2
4
|
|
3
5
|
module Dry
|
4
6
|
module System
|
@@ -6,7 +8,7 @@ module Dry
|
|
6
8
|
#
|
7
9
|
# This is currently configured by default for every System::Container.
|
8
10
|
# Auto-registrar objects are responsible for loading files from configured
|
9
|
-
# auto-register paths and registering components automatically
|
11
|
+
# auto-register paths and registering components automatically within the
|
10
12
|
# container.
|
11
13
|
#
|
12
14
|
# @api private
|
@@ -26,14 +28,14 @@ module Dry
|
|
26
28
|
end
|
27
29
|
|
28
30
|
# @api private
|
29
|
-
def call(dir
|
31
|
+
def call(dir)
|
32
|
+
registration_config = Configuration.new
|
33
|
+
yield(registration_config) if block_given?
|
30
34
|
components(dir).each do |component|
|
35
|
+
next if !component.auto_register? || registration_config.exclude.(component)
|
36
|
+
|
31
37
|
container.require_component(component) do
|
32
|
-
|
33
|
-
register(component.identifier, yield(component))
|
34
|
-
else
|
35
|
-
register(component.identifier) { component.instance }
|
36
|
-
end
|
38
|
+
register(component.identifier) { registration_config.instance.(component) }
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
@@ -42,23 +44,31 @@ module Dry
|
|
42
44
|
|
43
45
|
# @api private
|
44
46
|
def components(dir)
|
45
|
-
|
46
|
-
map { |
|
47
|
+
files(dir).
|
48
|
+
map { |file_name| [file_name, file_options(file_name)] }.
|
49
|
+
map { |(file_name, options)| component(relative_path(dir, file_name), **options) }.
|
47
50
|
reject { |component| key?(component.identifier) }
|
48
51
|
end
|
49
52
|
|
50
53
|
# @api private
|
51
|
-
def
|
54
|
+
def files(dir)
|
55
|
+
Dir["#{root}/#{dir}/**/*.rb"]
|
56
|
+
end
|
57
|
+
|
58
|
+
# @api private
|
59
|
+
def relative_path(dir, file_path)
|
52
60
|
dir_root = root.join(dir.to_s.split('/')[0])
|
61
|
+
file_path.to_s.sub("#{dir_root}/", '').sub(RB_EXT, EMPTY_STRING)
|
62
|
+
end
|
53
63
|
|
54
|
-
|
55
|
-
|
56
|
-
|
64
|
+
# @api private
|
65
|
+
def file_options(file_name)
|
66
|
+
MagicCommentsParser.(file_name)
|
57
67
|
end
|
58
68
|
|
59
69
|
# @api private
|
60
|
-
def component(path)
|
61
|
-
container.component(path)
|
70
|
+
def component(path, options)
|
71
|
+
container.component(path, options)
|
62
72
|
end
|
63
73
|
|
64
74
|
# @api private
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Dry
|
2
|
+
module System
|
3
|
+
class AutoRegistrar
|
4
|
+
# Default auto_registrar configuration
|
5
|
+
#
|
6
|
+
# This is currently configured by default for every System::Container.
|
7
|
+
# Configuration allows to define custom initializtion logic as well
|
8
|
+
# as exclusion, for each component that is been register by Dry::System
|
9
|
+
# auto-registration.
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
class Configuration
|
13
|
+
DEFAULT_INSTANCE = -> component { component.instance }.freeze
|
14
|
+
FALSE_PROC = -> * { false }.freeze
|
15
|
+
|
16
|
+
def self.setting(name)
|
17
|
+
define_method(name) do |&block|
|
18
|
+
ivar = "@#{name}"
|
19
|
+
|
20
|
+
if block
|
21
|
+
instance_variable_set(ivar, block)
|
22
|
+
else
|
23
|
+
instance_variable_get(ivar)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
setting :exclude
|
29
|
+
setting :instance
|
30
|
+
|
31
|
+
# @api private
|
32
|
+
def initialize
|
33
|
+
@instance = DEFAULT_INSTANCE
|
34
|
+
@exclude = FALSE_PROC
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/dry/system/booter.rb
CHANGED
@@ -66,11 +66,11 @@ module Dry
|
|
66
66
|
def call(name)
|
67
67
|
container, finalizer = finalizers[name]
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
69
|
+
raise ComponentFileMismatchError.new(name, registered_booted_keys) unless finalizer
|
70
|
+
|
71
|
+
lifecycle = Lifecycle.new(container, &finalizer)
|
72
|
+
yield(lifecycle) if block_given?
|
73
|
+
lifecycle
|
74
74
|
end
|
75
75
|
|
76
76
|
# @api private
|
@@ -81,6 +81,11 @@ module Dry
|
|
81
81
|
|
82
82
|
private
|
83
83
|
|
84
|
+
# @api private
|
85
|
+
def registered_booted_keys
|
86
|
+
finalizers.keys - booted.keys
|
87
|
+
end
|
88
|
+
|
84
89
|
# @api private
|
85
90
|
def boot_files
|
86
91
|
path.join('**/*.rb').to_s
|
data/lib/dry/system/component.rb
CHANGED
@@ -47,9 +47,7 @@ module Dry
|
|
47
47
|
options = DEFAULT_OPTIONS.merge(options || {})
|
48
48
|
|
49
49
|
ns, sep = options.values_at(:namespace, :separator)
|
50
|
-
|
51
|
-
ns_name = ensure_valid_namespace(ns, sep)
|
52
|
-
identifier = ensure_valid_identifier(name, ns_name, sep)
|
50
|
+
identifier = ensure_valid_identifier(name, ns, sep)
|
53
51
|
|
54
52
|
path = name.to_s.gsub(sep, PATH_SEPARATOR)
|
55
53
|
loader = options.fetch(:loader, Loader).new(path)
|
@@ -59,21 +57,14 @@ module Dry
|
|
59
57
|
end
|
60
58
|
|
61
59
|
# @api private
|
62
|
-
def self.
|
63
|
-
ns_name = ns.to_s
|
64
|
-
raise InvalidNamespaceError, ns_name if ns && ns_name.include?(sep)
|
65
|
-
ns_name
|
66
|
-
end
|
67
|
-
|
68
|
-
# @api private
|
69
|
-
def self.ensure_valid_identifier(name, ns_name, sep)
|
60
|
+
def self.ensure_valid_identifier(name, ns, sep)
|
70
61
|
keys = name.to_s.scan(WORD_REGEX)
|
71
62
|
|
72
63
|
if keys.uniq.size != keys.size
|
73
64
|
raise InvalidComponentError, name, 'duplicated keys in the name'
|
74
65
|
end
|
75
66
|
|
76
|
-
keys.reject { |s|
|
67
|
+
keys.reject { |s| ns.to_s.include?(s) }.join(sep)
|
77
68
|
end
|
78
69
|
|
79
70
|
# @api private
|
@@ -152,6 +143,11 @@ module Dry
|
|
152
143
|
options[:namespace]
|
153
144
|
end
|
154
145
|
|
146
|
+
# @api private
|
147
|
+
def auto_register?
|
148
|
+
!!options.fetch(:auto_register) { true }
|
149
|
+
end
|
150
|
+
|
155
151
|
# @api private
|
156
152
|
def root_key
|
157
153
|
namespaces.first
|
data/lib/dry/system/constants.rb
CHANGED
data/lib/dry/system/container.rb
CHANGED
@@ -8,6 +8,7 @@ require 'dry/system/errors'
|
|
8
8
|
require 'dry/system/loader'
|
9
9
|
require 'dry/system/booter'
|
10
10
|
require 'dry/system/auto_registrar'
|
11
|
+
require 'dry/system/manual_registrar'
|
11
12
|
require 'dry/system/importer'
|
12
13
|
require 'dry/system/component'
|
13
14
|
require 'dry/system/constants'
|
@@ -67,10 +68,12 @@ module Dry
|
|
67
68
|
setting :default_namespace
|
68
69
|
setting :root, Pathname.pwd.freeze
|
69
70
|
setting :system_dir, 'system'.freeze
|
71
|
+
setting :registrations_dir, 'container'.freeze
|
70
72
|
setting :auto_register, []
|
71
73
|
setting :loader, Dry::System::Loader
|
72
74
|
setting :booter, Dry::System::Booter
|
73
75
|
setting :auto_registrar, Dry::System::AutoRegistrar
|
76
|
+
setting :manual_registrar, Dry::System::ManualRegistrar
|
74
77
|
setting :importer, Dry::System::Importer
|
75
78
|
|
76
79
|
class << self
|
@@ -101,7 +104,6 @@ module Dry
|
|
101
104
|
# class Core < Dry::System::Container
|
102
105
|
# configure do |config|
|
103
106
|
# config.root = Pathname("/path/to/app")
|
104
|
-
# config.name = :core
|
105
107
|
# config.auto_register = %w(lib/apis lib/core)
|
106
108
|
# end
|
107
109
|
# end
|
@@ -112,14 +114,13 @@ module Dry
|
|
112
114
|
# class MyApp < Dry::System::Container
|
113
115
|
# configure do |config|
|
114
116
|
# config.root = Pathname("/path/to/app")
|
115
|
-
# config.name = :core
|
116
117
|
# config.auto_register = %w(lib/apis lib/core)
|
117
118
|
# end
|
118
119
|
#
|
119
120
|
# import core: Core
|
120
121
|
# end
|
121
122
|
#
|
122
|
-
# @param other [Hash,Dry::Container::Namespace
|
123
|
+
# @param other [Hash,Dry::Container::Namespace]
|
123
124
|
#
|
124
125
|
# @api public
|
125
126
|
def import(other)
|
@@ -127,9 +128,7 @@ module Dry
|
|
127
128
|
when Hash then importer.register(other)
|
128
129
|
when Dry::Container::Namespace then super
|
129
130
|
else
|
130
|
-
|
131
|
-
importer.register(other.config.name => other)
|
132
|
-
end
|
131
|
+
raise ArgumentError, "+other+ must be a hash of names and systems, or a Dry::Container namespace"
|
133
132
|
end
|
134
133
|
end
|
135
134
|
|
@@ -247,6 +246,7 @@ module Dry
|
|
247
246
|
|
248
247
|
importer.finalize!
|
249
248
|
booter.finalize!
|
249
|
+
manual_registrar.finalize!
|
250
250
|
auto_registrar.finalize!
|
251
251
|
|
252
252
|
freeze
|
@@ -312,11 +312,18 @@ module Dry
|
|
312
312
|
self
|
313
313
|
end
|
314
314
|
|
315
|
+
# @api public
|
316
|
+
def load_registrations!(name)
|
317
|
+
manual_registrar.(name)
|
318
|
+
self
|
319
|
+
end
|
320
|
+
|
315
321
|
# Auto-registers components from the provided directory
|
316
322
|
#
|
317
323
|
# Typically you want to configure auto_register directories, and it will
|
318
324
|
# work automatically. Use this method in cases where you want to have an
|
319
|
-
# explicit way where some components are auto-registered
|
325
|
+
# explicit way where some components are auto-registered, or if you want
|
326
|
+
# to exclude some components from been auto-registered
|
320
327
|
#
|
321
328
|
# @example
|
322
329
|
# class MyApp < Dry::System::Container
|
@@ -328,15 +335,21 @@ module Dry
|
|
328
335
|
# auto_register!('lib/core')
|
329
336
|
#
|
330
337
|
# # with a dir and a custom registration block
|
331
|
-
# auto_register!('lib/core') do |
|
332
|
-
#
|
338
|
+
# auto_register!('lib/core') do |config|
|
339
|
+
# config.instance do |component|
|
340
|
+
# # custom way of initializing a component
|
341
|
+
# end
|
342
|
+
#
|
343
|
+
# config.exclude do |component|
|
344
|
+
# # return true to exclude component from auto-registration
|
345
|
+
# end
|
333
346
|
# end
|
334
347
|
# end
|
335
348
|
#
|
336
349
|
# @param [String] dir The dir name relative to the root dir
|
337
350
|
#
|
338
|
-
# @yield
|
339
|
-
# @see
|
351
|
+
# @yield AutoRegistrar::Configuration
|
352
|
+
# @see AutoRegistrar::Configuration
|
340
353
|
#
|
341
354
|
# @return [self]
|
342
355
|
#
|
@@ -435,18 +448,24 @@ module Dry
|
|
435
448
|
@auto_registrar ||= config.auto_registrar.new(self)
|
436
449
|
end
|
437
450
|
|
451
|
+
# @api private
|
452
|
+
def manual_registrar
|
453
|
+
@manual_registrar ||= config.manual_registrar.new(self)
|
454
|
+
end
|
455
|
+
|
438
456
|
# @api private
|
439
457
|
def importer
|
440
458
|
@importer ||= config.importer.new(self)
|
441
459
|
end
|
442
460
|
|
443
461
|
# @api private
|
444
|
-
def component(key)
|
462
|
+
def component(key, **options)
|
445
463
|
Component.new(
|
446
464
|
key,
|
447
465
|
loader: config.loader,
|
448
466
|
namespace: config.default_namespace,
|
449
|
-
separator: config.namespace_separator
|
467
|
+
separator: config.namespace_separator,
|
468
|
+
**options,
|
450
469
|
)
|
451
470
|
end
|
452
471
|
|
@@ -483,15 +502,17 @@ module Dry
|
|
483
502
|
private
|
484
503
|
|
485
504
|
# @api private
|
486
|
-
def load_local_component(component,
|
505
|
+
def load_local_component(component, default_namespace_fallback = false)
|
487
506
|
if component.bootable?(booter.path) || component.file_exists?(load_paths)
|
488
507
|
booter.boot_dependency(component) unless frozen?
|
489
508
|
|
490
509
|
require_component(component) do
|
491
510
|
register(component.identifier) { component.instance }
|
492
511
|
end
|
493
|
-
elsif !
|
512
|
+
elsif !default_namespace_fallback
|
494
513
|
load_local_component(component.prepend(config.default_namespace), true)
|
514
|
+
elsif manual_registrar.file_exists?(component)
|
515
|
+
manual_registrar.(component)
|
495
516
|
else
|
496
517
|
raise ComponentLoadError, component
|
497
518
|
end
|
data/lib/dry/system/errors.rb
CHANGED
@@ -10,21 +10,21 @@ module Dry
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
# Error raised when
|
13
|
+
# Error raised when booter file do not match with register component
|
14
14
|
#
|
15
15
|
# @api public
|
16
|
-
|
17
|
-
def initialize(
|
18
|
-
super("
|
16
|
+
ComponentFileMismatchError = Class.new(StandardError) do
|
17
|
+
def initialize(filename, registered_booted_keys)
|
18
|
+
super("Mismatch between filename +#{filename}+ and registered components +#{registered_booted_keys}+")
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
# Error raised when
|
22
|
+
# Error raised when a resolved component couldn't be found
|
23
23
|
#
|
24
24
|
# @api public
|
25
|
-
|
26
|
-
def initialize(
|
27
|
-
super("
|
25
|
+
ComponentLoadError = Class.new(StandardError) do
|
26
|
+
def initialize(component)
|
27
|
+
super("could not load component #{component.inspect}")
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Dry
|
2
|
+
module System
|
3
|
+
class MagicCommentsParser
|
4
|
+
VALID_LINE_RE = /^(#.*)?$/.freeze
|
5
|
+
COMMENT_RE = /^#\s+(?<name>[A-Za-z]{1}[A-Za-z0-9_]+):\s+(?<value>.+?)$/.freeze
|
6
|
+
|
7
|
+
COERCIONS = {
|
8
|
+
'true' => true,
|
9
|
+
'false' => false,
|
10
|
+
}.freeze
|
11
|
+
|
12
|
+
def self.call(file_name)
|
13
|
+
{}.tap do |options|
|
14
|
+
File.foreach(file_name) do |line|
|
15
|
+
break unless line =~ VALID_LINE_RE
|
16
|
+
|
17
|
+
if (comment = line.match(COMMENT_RE))
|
18
|
+
options[comment[:name].to_sym] = coerce(comment[:value])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def self.coerce(value)
|
27
|
+
COERCIONS.fetch(value) { value }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'dry/system/constants'
|
3
|
+
|
4
|
+
module Dry
|
5
|
+
module System
|
6
|
+
# Default manual registration implementation
|
7
|
+
#
|
8
|
+
# This is currently configured by default for every System::Container.
|
9
|
+
# Manual registrar objects are responsible for loading files from configured
|
10
|
+
# manual registration paths, which should hold code to explicitly register
|
11
|
+
# certain objects with the container.
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
class ManualRegistrar
|
15
|
+
attr_reader :container
|
16
|
+
|
17
|
+
attr_reader :config
|
18
|
+
|
19
|
+
def initialize(container)
|
20
|
+
@container = container
|
21
|
+
@config = container.config
|
22
|
+
end
|
23
|
+
|
24
|
+
# @api private
|
25
|
+
def finalize!
|
26
|
+
Dir[registrations_dir.join(RB_GLOB)].each do |file|
|
27
|
+
call(File.basename(file, RB_EXT))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# @api private
|
32
|
+
def call(name)
|
33
|
+
name = name.respond_to?(:root_key) ? name.root_key.to_s : name
|
34
|
+
|
35
|
+
require(root.join(config.registrations_dir, name))
|
36
|
+
end
|
37
|
+
|
38
|
+
def file_exists?(name)
|
39
|
+
name = name.respond_to?(:root_key) ? name.root_key.to_s : name
|
40
|
+
|
41
|
+
File.exist?(File.join(registrations_dir, "#{name}#{RB_EXT}"))
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# @api private
|
47
|
+
def registrations_dir
|
48
|
+
root.join(config.registrations_dir)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @api private
|
52
|
+
def root
|
53
|
+
Pathname(container.root)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/dry/system/version.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This is a file with a mix of valid and invalid magic comments
|
4
|
+
|
5
|
+
# valid_comment: hello
|
6
|
+
# true_comment: true
|
7
|
+
# false_comment: false
|
8
|
+
# comment_123: alpha-numeric and underscores allowed
|
9
|
+
# 123_will_not_match: will not match
|
10
|
+
# not-using-underscores: value for comment using dashes
|
11
|
+
|
12
|
+
# not_at_start_of_line: will not match
|
13
|
+
|
14
|
+
module Test
|
15
|
+
end
|
16
|
+
|
17
|
+
# after_code: will not match
|
@@ -0,0 +1,18 @@
|
|
1
|
+
RSpec.describe 'Lazy-loading manual registration files' do
|
2
|
+
before do
|
3
|
+
module Test
|
4
|
+
class Container < Dry::System::Container
|
5
|
+
configure do |config|
|
6
|
+
config.root = SPEC_ROOT.join('fixtures/manual_registration').realpath
|
7
|
+
end
|
8
|
+
|
9
|
+
load_paths!('lib')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'loads a manual registration file if the component could not be found' do
|
15
|
+
expect(Test::Container['foo.special']).to be_a(Test::Foo)
|
16
|
+
expect(Test::Container['foo.special'].name).to eq "special"
|
17
|
+
end
|
18
|
+
end
|
@@ -36,7 +36,7 @@ RSpec.describe 'Lazy-booting external deps' do
|
|
36
36
|
|
37
37
|
before do
|
38
38
|
module Test
|
39
|
-
Umbrella.import(App)
|
39
|
+
Umbrella.import(main: App)
|
40
40
|
Import = Umbrella.injector
|
41
41
|
end
|
42
42
|
end
|
@@ -53,7 +53,7 @@ RSpec.describe 'Lazy-booting external deps' do
|
|
53
53
|
|
54
54
|
before do
|
55
55
|
module Test
|
56
|
-
App.import(Umbrella)
|
56
|
+
App.import(core: Umbrella)
|
57
57
|
Import = App.injector
|
58
58
|
end
|
59
59
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'dry/system/auto_registrar/configuration'
|
2
|
+
|
3
|
+
RSpec.describe Dry::System::AutoRegistrar::Configuration do
|
4
|
+
subject(:auto_registration_conf) { Dry::System::AutoRegistrar::Configuration.new }
|
5
|
+
|
6
|
+
describe "deafult values" do
|
7
|
+
it "will setup exclude default proc" do
|
8
|
+
expect(subject.exclude.(8)).to eq false
|
9
|
+
end
|
10
|
+
|
11
|
+
it "will setup instance default proc" do
|
12
|
+
component = double("component")
|
13
|
+
expect(component).to receive(:instance)
|
14
|
+
subject.instance.(component)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "add custom proc object to configuration" do
|
19
|
+
it "execute proc that was previously save" do
|
20
|
+
proc = Proc.new { |value| value + 1 }
|
21
|
+
subject.instance(&proc)
|
22
|
+
result = subject.instance.(5)
|
23
|
+
expect(result).to eq 6
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/spec/unit/component_spec.rb
CHANGED
@@ -12,11 +12,6 @@ RSpec.describe Dry::System::Component do
|
|
12
12
|
expect(create.()).to be(create.())
|
13
13
|
end
|
14
14
|
|
15
|
-
it 'raises when namespace includes a separator' do
|
16
|
-
expect { Dry::System::Component.new('foo.bar.baz', namespace: 'foo.bar') }
|
17
|
-
.to raise_error(Dry::System::InvalidNamespaceError, /foo\.bar/)
|
18
|
-
end
|
19
|
-
|
20
15
|
it 'raises when identifier/path has duplicated keys' do
|
21
16
|
expect { Dry::System::Component.new('foo.bar.foo', namespace: 'foo') }
|
22
17
|
.to raise_error(Dry::System::InvalidComponentError, /foo\.bar\.foo/)
|
@@ -16,9 +16,13 @@ RSpec.describe Dry::System::Container, '.auto_register!' do
|
|
16
16
|
it { expect(Test::Container['foo']).to be_an_instance_of(Foo) }
|
17
17
|
it { expect(Test::Container['bar']).to be_an_instance_of(Bar) }
|
18
18
|
it { expect(Test::Container['bar.baz']).to be_an_instance_of(Bar::Baz) }
|
19
|
+
|
20
|
+
it "doesn't register files with inline option 'auto_register: false'" do
|
21
|
+
expect(Test::Container.key?('no_register')).to eql false
|
22
|
+
end
|
19
23
|
end
|
20
24
|
|
21
|
-
context 'with custom
|
25
|
+
context 'with custom configuration block' do
|
22
26
|
before do
|
23
27
|
class Test::Container < Dry::System::Container
|
24
28
|
configure do |config|
|
@@ -29,14 +33,21 @@ RSpec.describe Dry::System::Container, '.auto_register!' do
|
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
32
|
-
it '
|
33
|
-
Test::Container.auto_register!('components') do |
|
34
|
-
component
|
36
|
+
it 'exclude specific components' do
|
37
|
+
Test::Container.auto_register!('components') do |config|
|
38
|
+
config.instance do |component|
|
39
|
+
component.identifier
|
40
|
+
end
|
41
|
+
|
42
|
+
config.exclude do |component|
|
43
|
+
component.path =~ /bar/
|
44
|
+
end
|
35
45
|
end
|
36
46
|
|
37
47
|
expect(Test::Container['foo']).to eql('foo')
|
38
|
-
|
39
|
-
expect(Test::Container
|
48
|
+
|
49
|
+
expect(Test::Container.key?('bar')).to eql false
|
50
|
+
expect(Test::Container.key?('bar.baz')).to eql false
|
40
51
|
end
|
41
52
|
end
|
42
53
|
|
@@ -58,6 +69,23 @@ RSpec.describe Dry::System::Container, '.auto_register!' do
|
|
58
69
|
specify { expect(Test::Container['foo']).to be_a(Namespaced::Foo) }
|
59
70
|
end
|
60
71
|
|
72
|
+
context 'standard loader with a default namespace with multiple level' do
|
73
|
+
before do
|
74
|
+
class Test::Container < Dry::System::Container
|
75
|
+
configure do |config|
|
76
|
+
config.root = SPEC_ROOT.join('fixtures').realpath
|
77
|
+
config.default_namespace = 'multiple.level'
|
78
|
+
end
|
79
|
+
|
80
|
+
load_paths!('multiple_namespaced_components')
|
81
|
+
auto_register!('multiple_namespaced_components')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
specify { expect(Test::Container['baz']).to be_a(Multiple::Level::Baz) }
|
86
|
+
specify { expect(Test::Container['foz']).to be_a(Multiple::Level::Foz) }
|
87
|
+
end
|
88
|
+
|
61
89
|
context 'with a custom loader' do
|
62
90
|
before do
|
63
91
|
class Test::Loader < Dry::System::Loader
|
@@ -9,31 +9,14 @@ RSpec.describe Dry::System::Container, '.import' do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
expect(app.key?('persistence.users')).to be(false)
|
12
|
+
it 'imports one container into another' do
|
13
|
+
app.import(persistence: db)
|
15
14
|
|
16
|
-
|
15
|
+
expect(app.key?('persistence.users')).to be(false)
|
17
16
|
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'when a container has a name' do
|
23
|
-
before do
|
24
|
-
db.configure { |c| c.name = :persistence }
|
25
|
-
app.import(db)
|
26
|
-
end
|
27
|
-
|
28
|
-
it_behaves_like 'an extended container'
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'when container does not have a name' do
|
32
|
-
before do
|
33
|
-
app.import(persistence: db)
|
34
|
-
end
|
17
|
+
app.finalize!
|
35
18
|
|
36
|
-
|
19
|
+
expect(app['persistence.users']).to eql(%w(jane joe))
|
37
20
|
end
|
38
21
|
|
39
22
|
describe 'import module' do
|
data/spec/unit/container_spec.rb
CHANGED
@@ -142,6 +142,14 @@ RSpec.describe Dry::System::Container do
|
|
142
142
|
'component identifier +foo+ is invalid or boot file is missing'
|
143
143
|
)
|
144
144
|
end
|
145
|
+
|
146
|
+
describe "missmatch betwenn finalize name and registered component" do
|
147
|
+
it "raises a meaningful error" do
|
148
|
+
expect{
|
149
|
+
container.boot!(:hell)
|
150
|
+
}.to raise_error(Dry::System::ComponentFileMismatchError)
|
151
|
+
end
|
152
|
+
end
|
145
153
|
end
|
146
154
|
|
147
155
|
context 'with the default core dir' do
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'dry/system/magic_comments_parser'
|
2
|
+
|
3
|
+
RSpec.describe Dry::System::MagicCommentsParser, '.call' do
|
4
|
+
let(:file_name) { SPEC_ROOT.join('fixtures/magic_comments/comments.rb') }
|
5
|
+
let(:comments) { described_class.(file_name) }
|
6
|
+
|
7
|
+
it 'makes comment names available as symbols' do
|
8
|
+
expect(comments.key?(:valid_comment)).to eql true
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'finds magic comments after other commented lines or blank lines' do
|
12
|
+
expect(comments[:valid_comment]).to eq 'hello'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'does not match comments with invalid names' do
|
16
|
+
expect(comments.values).not_to include 'value for comment using dashes'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'supports comment names with alpha-numeric characters and underscores (numbers not allowed for first character)' do
|
20
|
+
expect(comments[:comment_123]).to eq 'alpha-numeric and underscores allowed'
|
21
|
+
expect(comments.keys).not_to include(:"123_will_not_match")
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'only matches comments at the start of the line' do
|
25
|
+
expect(comments.key?(:not_at_start_of_line)).to eql false
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'does not match any comments after any lines of code' do
|
29
|
+
expect(comments.key?(:after_code)).to eql false
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'coercions' do
|
33
|
+
it 'coerces "true" to true' do
|
34
|
+
expect(comments[:true_comment]).to eq true
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'coerces "false" to false' do
|
38
|
+
expect(comments[:false_comment]).to eq false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-system
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inflecto
|
@@ -145,16 +145,22 @@ extra_rdoc_files: []
|
|
145
145
|
files:
|
146
146
|
- ".gitignore"
|
147
147
|
- ".rspec"
|
148
|
-
- ".rubocop.yml"
|
149
|
-
- ".rubocop_todo.yml"
|
150
148
|
- ".travis.yml"
|
151
149
|
- ".yardopts"
|
152
150
|
- CHANGELOG.md
|
151
|
+
- CONTRIBUTING.md
|
153
152
|
- Gemfile
|
154
153
|
- LICENSE
|
155
154
|
- README.md
|
156
155
|
- Rakefile
|
157
156
|
- dry-system.gemspec
|
157
|
+
- examples/custom_configuration_auto_register/Gemfile
|
158
|
+
- examples/custom_configuration_auto_register/lib/entities/user.rb
|
159
|
+
- examples/custom_configuration_auto_register/lib/user_repo.rb
|
160
|
+
- examples/custom_configuration_auto_register/run.rb
|
161
|
+
- examples/custom_configuration_auto_register/system/boot/persistence.rb
|
162
|
+
- examples/custom_configuration_auto_register/system/container.rb
|
163
|
+
- examples/custom_configuration_auto_register/system/import.rb
|
158
164
|
- examples/standalone/Gemfile
|
159
165
|
- examples/standalone/lib/user_repo.rb
|
160
166
|
- examples/standalone/run.rb
|
@@ -164,6 +170,7 @@ files:
|
|
164
170
|
- lib/dry-system.rb
|
165
171
|
- lib/dry/system.rb
|
166
172
|
- lib/dry/system/auto_registrar.rb
|
173
|
+
- lib/dry/system/auto_registrar/configuration.rb
|
167
174
|
- lib/dry/system/booter.rb
|
168
175
|
- lib/dry/system/component.rb
|
169
176
|
- lib/dry/system/constants.rb
|
@@ -172,10 +179,13 @@ files:
|
|
172
179
|
- lib/dry/system/importer.rb
|
173
180
|
- lib/dry/system/lifecycle.rb
|
174
181
|
- lib/dry/system/loader.rb
|
182
|
+
- lib/dry/system/magic_comments_parser.rb
|
183
|
+
- lib/dry/system/manual_registrar.rb
|
175
184
|
- lib/dry/system/version.rb
|
176
185
|
- spec/fixtures/components/bar.rb
|
177
186
|
- spec/fixtures/components/bar/baz.rb
|
178
187
|
- spec/fixtures/components/foo.rb
|
188
|
+
- spec/fixtures/components/no_register.rb
|
179
189
|
- spec/fixtures/import_test/config/application.yml
|
180
190
|
- spec/fixtures/import_test/lib/test/bar.rb
|
181
191
|
- spec/fixtures/import_test/lib/test/foo.rb
|
@@ -187,9 +197,15 @@ files:
|
|
187
197
|
- spec/fixtures/lazytest/lib/test/models/book.rb
|
188
198
|
- spec/fixtures/lazytest/lib/test/models/user.rb
|
189
199
|
- spec/fixtures/lazytest/system/boot/bar.rb
|
200
|
+
- spec/fixtures/magic_comments/comments.rb
|
201
|
+
- spec/fixtures/manual_registration/container/foo.rb
|
202
|
+
- spec/fixtures/manual_registration/lib/test/foo.rb
|
203
|
+
- spec/fixtures/multiple_namespaced_components/multiple/level/baz.rb
|
204
|
+
- spec/fixtures/multiple_namespaced_components/multiple/level/foz.rb
|
190
205
|
- spec/fixtures/namespaced_components/namespaced/bar.rb
|
191
206
|
- spec/fixtures/namespaced_components/namespaced/foo.rb
|
192
207
|
- spec/fixtures/other/config/boot/bar.rb
|
208
|
+
- spec/fixtures/other/config/boot/hell.rb
|
193
209
|
- spec/fixtures/other/lib/test/dep.rb
|
194
210
|
- spec/fixtures/other/lib/test/foo.rb
|
195
211
|
- spec/fixtures/other/lib/test/models.rb
|
@@ -207,11 +223,14 @@ files:
|
|
207
223
|
- spec/fixtures/test/system/boot/bar.rb
|
208
224
|
- spec/fixtures/test/system/boot/client.rb
|
209
225
|
- spec/fixtures/test/system/boot/db.rb
|
226
|
+
- spec/fixtures/test/system/boot/hell.rb
|
210
227
|
- spec/fixtures/test/system/boot/logger.rb
|
211
228
|
- spec/fixtures/umbrella/system/boot/db.rb
|
212
229
|
- spec/integration/boot_spec.rb
|
230
|
+
- spec/integration/container/lazy_loading/manual_registration_spec.rb
|
213
231
|
- spec/integration/import_spec.rb
|
214
232
|
- spec/spec_helper.rb
|
233
|
+
- spec/unit/auto_registrar/configuration_spec.rb
|
215
234
|
- spec/unit/component_spec.rb
|
216
235
|
- spec/unit/container/auto_register_spec.rb
|
217
236
|
- spec/unit/container/finalize_spec.rb
|
@@ -219,6 +238,7 @@ files:
|
|
219
238
|
- spec/unit/container/injector_spec.rb
|
220
239
|
- spec/unit/container_spec.rb
|
221
240
|
- spec/unit/loader_spec.rb
|
241
|
+
- spec/unit/magic_comments_parser_spec.rb
|
222
242
|
homepage: http://dry-rb.org/gems/dry-system
|
223
243
|
licenses:
|
224
244
|
- MIT
|
@@ -239,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
239
259
|
version: '0'
|
240
260
|
requirements: []
|
241
261
|
rubyforge_project:
|
242
|
-
rubygems_version: 2.6.
|
262
|
+
rubygems_version: 2.6.11
|
243
263
|
signing_key:
|
244
264
|
specification_version: 4
|
245
265
|
summary: Organize your code into reusable components
|
@@ -247,6 +267,7 @@ test_files:
|
|
247
267
|
- spec/fixtures/components/bar.rb
|
248
268
|
- spec/fixtures/components/bar/baz.rb
|
249
269
|
- spec/fixtures/components/foo.rb
|
270
|
+
- spec/fixtures/components/no_register.rb
|
250
271
|
- spec/fixtures/import_test/config/application.yml
|
251
272
|
- spec/fixtures/import_test/lib/test/bar.rb
|
252
273
|
- spec/fixtures/import_test/lib/test/foo.rb
|
@@ -258,9 +279,15 @@ test_files:
|
|
258
279
|
- spec/fixtures/lazytest/lib/test/models/book.rb
|
259
280
|
- spec/fixtures/lazytest/lib/test/models/user.rb
|
260
281
|
- spec/fixtures/lazytest/system/boot/bar.rb
|
282
|
+
- spec/fixtures/magic_comments/comments.rb
|
283
|
+
- spec/fixtures/manual_registration/container/foo.rb
|
284
|
+
- spec/fixtures/manual_registration/lib/test/foo.rb
|
285
|
+
- spec/fixtures/multiple_namespaced_components/multiple/level/baz.rb
|
286
|
+
- spec/fixtures/multiple_namespaced_components/multiple/level/foz.rb
|
261
287
|
- spec/fixtures/namespaced_components/namespaced/bar.rb
|
262
288
|
- spec/fixtures/namespaced_components/namespaced/foo.rb
|
263
289
|
- spec/fixtures/other/config/boot/bar.rb
|
290
|
+
- spec/fixtures/other/config/boot/hell.rb
|
264
291
|
- spec/fixtures/other/lib/test/dep.rb
|
265
292
|
- spec/fixtures/other/lib/test/foo.rb
|
266
293
|
- spec/fixtures/other/lib/test/models.rb
|
@@ -278,11 +305,14 @@ test_files:
|
|
278
305
|
- spec/fixtures/test/system/boot/bar.rb
|
279
306
|
- spec/fixtures/test/system/boot/client.rb
|
280
307
|
- spec/fixtures/test/system/boot/db.rb
|
308
|
+
- spec/fixtures/test/system/boot/hell.rb
|
281
309
|
- spec/fixtures/test/system/boot/logger.rb
|
282
310
|
- spec/fixtures/umbrella/system/boot/db.rb
|
283
311
|
- spec/integration/boot_spec.rb
|
312
|
+
- spec/integration/container/lazy_loading/manual_registration_spec.rb
|
284
313
|
- spec/integration/import_spec.rb
|
285
314
|
- spec/spec_helper.rb
|
315
|
+
- spec/unit/auto_registrar/configuration_spec.rb
|
286
316
|
- spec/unit/component_spec.rb
|
287
317
|
- spec/unit/container/auto_register_spec.rb
|
288
318
|
- spec/unit/container/finalize_spec.rb
|
@@ -290,3 +320,4 @@ test_files:
|
|
290
320
|
- spec/unit/container/injector_spec.rb
|
291
321
|
- spec/unit/container_spec.rb
|
292
322
|
- spec/unit/loader_spec.rb
|
323
|
+
- spec/unit/magic_comments_parser_spec.rb
|
data/.rubocop.yml
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# Generated by `rubocop --auto-gen-config`
|
2
|
-
inherit_from: .rubocop_todo.yml
|
3
|
-
|
4
|
-
# No need to handle LoadError in spec helper
|
5
|
-
Lint/HandleExceptions:
|
6
|
-
Exclude:
|
7
|
-
- spec/spec_helper.rb
|
8
|
-
|
9
|
-
Style/FileName:
|
10
|
-
Exclude:
|
11
|
-
- 'lib/dry-component.rb'
|
12
|
-
|
13
|
-
# Documentation checked by Inch CI
|
14
|
-
Style/Documentation:
|
15
|
-
Enabled: false
|
16
|
-
|
17
|
-
# Ain't nobody got time for that!
|
18
|
-
Style/MethodCallParentheses:
|
19
|
-
Enabled: false
|
20
|
-
|
21
|
-
Style/Lambda:
|
22
|
-
Enabled: false
|
23
|
-
|
24
|
-
Style/BlockDelimiters:
|
25
|
-
Enabled: false
|
26
|
-
|
27
|
-
Style/LambdaCall:
|
28
|
-
EnforcedStyle: braces
|
29
|
-
|
30
|
-
Style/MultilineBlockChain:
|
31
|
-
Enabled: false
|
32
|
-
|
33
|
-
Style/StabbyLambdaParentheses:
|
34
|
-
EnforcedStyle: require_no_parentheses
|
data/.rubocop_todo.yml
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# This configuration was generated by
|
2
|
-
# `rubocop --auto-gen-config`
|
3
|
-
# on 2015-12-23 21:42:26 +0000 using RuboCop version 0.35.1.
|
4
|
-
# The point is for the user to remove these configuration records
|
5
|
-
# one by one as the offenses are removed from the code base.
|
6
|
-
# Note that changes in the inspected code, or installation of new
|
7
|
-
# versions of RuboCop, may require this file to be generated again.
|
8
|
-
|
9
|
-
# Offense count: 1
|
10
|
-
Metrics/AbcSize:
|
11
|
-
Max: 25
|
12
|
-
|
13
|
-
# Offense count: 1
|
14
|
-
# Configuration parameters: CountComments.
|
15
|
-
Metrics/ClassLength:
|
16
|
-
Max: 130
|
17
|
-
|
18
|
-
# Offense count: 1
|
19
|
-
# Configuration parameters: AllowURI, URISchemes.
|
20
|
-
Metrics/LineLength:
|
21
|
-
Max: 84
|
22
|
-
|
23
|
-
# Offense count: 2
|
24
|
-
# Configuration parameters: CountComments.
|
25
|
-
Metrics/MethodLength:
|
26
|
-
Max: 14
|