dry-rails 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 80646821bfa562f0f6f1bfde095e604c2075658ecfdebb939f61882a1ace17aa
4
+ data.tar.gz: 5acb65998a0bce73d51501c9849616edf088f0e9e7ace755002bf934d283bee0
5
+ SHA512:
6
+ metadata.gz: 76bf9e8a90ee53fe74ba0a04a16449c1c7689c35535b23489e85c7a77a001b493d60e299bf888efbc383188e79e9b1571e120a792cb06530b64060ccc467bc94
7
+ data.tar.gz: 3c6313b60d8142a73ec41772eab42f12bc53d89293c7d3031b43c8e9ba79f592bb25b4f9524878d1edecebeb5d2b1dc8f36d99d1d2e769f577d2fd318918bd34
@@ -0,0 +1,26 @@
1
+ ## unreleased
2
+
3
+ Initial port of dry-system-rails with a couple of new features
4
+
5
+ ### Added
6
+
7
+ - `:rails` system component provider, which uses standard bootable components, aka "features", to manage application state (@solnic)
8
+ - `config.features` setting which is an array with feature identifiers that you want the railtie to boot (@solnic)
9
+ - `:application_contract` feature which defines `ApplicationContract` within the application namespace and configured to work with `I18n` (@solnic)
10
+ - `:safe_params` feature which extends `ApplicationController` with `schema` DSL and exposes `safe_params` controller helper (@solnic)
11
+ - `:controller_helper` feature which adds `ApplicationController#{resolve,container}` shortcuts (@solnic)
12
+
13
+
14
+ [Compare vunreleased...master](https://github.com/dry-rb/dry-rails/compare/vunreleased...master)
15
+
16
+ ## unreleased
17
+
18
+ Initial port of dry-system-rails with a couple of new features
19
+
20
+ ### Added
21
+
22
+ - `:rails` system component provider, which uses standard bootable components, aka "features", to manage application state (@solnic)
23
+ - `config.features` setting which is an array with feature identifiers that you want the railtie to boot (@solnic)
24
+ - `:application_contract` feature which defines `ApplicationContract` within the application namespace and configured to work with `I18n` (@solnic)
25
+ - `:safe_params` feature which extends `ApplicationController` with `schema` DSL and exposes `safe_params` controller helper (@solnic)
26
+ - `:controller_helper` feature which adds `ApplicationController#{resolve,container}` shortcuts (@solnic)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015-2020 dry-rb team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,30 @@
1
+ [gem]: https://rubygems.org/gems/dry-rails
2
+ [actions]: https://github.com/dry-rb/dry-rails/actions
3
+ [codacy]: https://www.codacy.com/gh/dry-rb/dry-rails
4
+ [chat]: https://dry-rb.zulipchat.com
5
+ [inchpages]: http://inch-ci.org/github/dry-rb/dry-rails
6
+
7
+ # dry-rails [![Join the chat at https://dry-rb.zulipchat.com](https://img.shields.io/badge/dry--rb-join%20chat-%23346b7a.svg)][chat]
8
+
9
+ [![Gem Version](https://badge.fury.io/rb/dry-rails.svg)][gem]
10
+ [![CI Status](https://github.com/dry-rb/dry-rails/workflows/ci/badge.svg)][actions]
11
+ [![Codacy Badge](https://api.codacy.com/project/badge/Grade/d4677ea0c4c2497bb1af1b3ac31552f4)][codacy]
12
+ [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/d4677ea0c4c2497bb1af1b3ac31552f4)][codacy]
13
+ [![Inline docs](http://inch-ci.org/github/dry-rb/dry-rails.svg?branch=master)][inchpages]
14
+
15
+ dry-rails provides the official integration of dry-rb gems with Ruby on Rails framework.
16
+ ## Links
17
+
18
+ * [User documentation](http://dry-rb.org/gems/dry-rails)
19
+ * [API documentation](http://rubydoc.info/gems/dry-rails)
20
+
21
+ ## Supported Ruby versions
22
+
23
+ This library officially supports the following Ruby versions:
24
+
25
+ * MRI >= `2.4`
26
+ * jruby >= `9.2`
27
+
28
+ ## License
29
+
30
+ See `LICENSE` file.
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+ # this file is managed by dry-rb/devtools project
3
+
4
+ lib = File.expand_path('lib', __dir__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require 'dry/rails/version'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'dry-rails'
10
+ spec.authors = ["Piotr Solnica"]
11
+ spec.email = ["piotr.solnica@gmail.com"]
12
+ spec.license = 'MIT'
13
+ spec.version = Dry::Rails::VERSION.dup
14
+
15
+ spec.summary = "The official dry-rb railtie for Ruby on Rails"
16
+ spec.description = "dry-rails provides the official integration of dry-rb gems with Ruby on Rails framework."
17
+ spec.homepage = 'https://dry-rb.org/gems/dry-rails'
18
+ spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "dry-rails.gemspec", "lib/**/*"]
19
+ spec.bindir = 'bin'
20
+ spec.executables = []
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
24
+ spec.metadata['changelog_uri'] = 'https://github.com/dry-rb/dry-rails/blob/master/CHANGELOG.md'
25
+ spec.metadata['source_code_uri'] = 'https://github.com/dry-rb/dry-rails'
26
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/dry-rb/dry-rails/issues'
27
+
28
+ spec.required_ruby_version = ">= 2.4.0"
29
+
30
+ # to update dependencies edit project.yml
31
+ spec.add_runtime_dependency "dry-schema", "~> 1.5"
32
+ spec.add_runtime_dependency "dry-system", "~> 0.17"
33
+ spec.add_runtime_dependency "dry-validation", "~> 1.5"
34
+
35
+ spec.add_development_dependency "bundler"
36
+ spec.add_development_dependency "rake"
37
+ spec.add_development_dependency "rspec"
38
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/rails"
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/rails/railtie"
4
+ require "dry/rails/container"
5
+ require "dry/rails/components"
6
+
7
+ module Dry
8
+ # Initializer interface
9
+ #
10
+ # @example set up a container with auto-registration paths
11
+ # # config/initializer/system.rb
12
+ #
13
+ # Dry::Rails.container do
14
+ # auto_register!("lib", "app/operations")
15
+ # end
16
+ #
17
+ # @see Dry::Rails::Container.auto_register!
18
+ #
19
+ # @api public
20
+ module Rails
21
+ # Set container block that will be evaluated in the context of the container
22
+ #
23
+ # @return [self]
24
+ #
25
+ # @api public
26
+ def self.container(&block)
27
+ _container_blocks << block
28
+ self
29
+ end
30
+
31
+ # Create a new container class
32
+ #
33
+ # This is used during booting and reloading
34
+ #
35
+ # @param options [Hash] Container configuration settings
36
+ #
37
+ # @return [Class]
38
+ #
39
+ # @api private
40
+ def self.create_container(options = {})
41
+ Class.new(Container) { config.update(options) }
42
+ end
43
+
44
+ # @api private
45
+ def self.evaluate_initializer(container)
46
+ _container_blocks.each do |block|
47
+ container.class_eval(&block)
48
+ end
49
+ end
50
+
51
+ # @api private
52
+ def self._container_blocks
53
+ @_container_blocks ||= []
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/system/auto_registrar"
4
+
5
+ module Dry
6
+ module Rails
7
+ module AutoRegistrars
8
+ # This is the default auto-registrar configured in the Container
9
+ #
10
+ # @api private
11
+ class App < System::AutoRegistrar
12
+ # Resolve a path relative to the system root
13
+ #
14
+ # This works just like in `dry-system` except that it's app-dir aware. This means it will
15
+ # turn `app/operations/foo/bar` to `foo/bar` because app dirs are treated as root dirs.
16
+ #
17
+ # In a typical dry-system setup `app` would be the root and everything inside this path
18
+ # would indicate the constant hierachy, so `app/operations/foo/bar` => `Operations/Foo/Bar`
19
+ # but *this is not the Rails convention* so we need this special auto-registrar.
20
+ #
21
+ # @api private
22
+ def relative_path(dir, file_path)
23
+ path = super
24
+ return path unless dir.start_with?("app")
25
+
26
+ path.split("/")[1..-1].join("/")
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dry::System.register_component(:application_contract, provider: :rails) do
4
+ init do
5
+ require "dry/rails/features/application_contract"
6
+ end
7
+
8
+ start do
9
+ railtie.set_or_reload(
10
+ :ApplicationContract,
11
+ Class.new(Dry::Rails::Features::ApplicationContract).finalize!(railtie)
12
+ )
13
+ end
14
+
15
+ stop do
16
+ railtie.remove_constant(:ApplicationContract)
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dry::System.register_component(:controller_helpers, provider: :rails) do
4
+ init do
5
+ require "dry/rails/features/controller_helpers"
6
+ end
7
+
8
+ start do
9
+ ApplicationController.include(Dry::Rails::Features::ControllerHelpers)
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dry::System.register_component(:safe_params, provider: :rails) do
4
+ init do
5
+ require "dry/rails/features/safe_params"
6
+ end
7
+
8
+ start do
9
+ ApplicationController.include(Dry::Rails::Features::SafeParams)
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/system"
4
+
5
+ Dry::System.register_provider(
6
+ :rails,
7
+ boot_path: Pathname(__dir__).join("boot").realpath
8
+ )
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/version"
4
+
5
+ require "dry/system/container"
6
+ require "dry/system/components"
7
+
8
+ require "dry/rails/auto_registrars/app"
9
+
10
+ module Dry
11
+ module Rails
12
+ # Customized Container class for Rails applications
13
+ #
14
+ # @api public
15
+ class Container < System::Container
16
+ # @!group Configuration
17
+
18
+ # @overload config.features=(features)
19
+ # Set an array of features that should be enabled by default
20
+ #
21
+ # Available values are:
22
+ # - application_contract
23
+ # - safe_params
24
+ # - controller_helpers
25
+ #
26
+ # @param features [Array<Symbol>]
27
+ #
28
+ # @api public
29
+ # @!scope class
30
+ setting :features, %i[application_contract safe_params controller_helpers], reader: true
31
+
32
+ # @overload config.auto_register_paths=(paths)
33
+ # Set an array of path/block pairs for auto-registration
34
+ #
35
+ # This is a low-level setting that typically should not be set explicitly,
36
+ # use `auto_register!` instead.
37
+ #
38
+ # @param paths [Array<Array>]
39
+ #
40
+ # @api public
41
+ # @!scope class
42
+ setting :auto_register_paths, [].freeze, reader: true
43
+
44
+ # @!endgroup
45
+
46
+ # The railtie has a rails-specific auto-registrar which is app-dir aware
47
+ config.auto_registrar = Rails::AutoRegistrars::App
48
+
49
+ class << self
50
+ # Set up auto-registration paths and optional a configuration block
51
+ #
52
+ # @example set up a single path
53
+ # Dry::Rails.container do
54
+ # auto_register!("app/operations")
55
+ # end
56
+ #
57
+ # @example set up a single path with a configuration block
58
+ # Dry::Rails.container do
59
+ # auto_register!("app/operations") do |config|
60
+ # config.exclude do |component|
61
+ # component.path.start_with?("concerns")
62
+ # end
63
+ # end
64
+ # end
65
+ #
66
+ # @example set up multiple paths
67
+ # Dry::Rails.container do
68
+ # auto_register!("lib", "app/operations")
69
+ # end
70
+ #
71
+ # @example set up multiple paths with a configuration block
72
+ # Dry::Rails.container do
73
+ # # in this case the config block will be applied to all paths
74
+ # auto_register!("lib", "app/operations") do |config|
75
+ # config.exclude do |component|
76
+ # component.path.start_with?("concerns")
77
+ # end
78
+ # end
79
+ # end
80
+ #
81
+ # @param paths [Array<String>] One or more paths relative to the root
82
+ # @param set_load_paths [Boolean] Whether the paths should be added to $LOAD_PATH
83
+ # @param load_files [Boolean] Whether files should be `required`-ed already
84
+ #
85
+ # @return [self]
86
+ #
87
+ # @api public
88
+ #
89
+ # TODO: this should be moved to dry-system
90
+ def auto_register!(*paths, set_load_paths: true, load_files: false, &block)
91
+ load_paths!(*paths) if set_load_paths
92
+
93
+ if load_files
94
+ paths.each { |path| super(path, &block) }
95
+ else
96
+ config.auto_register_paths.concat(paths.product([block]))
97
+ end
98
+
99
+ self
100
+ end
101
+
102
+ # Finalize the container
103
+ #
104
+ # This is called automatically via the railtie, so typically you won't be using this method
105
+ # directly
106
+ #
107
+ # @param freeze [Boolean] Whether the container should be frozen upon finalization
108
+ #
109
+ # @return [self]
110
+ #
111
+ # @api public
112
+ #
113
+ # TODO: just like auto_register!, this should be moved to dry-system
114
+ def finalize!(freeze: false, &block)
115
+ features.each do |feature|
116
+ start(feature)
117
+ end
118
+
119
+ auto_register_paths.each do |(path, path_block)|
120
+ auto_register!(path, set_load_paths: false, load_files: true, &path_block)
121
+ end
122
+
123
+ super
124
+ end
125
+
126
+ # Return if a given component was booted
127
+ #
128
+ # @return [Boolean]
129
+ #
130
+ # @api private
131
+ #
132
+ # TODO: this should be moved to dry-system
133
+ def booted?(name)
134
+ booter.booted.map(&:identifier).include?(name)
135
+ end
136
+
137
+ # TODO: confirm that this is really needed
138
+ if ::Rails.version.start_with?("5")
139
+ # @api private
140
+ def require_path(path)
141
+ require_dependency(path)
142
+ end
143
+ end
144
+
145
+ # This is called when reloading in dev mode
146
+ #
147
+ # @return [self]
148
+ #
149
+ # @api private
150
+ def refresh_boot_files
151
+ booter.boot_files.each do |boot_file|
152
+ load(boot_file)
153
+ end
154
+ self
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/validation/contract"
4
+
5
+ module Dry
6
+ module Rails
7
+ module Features
8
+ # Abstract application contract class used by the `:application_contract` feature
9
+ #
10
+ # This is an abstract class that's pre-configured during booting process to serve as the base
11
+ # class that the ApplicationContract class inherits from.
12
+ #
13
+ # @see https://dry-rb.org/gems/dry-validation/1.5/configuration/
14
+ #
15
+ # @abstract
16
+ #
17
+ # @api public
18
+ class ApplicationContract < Dry::Validation::Contract
19
+ # This is called during the booting process of the `:application_contract` feature
20
+ #
21
+ # @param railtie [Dry::Rails::Railtie]
22
+ #
23
+ # @return [Class]
24
+ #
25
+ # @api private
26
+ def self.finalize!(railtie)
27
+ load_paths = Dir[railtie.container.root.join("config/locales/*.yml")]
28
+
29
+ config.messages.top_namespace = :contracts
30
+ config.messages.backend = :i18n
31
+ config.messages.load_paths += load_paths
32
+
33
+ self
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dry
4
+ module Rails
5
+ module Features
6
+ # Controller helpers
7
+ #
8
+ # @api public
9
+ module ControllerHelpers
10
+ # Return a component from the application container
11
+ #
12
+ # @example
13
+ # def index
14
+ # users = resolve("users.index").(safe_params[:query])
15
+ # render json: users
16
+ # end
17
+ #
18
+ # @param key [Symbol, String] The component key
19
+ #
20
+ # @return [Object]
21
+ #
22
+ # @raise Dry::Container::Error
23
+ #
24
+ # @api public
25
+ def resolve(key)
26
+ container[key]
27
+ end
28
+
29
+ # Return the application container
30
+ #
31
+ # @return [Dry::Rails::Container]
32
+ #
33
+ # @api public
34
+ def container
35
+ Railtie.container
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/schema/params"
4
+
5
+ module Dry
6
+ module Rails
7
+ module Features
8
+ # SafeParams controller feature
9
+ #
10
+ # @api public
11
+ module SafeParams
12
+ # @api private
13
+ def self.included(klass)
14
+ super
15
+ klass.extend(ClassMethods)
16
+ end
17
+
18
+ # ApplicationController methods
19
+ #
20
+ # @api public
21
+ module ClassMethods
22
+ # Define a schema for controller action(s)
23
+ #
24
+ # @param actions [Array<Symbol>]
25
+ #
26
+ # @return [self]
27
+ #
28
+ # @api public
29
+ def schema(*actions, &block)
30
+ schema = Dry::Schema.Params(&block)
31
+
32
+ actions.each do |name|
33
+ schemas[name] = schema
34
+ end
35
+
36
+ before_action(:set_safe_params, only: actions)
37
+
38
+ self
39
+ end
40
+
41
+ # Return registered schemas
42
+ #
43
+ # @api private
44
+ def schemas
45
+ @schemas ||= {}
46
+ end
47
+ end
48
+
49
+ # Return schema result
50
+ #
51
+ # @return [Dry::Schema::Result]
52
+ #
53
+ # @api public
54
+ def safe_params
55
+ @safe_params
56
+ end
57
+
58
+ # Return registered action schemas
59
+ #
60
+ # @return [Hash<Symbol => Dry::Schema::Params]
61
+ #
62
+ # @api public
63
+ def schemas
64
+ self.class.schemas
65
+ end
66
+
67
+ private
68
+
69
+ # @api private
70
+ def set_safe_params
71
+ @safe_params = schemas[action_name.to_sym].(request.params)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/railtie"
4
+
5
+ module Dry
6
+ module Rails
7
+ # The railtie is responsible for setting up a container and handling reloading in dev mode
8
+ #
9
+ # @api public
10
+ class Railtie < ::Rails::Railtie
11
+ # This is needed because `finalize!` can reload code and this hook is called every-time
12
+ # in development env upon a request (in production it's called just once during booting)
13
+ config.to_prepare do
14
+ Railtie.finalize!
15
+ end
16
+
17
+ # Code-reloading-aware finalization process
18
+ #
19
+ # This sets up `Container` and `Import` constants, reloads them if this is in reloading mode,
20
+ # and registers default components like the railtie itself or the inflector
21
+ #
22
+ # @api public
23
+ def finalize!
24
+ stop_features if reloading?
25
+
26
+ root_path = ::Rails.root
27
+
28
+ container = Dry::Rails.create_container(
29
+ root: root_path,
30
+ name: name,
31
+ default_namespace: name.to_s,
32
+ inflector: default_inflector,
33
+ system_dir: root_path.join("config/system")
34
+ )
35
+
36
+ container.register(:railtie, self)
37
+ container.register(:inflector, default_inflector)
38
+
39
+ set_or_reload(:Container, container)
40
+ set_or_reload(:Import, container.injector)
41
+
42
+ Dry::Rails.evaluate_initializer(container)
43
+
44
+ container.features.each do |feature|
45
+ container.boot(feature, from: :rails)
46
+ end
47
+
48
+ container.refresh_boot_files if reloading?
49
+
50
+ container.finalize!(freeze: !::Rails.env.test?)
51
+ end
52
+ alias_method :reload, :finalize!
53
+
54
+ # Stops all configured features (bootable components)
55
+ #
56
+ # This is *crucial* when reloading code in development mode. Every bootable component
57
+ # should be able to clear the runtime from any constants that it created in its `stop`
58
+ # lifecycle step
59
+ #
60
+ # @api public
61
+ def stop_features
62
+ container.features.each do |feature|
63
+ container.stop(feature) if container.booted?(feature)
64
+ end
65
+ end
66
+
67
+ # Exposes the container constant
68
+ #
69
+ # @return [Dry::Rails::Container]
70
+ #
71
+ # @api public
72
+ def container
73
+ app_namespace.const_get(:Container)
74
+ end
75
+
76
+ # Return true if we're in code-reloading mode
77
+ #
78
+ # @api private
79
+ def reloading?
80
+ app_namespace.const_defined?(:Container)
81
+ end
82
+
83
+ # Return the default system name
84
+ #
85
+ # In the dry-system world containers are explicitly named using symbols, so that you can
86
+ # refer to them easily when ie importing one container into another
87
+ #
88
+ # @return [Symbol]
89
+ #
90
+ # @api private
91
+ def name
92
+ app_namespace.name.underscore.to_sym
93
+ end
94
+
95
+ # Infer the default application namespace
96
+ #
97
+ # TODO: we had to rename namespace=>app_namespace because
98
+ # Rake::DSL's Kernel#namespace *sometimes* breaks things.
99
+ # Currently we are missing specs verifying that rake tasks work
100
+ # correctly and those must be added!
101
+ #
102
+ # @return [Module]
103
+ #
104
+ # @api public
105
+ def app_namespace
106
+ @app_namespace ||= begin
107
+ top_level_namespace = ::Rails.application.class.to_s.split("::").first
108
+ Object.const_get(top_level_namespace)
109
+ end
110
+ end
111
+
112
+ # Sets or reloads a constant within the application namespace
113
+ #
114
+ # @api private
115
+ def default_inflector
116
+ ActiveSupport::Inflector
117
+ end
118
+
119
+ # @api private
120
+ def set_or_reload(const_name, const)
121
+ if app_namespace.const_defined?(const_name)
122
+ app_namespace.__send__(:remove_const, const_name)
123
+ end
124
+
125
+ app_namespace.const_set(const_name, const)
126
+ end
127
+
128
+ # @api private
129
+ def remove_constant(const_name)
130
+ app_namespace.__send__(:remove_const, const_name)
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dry
4
+ module Rails
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dry-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Piotr Solnica
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-03-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-schema
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dry-system
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.17'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.17'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dry-validation
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: dry-rails provides the official integration of dry-rb gems with Ruby
98
+ on Rails framework.
99
+ email:
100
+ - piotr.solnica@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - CHANGELOG.md
106
+ - LICENSE
107
+ - README.md
108
+ - dry-rails.gemspec
109
+ - lib/dry-rails.rb
110
+ - lib/dry/rails.rb
111
+ - lib/dry/rails/auto_registrars/app.rb
112
+ - lib/dry/rails/boot/application_contract.rb
113
+ - lib/dry/rails/boot/controller_helpers.rb
114
+ - lib/dry/rails/boot/safe_params.rb
115
+ - lib/dry/rails/components.rb
116
+ - lib/dry/rails/container.rb
117
+ - lib/dry/rails/features/application_contract.rb
118
+ - lib/dry/rails/features/controller_helpers.rb
119
+ - lib/dry/rails/features/safe_params.rb
120
+ - lib/dry/rails/railtie.rb
121
+ - lib/dry/rails/version.rb
122
+ homepage: https://dry-rb.org/gems/dry-rails
123
+ licenses:
124
+ - MIT
125
+ metadata:
126
+ allowed_push_host: https://rubygems.org
127
+ changelog_uri: https://github.com/dry-rb/dry-rails/blob/master/CHANGELOG.md
128
+ source_code_uri: https://github.com/dry-rb/dry-rails
129
+ bug_tracker_uri: https://github.com/dry-rb/dry-rails/issues
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 2.4.0
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubygems_version: 3.0.3
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: The official dry-rb railtie for Ruby on Rails
149
+ test_files: []