dry-system-rails 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 [![Join the chat at https://
|
7
|
+
# dry-system-rails [![Join the chat at https://dry-rb.zulipchat.com](https://img.shields.io/badge/dry--rb-join%20chat-%23346b7a.svg)][chat]
|
8
8
|
|
9
9
|
[![Gem Version](https://badge.fury.io/rb/dry-system-rails.svg)][gem]
|
10
10
|
[![Build Status](https://travis-ci.org/dry-rb/dry-system-rails.svg?branch=master)][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
|