dry-system-rails 0.1.0 → 0.2.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/.codeclimate.yml +15 -0
- data/.gitignore +2 -0
- data/.rspec +1 -0
- data/.rubocop.yml +59 -0
- data/.travis.yml +15 -2
- data/CHANGELOG.md +11 -0
- data/Gemfile +3 -0
- data/README.md +55 -19
- data/Rakefile +2 -0
- data/dry-system-rails.gemspec +2 -0
- data/lib/dry-system-rails.rb +2 -0
- data/lib/dry/system/rails.rb +37 -55
- data/lib/dry/system/rails/container.rb +56 -0
- data/lib/dry/system/rails/railtie.rb +67 -0
- data/lib/dry/system/rails/version.rb +3 -1
- data/spec/dummy/Gemfile +2 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/models/user_repo.rb +1 -1
- data/spec/dummy/app/operations/create_user.rb +2 -0
- data/spec/dummy/app/workers/mailer_worker.rb +5 -0
- data/spec/dummy/config/application.rb +2 -0
- data/spec/dummy/config/boot.rb +2 -0
- data/spec/dummy/config/environment.rb +2 -0
- data/spec/dummy/config/environments/development.rb +2 -0
- data/spec/dummy/config/environments/production.rb +2 -0
- data/spec/dummy/config/environments/test.rb +2 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +2 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +2 -0
- data/spec/dummy/config/initializers/container.rb +8 -2
- data/spec/dummy/config/initializers/cookies_serializer.rb +2 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +2 -0
- data/spec/dummy/config/initializers/inflections.rb +2 -0
- data/spec/dummy/config/initializers/mime_types.rb +2 -0
- data/spec/dummy/config/initializers/new_framework_defaults.rb +2 -0
- data/spec/dummy/config/initializers/session_store.rb +2 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +2 -0
- data/spec/dummy/config/routes.rb +2 -0
- data/spec/dummy/config/spring.rb +2 -0
- data/spec/dummy/config/system/boot/persistence.rb +5 -1
- data/spec/dummy/lib/mailer.rb +2 -0
- data/spec/integration/container_spec.rb +12 -0
- data/spec/integration/environments_spec.rb +15 -0
- data/spec/integration/models/user_repo_spec.rb +2 -0
- data/spec/integration/railtie_spec.rb +25 -0
- data/spec/spec_helper.rb +17 -4
- metadata +15 -6
- data/spec/dummy/config/system/import.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90d51a08b5024e86dc3bf7af90b18b6f39a5d8f5bcc7cd219b57c0fac0a9670a
|
4
|
+
data.tar.gz: 81e0a1be3b3b7bcfe394bf21bf4931b11250c8612af936766622eb98a1a88d1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfd84104666878865808a1df1b13bd331475a2422fd92b8a6fb05acbb214e5fcbbce6427661037facf186f2cadacf42b2879816408f56030f2aef557d22affe9
|
7
|
+
data.tar.gz: 974009073ebe8cddc8ac6f61395e055257dedc90311fdcdf386ba0631b23d08abc2d09e569c193c795b90e48d455c07a6bd0d5a50e0b05579b454c008414996d
|
data/.codeclimate.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
version: "2"
|
2
|
+
|
3
|
+
prepare:
|
4
|
+
fetch:
|
5
|
+
- url: "https://raw.githubusercontent.com/dry-rb/devtools/master/.rubocop.yml"
|
6
|
+
path: ".rubocop.yml"
|
7
|
+
|
8
|
+
exclude_patterns:
|
9
|
+
- "benchmarks/"
|
10
|
+
- "examples/"
|
11
|
+
- "spec/"
|
12
|
+
|
13
|
+
plugins:
|
14
|
+
rubocop:
|
15
|
+
enabled: true
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.4
|
3
|
+
|
4
|
+
Style/EachWithObject:
|
5
|
+
Enabled: false
|
6
|
+
|
7
|
+
Style/StringLiterals:
|
8
|
+
Enabled: true
|
9
|
+
EnforcedStyle: single_quotes
|
10
|
+
|
11
|
+
Style/Alias:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Style/LambdaCall:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/StabbyLambdaParentheses:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Style/FormatString:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Layout/SpaceInLambdaLiteral:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
Layout/MultilineMethodCallIndentation:
|
27
|
+
Enabled: true
|
28
|
+
EnforcedStyle: indented
|
29
|
+
|
30
|
+
Metrics/LineLength:
|
31
|
+
Max: 100
|
32
|
+
|
33
|
+
Metrics/MethodLength:
|
34
|
+
Max: 22
|
35
|
+
|
36
|
+
Metrics/ClassLength:
|
37
|
+
Max: 150
|
38
|
+
|
39
|
+
Metrics/AbcSize:
|
40
|
+
Max: 20
|
41
|
+
|
42
|
+
Metrics/BlockLength:
|
43
|
+
Enabled: true
|
44
|
+
Exclude:
|
45
|
+
- 'spec/**/*_spec.rb'
|
46
|
+
|
47
|
+
Metrics/CyclomaticComplexity:
|
48
|
+
Enabled: true
|
49
|
+
Max: 10
|
50
|
+
|
51
|
+
Lint/BooleanSymbol:
|
52
|
+
Enabled: false
|
53
|
+
|
54
|
+
Style/AccessModifierDeclarations:
|
55
|
+
Enabled: false
|
56
|
+
|
57
|
+
Style/BlockDelimiters:
|
58
|
+
EnforcedStyle: semantic
|
59
|
+
|
data/.travis.yml
CHANGED
@@ -1,11 +1,24 @@
|
|
1
1
|
language: ruby
|
2
|
-
sudo: false
|
3
2
|
cache: bundler
|
4
3
|
bundler_args: --without console
|
4
|
+
before_script:
|
5
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
6
|
+
- chmod +x ./cc-test-reporter
|
7
|
+
- ./cc-test-reporter before-build
|
8
|
+
after_script:
|
9
|
+
- "[ -d coverage ] && ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
5
10
|
script:
|
6
11
|
- bundle exec rake spec
|
12
|
+
- RAILS_ENV=production bundle exec rspec --tag production_env
|
7
13
|
rvm:
|
8
|
-
- 2.
|
14
|
+
- 2.6.2
|
15
|
+
- 2.5.5
|
16
|
+
- 2.4.6
|
17
|
+
- 2.3.8
|
18
|
+
- truffleruby
|
19
|
+
matrix:
|
20
|
+
allow_failures:
|
21
|
+
- rvm: truffleruby
|
9
22
|
notifications:
|
10
23
|
email: false
|
11
24
|
webhooks:
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# v0.2.0 2019-04-16
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
- Support for code reloading in development environment (arielvalentin + solnic)
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
- [BREAKING] Initializer interface is now `Dry::System::Rails.container { ... }` which simply captures the block
|
10
|
+
to evaluate it in the context of the container class. This gives you full control over container creation (solnic)
|
11
|
+
|
1
12
|
# v0.1.0 2018-01-05
|
2
13
|
|
3
14
|
### Changed
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
[gem]: https://rubygems.org/gems/dry-system-rails
|
2
2
|
[travis]: https://travis-ci.org/dry-rb/dry-system-rails
|
3
3
|
[codeclimate]: https://codeclimate.com/github/dry-rb/dry-system-rails
|
4
|
-
[
|
4
|
+
[chat]: https://dry-rb.zulipchat.com
|
5
5
|
[inchpages]: http://inch-ci.org/github/dry-rb/dry-system-rails
|
6
6
|
|
7
|
-
# dry-system-rails [][chat]
|
8
8
|
|
9
9
|
[][gem]
|
10
10
|
[][travis]
|
@@ -22,39 +22,76 @@ Add it to your Gemfile:
|
|
22
22
|
gem 'dry-system-rails'
|
23
23
|
```
|
24
24
|
|
25
|
-
|
26
|
-
file with the following content:
|
27
|
-
|
28
|
-
``` ruby
|
29
|
-
# config/system/import.rb
|
30
|
-
module MyApp
|
31
|
-
Import = Container.injector
|
32
|
-
end
|
33
|
-
```
|
25
|
+
## Usage
|
34
26
|
|
35
27
|
To configure auto-registration create `config/initializer/system.rb` with the following content:
|
36
28
|
|
37
29
|
``` ruby
|
38
|
-
|
39
|
-
|
40
|
-
Dry::System::Rails.configure do |config|
|
30
|
+
Dry::System::Rails.container do
|
41
31
|
# you can set it to whatever you want and add as many dirs you want
|
42
32
|
config.auto_register << 'lib'
|
43
33
|
end
|
44
34
|
```
|
45
35
|
|
46
|
-
|
36
|
+
The `Dry::System::Rails::Railtie` creates a container and injector on your behalf at runtime and assign them to two constants `Container` and `Import`
|
37
|
+
under your applications root module. E.g. if your application is named `MyApp`, the `Railtie` will add the following constants:
|
38
|
+
|
39
|
+
* `MyApp::Container`
|
40
|
+
* `MyApp::Import`
|
41
|
+
|
42
|
+
Now you can use `MyApp::Import` to inject components into your objects and framework components:
|
47
43
|
|
48
44
|
``` ruby
|
49
45
|
# lib/user_repo.rb
|
50
46
|
class UserRepo
|
47
|
+
|
51
48
|
end
|
52
49
|
|
53
50
|
# lib/create_user.rb
|
54
|
-
require 'import'
|
55
|
-
|
56
51
|
class CreateUser
|
57
|
-
include Import['user_repo']
|
52
|
+
include MyApp::Import['user_repo']
|
53
|
+
end
|
54
|
+
|
55
|
+
# app/controllers/users_controller.rb
|
56
|
+
class UsersController < ApplicationController
|
57
|
+
include MyApp::Import['create_user']
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
61
|
+
## Working with Framework Dependencies
|
62
|
+
|
63
|
+
The Rails API is designed around the usage of class methods. If you choose to write domain logic in objects you will likely encounter a situation where your code will have to use one of the framework components. That is where manual registration using [bootable dependency](https://dry-rb.org/gems/dry-system/booting) will come in handy.
|
64
|
+
|
65
|
+
E.g. You have an object `CreateWidget` that needs to process widgets asynchronously with an `Widgets:NotificationJob` but you want to leverage dependency injection to decouple the components:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
# config/initializer/system.rb
|
69
|
+
Dry::System::Rails.configure do |config|
|
70
|
+
config.auto_register << 'lib'
|
71
|
+
end
|
72
|
+
|
73
|
+
# app/jobs/widgets/notification_job.rb
|
74
|
+
class Widgets::NotificationJob < ApplicationJob
|
75
|
+
end
|
76
|
+
|
77
|
+
# config/system/boot/application.rb
|
78
|
+
# Use bootable componets to manually register framework dependencies
|
79
|
+
MyApp::Container.boot(:application) do |app|
|
80
|
+
setup do
|
81
|
+
app.namespace(:widgets) do |widgets|
|
82
|
+
widgets.register(:notification, memoize: true) { Widgets::NotificationJob }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# lib/create_widget.rb
|
88
|
+
class CreateWidget
|
89
|
+
include MyApp::Import[job: 'widgets.notification']
|
90
|
+
|
91
|
+
def call(args)
|
92
|
+
# some logic that creates a widget command
|
93
|
+
job.perform_later(create_widget_command)
|
94
|
+
end
|
58
95
|
end
|
59
96
|
```
|
60
97
|
|
@@ -62,7 +99,6 @@ end
|
|
62
99
|
|
63
100
|
This is super alpha and it's missing a couple of things:
|
64
101
|
|
65
|
-
* Support for code reloading in dev mode
|
66
102
|
* Some generators to make UX nicer
|
67
103
|
* Tests for loading scripts (console etc)
|
68
104
|
* Tests for running rake tasks
|
data/Rakefile
CHANGED
data/dry-system-rails.gemspec
CHANGED
data/lib/dry-system-rails.rb
CHANGED
data/lib/dry/system/rails.rb
CHANGED
@@ -1,71 +1,53 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/system/rails/railtie'
|
4
|
+
require 'dry/system/rails/container'
|
3
5
|
|
4
6
|
module Dry
|
5
7
|
module System
|
8
|
+
# Initializer interface
|
9
|
+
#
|
10
|
+
# @example set up a customized container
|
11
|
+
# # config/initializer/system.rb
|
12
|
+
#
|
13
|
+
# Dry::System::Rails.container do
|
14
|
+
# use :monitoring
|
15
|
+
#
|
16
|
+
# config.auto_register << 'app/operations'
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# @api public
|
6
20
|
module Rails
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
container = create_container(config)
|
15
|
-
|
16
|
-
Railtie.configure do
|
17
|
-
config.container = container
|
18
|
-
end
|
21
|
+
# Set container block that will be evaluated in the context of the container
|
22
|
+
#
|
23
|
+
# @api public
|
24
|
+
def self.container(&block)
|
25
|
+
@container_block = block
|
26
|
+
self
|
19
27
|
end
|
20
28
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
29
|
+
# Create a new container class
|
30
|
+
#
|
31
|
+
# This is used during booting and reloading
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
def self.create_container(options = {})
|
35
|
+
container = Class.new(Container).configure { |config|
|
25
36
|
config.root = ::Rails.root
|
26
37
|
config.system_dir = config.root.join('config/system')
|
27
|
-
config.
|
28
|
-
|
38
|
+
config.update(options)
|
39
|
+
}
|
29
40
|
|
30
41
|
container.load_paths!('lib', 'app', 'app/models')
|
31
|
-
end
|
32
|
-
|
33
|
-
class Railtie < ::Rails::Railtie
|
34
|
-
initializer 'dry.system.create_container' do
|
35
|
-
System::Rails.configure
|
36
|
-
end
|
37
|
-
|
38
|
-
config.to_prepare do |*args|
|
39
|
-
Railtie.finalize!
|
40
|
-
end
|
41
42
|
|
42
|
-
|
43
|
-
if app_namespace.const_defined?(:Container)
|
44
|
-
app_namespace.send(:remove_const, :Container)
|
45
|
-
end
|
46
|
-
app_namespace.const_set(:Container, container)
|
47
|
-
container.config.name = name
|
48
|
-
container.finalize!
|
49
|
-
end
|
43
|
+
container.class_eval(&@container_block) if container_block
|
50
44
|
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
# TODO: we had to rename namespace=>app_namespace because
|
56
|
-
# Rake::DSL's Kernel#namespace *sometimes* breaks things.
|
57
|
-
# Currently we are missing specs verifying that rake tasks work
|
58
|
-
# correctly and those must be added!
|
59
|
-
def app_namespace
|
60
|
-
@app_namespace ||= begin
|
61
|
-
top_level_namespace = ::Rails.application.class.to_s.split('::').first
|
62
|
-
Object.const_get(top_level_namespace)
|
63
|
-
end
|
64
|
-
end
|
45
|
+
container
|
46
|
+
end
|
65
47
|
|
66
|
-
|
67
|
-
|
68
|
-
|
48
|
+
# @api private
|
49
|
+
def self.container_block
|
50
|
+
defined?(@container_block) && @container_block
|
69
51
|
end
|
70
52
|
end
|
71
53
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/system/container'
|
4
|
+
|
5
|
+
module Dry
|
6
|
+
module System
|
7
|
+
module Rails
|
8
|
+
# Customized Container class for Rails application
|
9
|
+
#
|
10
|
+
# @api public
|
11
|
+
class Container < System::Container
|
12
|
+
setting :auto_register_configs, [], &:dup
|
13
|
+
|
14
|
+
class << self
|
15
|
+
# Auto register files from the provided directory
|
16
|
+
#
|
17
|
+
# @api public
|
18
|
+
def auto_register!(dir, &block)
|
19
|
+
if block
|
20
|
+
config.auto_register_configs << [dir, block]
|
21
|
+
else
|
22
|
+
config.auto_register << dir
|
23
|
+
end
|
24
|
+
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
# @api private
|
29
|
+
def finalize!(options = {})
|
30
|
+
config.auto_register_configs.each do |(dir, block)|
|
31
|
+
auto_registrar.call(dir, &block)
|
32
|
+
end
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
# Use `require_dependency` to make code reloading work
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
def require_path(path)
|
40
|
+
require_dependency(path)
|
41
|
+
end
|
42
|
+
|
43
|
+
# This is called when reloading in dev mode
|
44
|
+
#
|
45
|
+
# @api private
|
46
|
+
def refresh_boot_files
|
47
|
+
booter.boot_files.each do |boot_file|
|
48
|
+
load(boot_file)
|
49
|
+
end
|
50
|
+
self
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/railtie'
|
4
|
+
|
5
|
+
module Dry
|
6
|
+
module System
|
7
|
+
module Rails
|
8
|
+
# System railtie is responsible for setting up a container and handling reloading in dev mode
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
class Railtie < ::Rails::Railtie
|
12
|
+
config.to_prepare do
|
13
|
+
Railtie.finalize!
|
14
|
+
end
|
15
|
+
|
16
|
+
# @api private
|
17
|
+
def finalize!
|
18
|
+
container = System::Rails.create_container(name: name)
|
19
|
+
|
20
|
+
set_or_reload(:Container, container)
|
21
|
+
set_or_reload(:Import, container.injector)
|
22
|
+
|
23
|
+
container.refresh_boot_files if reloading?
|
24
|
+
|
25
|
+
container.finalize!(freeze: freeze?)
|
26
|
+
end
|
27
|
+
|
28
|
+
# @api private
|
29
|
+
def freeze?
|
30
|
+
!::Rails.env.test?
|
31
|
+
end
|
32
|
+
|
33
|
+
# @api private
|
34
|
+
def reloading?
|
35
|
+
app_namespace.const_defined?(:Container)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @api private
|
39
|
+
def name
|
40
|
+
app_namespace.name.underscore.to_sym
|
41
|
+
end
|
42
|
+
|
43
|
+
# TODO: we had to rename namespace=>app_namespace because
|
44
|
+
# Rake::DSL's Kernel#namespace *sometimes* breaks things.
|
45
|
+
# Currently we are missing specs verifying that rake tasks work
|
46
|
+
# correctly and those must be added!
|
47
|
+
#
|
48
|
+
# @api private
|
49
|
+
def app_namespace
|
50
|
+
@app_namespace ||= begin
|
51
|
+
top_level_namespace = ::Rails.application.class.to_s.split("::").first
|
52
|
+
Object.const_get(top_level_namespace)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# @api private
|
57
|
+
def set_or_reload(const_name, const)
|
58
|
+
if app_namespace.const_defined?(const_name)
|
59
|
+
app_namespace.__send__(:remove_const, const_name)
|
60
|
+
end
|
61
|
+
|
62
|
+
app_namespace.const_set(const_name, const)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/spec/dummy/Gemfile
CHANGED
data/spec/dummy/config/boot.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dry/system/rails'
|
2
4
|
|
3
|
-
Dry::System::Rails.
|
4
|
-
config.auto_register << 'app/operations'
|
5
|
+
Dry::System::Rails.container do
|
6
|
+
config.auto_register << 'lib' << 'app/operations'
|
7
|
+
|
8
|
+
auto_register!('app/workers') do |config|
|
9
|
+
config.memoize = true
|
10
|
+
end
|
5
11
|
end
|
data/spec/dummy/config/routes.rb
CHANGED
data/spec/dummy/config/spring.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
RSpec.describe 'Application container' do
|
2
4
|
subject(:system) { Dummy::Container }
|
3
5
|
|
@@ -14,4 +16,14 @@ RSpec.describe 'Application container' do
|
|
14
16
|
expect(system['operations.create_user']).to be_instance_of(Operations::CreateUser)
|
15
17
|
end
|
16
18
|
end
|
19
|
+
|
20
|
+
describe '#auto_register!' do
|
21
|
+
it 'auto-registers files based on config' do
|
22
|
+
mailer_worker = Dummy::Container['workers.mailer_worker']
|
23
|
+
|
24
|
+
expect(mailer_worker).to be_instance_of(Workers::MailerWorker)
|
25
|
+
expect(Dummy::Container['workers.mailer_worker']).to be(mailer_worker) # memoized
|
26
|
+
expect(mailer_worker.mailer).to be_instance_of(Mailer)
|
27
|
+
end
|
28
|
+
end
|
17
29
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe 'Environments' do
|
4
|
+
subject { Dummy::Container }
|
5
|
+
|
6
|
+
describe "frozen?" do
|
7
|
+
context 'when Rails environment is test' do
|
8
|
+
it { is_expected.not_to be_frozen }
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'when Rails environment is not test', :production_env do
|
12
|
+
it { is_expected.to be_frozen }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Dry::System::Rails::Railtie do
|
4
|
+
subject(:railtie) do
|
5
|
+
Dry::System::Rails::Railtie.instance
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '.finalize!' do
|
9
|
+
it 'reloads container and import module' do
|
10
|
+
Dummy::Container.register('foo', Object.new)
|
11
|
+
|
12
|
+
Rails.application.reloader.reload!
|
13
|
+
|
14
|
+
expect(Dummy::Container.keys).to_not include('foo')
|
15
|
+
|
16
|
+
klass = Class.new do
|
17
|
+
include Dummy::Import['operations.create_user']
|
18
|
+
end
|
19
|
+
|
20
|
+
obj = klass.new
|
21
|
+
|
22
|
+
expect(obj.create_user).to be_instance_of(Operations::CreateUser)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
if RUBY_ENGINE == 'ruby' && ENV['COVERAGE'] == 'true'
|
4
|
+
require 'yaml'
|
5
|
+
rubies = YAML.safe_load(File.read(File.join(__dir__, '..', '.travis.yml')))['rvm']
|
6
|
+
latest_mri = rubies.select { |v| v =~ /\A\d+\.\d+.\d+\z/ }.max
|
7
|
+
|
8
|
+
if RUBY_VERSION == latest_mri
|
9
|
+
require 'simplecov'
|
10
|
+
SimpleCov.start do
|
11
|
+
add_filter '/spec/'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
1
16
|
begin
|
2
17
|
require 'byebug'
|
3
18
|
rescue LoadError; end
|
@@ -9,9 +24,7 @@ SPEC_ROOT = Pathname(__dir__)
|
|
9
24
|
Dir[SPEC_ROOT.join('shared/**/*.rb')].each(&method(:require))
|
10
25
|
Dir[SPEC_ROOT.join('support/**/*.rb')].each(&method(:require))
|
11
26
|
|
12
|
-
ENV['RAILS_ENV']
|
27
|
+
ENV['RAILS_ENV'] ||= 'test'
|
13
28
|
require SPEC_ROOT.join('dummy/config/environment')
|
14
29
|
|
15
|
-
RSpec.configure
|
16
|
-
config.disable_monkey_patching!
|
17
|
-
end
|
30
|
+
RSpec.configure(&:disable_monkey_patching!)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-system-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.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: 2019-
|
11
|
+
date: 2019-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-system
|
@@ -73,8 +73,10 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
+
- ".codeclimate.yml"
|
76
77
|
- ".gitignore"
|
77
78
|
- ".rspec"
|
79
|
+
- ".rubocop.yml"
|
78
80
|
- ".travis.yml"
|
79
81
|
- CHANGELOG.md
|
80
82
|
- CONTRIBUTING.md
|
@@ -85,12 +87,15 @@ files:
|
|
85
87
|
- dry-system-rails.gemspec
|
86
88
|
- lib/dry-system-rails.rb
|
87
89
|
- lib/dry/system/rails.rb
|
90
|
+
- lib/dry/system/rails/container.rb
|
91
|
+
- lib/dry/system/rails/railtie.rb
|
88
92
|
- lib/dry/system/rails/version.rb
|
89
93
|
- spec/dummy/.rspec
|
90
94
|
- spec/dummy/Gemfile
|
91
95
|
- spec/dummy/app/controllers/application_controller.rb
|
92
96
|
- spec/dummy/app/models/user_repo.rb
|
93
97
|
- spec/dummy/app/operations/create_user.rb
|
98
|
+
- spec/dummy/app/workers/mailer_worker.rb
|
94
99
|
- spec/dummy/config/application.rb
|
95
100
|
- spec/dummy/config/boot.rb
|
96
101
|
- spec/dummy/config/environment.rb
|
@@ -112,10 +117,12 @@ files:
|
|
112
117
|
- spec/dummy/config/secrets.yml
|
113
118
|
- spec/dummy/config/spring.rb
|
114
119
|
- spec/dummy/config/system/boot/persistence.rb
|
115
|
-
- spec/dummy/
|
120
|
+
- spec/dummy/lib/mailer.rb
|
116
121
|
- spec/dummy/log/.keep
|
117
122
|
- spec/integration/container_spec.rb
|
123
|
+
- spec/integration/environments_spec.rb
|
118
124
|
- spec/integration/models/user_repo_spec.rb
|
125
|
+
- spec/integration/railtie_spec.rb
|
119
126
|
- spec/spec_helper.rb
|
120
127
|
homepage: https://github.com/dry-rb/dry-system-rails
|
121
128
|
licenses:
|
@@ -136,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
143
|
- !ruby/object:Gem::Version
|
137
144
|
version: '0'
|
138
145
|
requirements: []
|
139
|
-
|
140
|
-
rubygems_version: 2.7.7
|
146
|
+
rubygems_version: 3.0.3
|
141
147
|
signing_key:
|
142
148
|
specification_version: 4
|
143
149
|
summary: Railtie for dry-system
|
@@ -147,6 +153,7 @@ test_files:
|
|
147
153
|
- spec/dummy/app/controllers/application_controller.rb
|
148
154
|
- spec/dummy/app/models/user_repo.rb
|
149
155
|
- spec/dummy/app/operations/create_user.rb
|
156
|
+
- spec/dummy/app/workers/mailer_worker.rb
|
150
157
|
- spec/dummy/config/application.rb
|
151
158
|
- spec/dummy/config/boot.rb
|
152
159
|
- spec/dummy/config/environment.rb
|
@@ -168,8 +175,10 @@ test_files:
|
|
168
175
|
- spec/dummy/config/secrets.yml
|
169
176
|
- spec/dummy/config/spring.rb
|
170
177
|
- spec/dummy/config/system/boot/persistence.rb
|
171
|
-
- spec/dummy/
|
178
|
+
- spec/dummy/lib/mailer.rb
|
172
179
|
- spec/dummy/log/.keep
|
173
180
|
- spec/integration/container_spec.rb
|
181
|
+
- spec/integration/environments_spec.rb
|
174
182
|
- spec/integration/models/user_repo_spec.rb
|
183
|
+
- spec/integration/railtie_spec.rb
|
175
184
|
- spec/spec_helper.rb
|