trailblazer-rails 2.1.4 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +15 -15
- data/.rubocop.yml +9 -9
- data/.rubocop_todo.yml +294 -294
- data/.ruby-version +1 -1
- data/.travis.yml +18 -16
- data/CHANGES.md +146 -141
- data/Gemfile +25 -4
- data/LICENSE.txt +21 -21
- data/README.md +39 -39
- data/lib/trailblazer/rails/cell.rb +21 -21
- data/lib/trailblazer/rails/controller.rb +57 -55
- data/lib/trailblazer/rails/railtie.rb +30 -30
- data/lib/trailblazer/rails/railtie/extend_application_controller.rb +28 -28
- data/lib/trailblazer/rails/railtie/loader.rb +51 -56
- data/lib/trailblazer/rails/test/integration.rb +6 -6
- data/lib/trailblazer/rails/version.rb +5 -5
- data/trailblazer-rails.gemspec +28 -27
- metadata +16 -2
@@ -1,21 +1,21 @@
|
|
1
|
-
module Trailblazer::Rails::Controller::Cell
|
2
|
-
private
|
3
|
-
|
4
|
-
module Render
|
5
|
-
def render(cell = nil, options = {}, *, &block)
|
6
|
-
return super unless cell.kind_of?(::Cell::ViewModel)
|
7
|
-
render_cell(cell, options)
|
8
|
-
end
|
9
|
-
|
10
|
-
def render_cell(cell, options)
|
11
|
-
options = options.reverse_merge(layout: true)
|
12
|
-
|
13
|
-
# render the cell.
|
14
|
-
content = cell.()
|
15
|
-
|
16
|
-
render({ html: content }.merge(options))
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
include Render
|
21
|
-
end
|
1
|
+
module Trailblazer::Rails::Controller::Cell
|
2
|
+
private
|
3
|
+
|
4
|
+
module Render
|
5
|
+
def render(cell = nil, options = {}, *, &block)
|
6
|
+
return super unless cell.kind_of?(::Cell::ViewModel)
|
7
|
+
render_cell(cell, options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def render_cell(cell, options)
|
11
|
+
options = options.reverse_merge(layout: true)
|
12
|
+
|
13
|
+
# render the cell.
|
14
|
+
content = cell.()
|
15
|
+
|
16
|
+
render({ html: content }.merge(options))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
include Render
|
21
|
+
end
|
@@ -1,55 +1,57 @@
|
|
1
|
-
module Trailblazer::Rails
|
2
|
-
module Controller
|
3
|
-
def
|
4
|
-
result = if Rails.application.config.trailblazer.enable_tracing
|
5
|
-
|
6
|
-
else
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
@model = result[:model]
|
11
|
-
@form = Trailblazer::Rails::Form.new(result["contract.default"], @model.class)
|
12
|
-
|
13
|
-
yield(result) if result.success? && block_given?
|
14
|
-
|
15
|
-
@_result = result
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
1
|
+
module Trailblazer::Rails
|
2
|
+
module Controller
|
3
|
+
def run_v21(operation, *dependencies)
|
4
|
+
result = if Rails.application.config.trailblazer.enable_tracing
|
5
|
+
_run_operation_v21(operation, :trace, *dependencies).tap { |r| _operation_trace(r) }
|
6
|
+
else
|
7
|
+
_run_operation_v21(operation, :call, *dependencies)
|
8
|
+
end
|
9
|
+
|
10
|
+
@model = result[:model]
|
11
|
+
@form = Trailblazer::Rails::Form.new(result["contract.default"], @model.class)
|
12
|
+
|
13
|
+
yield(result) if result.success? && block_given?
|
14
|
+
|
15
|
+
@_result = result
|
16
|
+
end
|
17
|
+
|
18
|
+
alias run run_v21 unless method_defined?(:run)
|
19
|
+
|
20
|
+
private
|
21
|
+
# Override to tweak params. Not recommended.
|
22
|
+
# Use a deserializer instead.
|
23
|
+
def _run_params(params)
|
24
|
+
params
|
25
|
+
end
|
26
|
+
|
27
|
+
# This is where we can inject Dry.RB containers and the like via dependencies.
|
28
|
+
def _run_runtime_options(ctx = {}, *dependencies)
|
29
|
+
[_run_options(ctx), *dependencies]
|
30
|
+
end
|
31
|
+
|
32
|
+
# Override this to inject dependencies such as "current_user"
|
33
|
+
# into the runtime options.
|
34
|
+
def _run_options(ctx)
|
35
|
+
ctx
|
36
|
+
end
|
37
|
+
|
38
|
+
def _run_operation_v21(operation, call_method, *dependencies)
|
39
|
+
operation.send(
|
40
|
+
call_method,
|
41
|
+
{ params: _run_params(self.params) }.merge(*_run_runtime_options(*dependencies))
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def _operation_trace(result)
|
46
|
+
puts result.wtf?
|
47
|
+
end
|
48
|
+
|
49
|
+
module Result
|
50
|
+
def result
|
51
|
+
@_result
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
include Result
|
56
|
+
end
|
57
|
+
end
|
@@ -1,30 +1,30 @@
|
|
1
|
-
require "rails/railtie"
|
2
|
-
require "trailblazer/loader"
|
3
|
-
require "trailblazer/rails/railtie/extend_application_controller"
|
4
|
-
require "trailblazer/rails/railtie/loader"
|
5
|
-
|
6
|
-
module Trailblazer
|
7
|
-
class Railtie < ::Rails::Railtie
|
8
|
-
config.trailblazer = ActiveSupport::OrderedOptions.new
|
9
|
-
## Accept also an Array of controllers
|
10
|
-
config.trailblazer.application_controller ||= 'ActionController::Base'
|
11
|
-
config.trailblazer.use_loader ||= true
|
12
|
-
config.trailblazer.enable_tracing ||= false
|
13
|
-
|
14
|
-
include Loader
|
15
|
-
include ExtendApplicationController
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def reloader_class
|
20
|
-
# Rails 5.0.0.rc1 says:
|
21
|
-
# DEPRECATION WARNING: to_prepare is deprecated and will be removed from Rails 5.1
|
22
|
-
# (use ActiveSupport::Reloader.to_prepare instead)
|
23
|
-
if Gem.loaded_specs['activesupport'].version >= Gem::Version.new('5')
|
24
|
-
ActiveSupport::Reloader
|
25
|
-
else
|
26
|
-
ActionDispatch::Reloader
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
1
|
+
require "rails/railtie"
|
2
|
+
require "trailblazer/loader"
|
3
|
+
require "trailblazer/rails/railtie/extend_application_controller"
|
4
|
+
require "trailblazer/rails/railtie/loader"
|
5
|
+
|
6
|
+
module Trailblazer
|
7
|
+
class Railtie < ::Rails::Railtie
|
8
|
+
config.trailblazer = ActiveSupport::OrderedOptions.new
|
9
|
+
## Accept also an Array of controllers
|
10
|
+
config.trailblazer.application_controller ||= 'ActionController::Base'
|
11
|
+
config.trailblazer.use_loader ||= true
|
12
|
+
config.trailblazer.enable_tracing ||= false
|
13
|
+
|
14
|
+
include Loader
|
15
|
+
include ExtendApplicationController
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def reloader_class
|
20
|
+
# Rails 5.0.0.rc1 says:
|
21
|
+
# DEPRECATION WARNING: to_prepare is deprecated and will be removed from Rails 5.1
|
22
|
+
# (use ActiveSupport::Reloader.to_prepare instead)
|
23
|
+
if Gem.loaded_specs['activesupport'].version >= Gem::Version.new('5')
|
24
|
+
ActiveSupport::Reloader
|
25
|
+
else
|
26
|
+
ActionDispatch::Reloader
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,28 +1,28 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
|
3
|
-
module Trailblazer
|
4
|
-
class Railtie < ::Rails::Railtie
|
5
|
-
module ExtendApplicationController
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
initializer "trailblazer.application_controller", before: "finisher_hook" do
|
10
|
-
reloader_class.to_prepare do
|
11
|
-
ActiveSupport.on_load(:action_controller) do |app|
|
12
|
-
Trailblazer::Railtie.extend_application_controller!(app)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def extend_application_controller!(app)
|
18
|
-
controllers = Array(::Rails.application.config.trailblazer.application_controller).map { |x| x.to_s }
|
19
|
-
if controllers.include? app.to_s
|
20
|
-
app.send :include, Trailblazer::Rails::Controller
|
21
|
-
app.send :include, Trailblazer::Rails::Controller::Cell if defined?(::Cell)
|
22
|
-
end
|
23
|
-
app
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module Trailblazer
|
4
|
+
class Railtie < ::Rails::Railtie
|
5
|
+
module ExtendApplicationController
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
initializer "trailblazer.application_controller", before: "finisher_hook" do
|
10
|
+
reloader_class.to_prepare do
|
11
|
+
ActiveSupport.on_load(:action_controller) do |app|
|
12
|
+
Trailblazer::Railtie.extend_application_controller!(app)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def extend_application_controller!(app)
|
18
|
+
controllers = Array(::Rails.application.config.trailblazer.application_controller).map { |x| x.to_s }
|
19
|
+
if controllers.include? app.to_s
|
20
|
+
app.send :include, Trailblazer::Rails::Controller
|
21
|
+
app.send :include, Trailblazer::Rails::Controller::Cell if defined?(::Cell)
|
22
|
+
end
|
23
|
+
app
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,56 +1,51 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
|
3
|
-
module Trailblazer
|
4
|
-
class Railtie < ::Rails::Railtie
|
5
|
-
module Loader
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
def self.load_concepts(app)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
#
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module Trailblazer
|
4
|
+
class Railtie < ::Rails::Railtie
|
5
|
+
module Loader
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
def self.load_concepts(app)
|
10
|
+
load_for(app)
|
11
|
+
|
12
|
+
engines.each { |engine| load_for(engine) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.engines
|
16
|
+
::Rails.application.railties.select { |tie| tie.is_a?(::Rails::Engine) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.load_for(app)
|
20
|
+
Trailblazer::Loader.new.(prepend: AllModelFiles, root: app.root) { |file| require_dependency(file) }
|
21
|
+
end
|
22
|
+
|
23
|
+
# Prepend model file, before the concept files like operation.rb get loaded.
|
24
|
+
ModelFile = lambda do |input, options|
|
25
|
+
model = "app/models/#{options[:name]}.rb"
|
26
|
+
File.exist?(model) ? [model] + input : input
|
27
|
+
end
|
28
|
+
|
29
|
+
# Load all model files before any TRB files.
|
30
|
+
AllModelFiles = lambda do |input, options|
|
31
|
+
Dir.glob("#{options[:root]}/app/models/**/*.rb").sort + input
|
32
|
+
end
|
33
|
+
|
34
|
+
# This is to autoload Operation::Dispatch, etc. I'm simply assuming people find this helpful in Rails.
|
35
|
+
initializer "trailblazer.library_autoloading" do
|
36
|
+
end
|
37
|
+
|
38
|
+
# thank you, http://stackoverflow.com/a/17573888/465070
|
39
|
+
initializer 'trailblazer.install', after: "reform.form_extensions" do |app|
|
40
|
+
# the trb autoloading has to be run after initializers have been loaded, so we can tweak inclusion of features in
|
41
|
+
# initializers.
|
42
|
+
if config.trailblazer.use_loader
|
43
|
+
reloader_class.to_prepare do
|
44
|
+
Trailblazer::Railtie.load_concepts(app)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require "minitest/rails/capybara" # loads Capybara, etc.
|
2
|
-
|
3
|
-
module Trailblazer::Test
|
4
|
-
class Integration < Capybara::Rails::TestCase
|
5
|
-
end
|
6
|
-
end
|
1
|
+
require "minitest/rails/capybara" # loads Capybara, etc.
|
2
|
+
|
3
|
+
module Trailblazer::Test
|
4
|
+
class Integration < Capybara::Rails::TestCase
|
5
|
+
end
|
6
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module Trailblazer
|
2
|
-
module Rails
|
3
|
-
VERSION = "2.1.
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module Trailblazer
|
2
|
+
module Rails
|
3
|
+
VERSION = "2.1.5"
|
4
|
+
end
|
5
|
+
end
|
data/trailblazer-rails.gemspec
CHANGED
@@ -1,27 +1,28 @@
|
|
1
|
-
lib = File.expand_path('../lib', __FILE__)
|
2
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require 'trailblazer/rails/version'
|
4
|
-
|
5
|
-
Gem::Specification.new do |spec|
|
6
|
-
spec.name = "trailblazer-rails"
|
7
|
-
spec.version = Trailblazer::Rails::VERSION
|
8
|
-
spec.authors = ["Nick Sutterer"]
|
9
|
-
spec.email = ["apotonick@gmail.com"]
|
10
|
-
|
11
|
-
spec.summary = %q{Convenient Rails support for Trailblazer.}
|
12
|
-
spec.homepage = "http://trailblazer.to/gems/trailblazer/2.0/rails.html"
|
13
|
-
spec.license = "MIT"
|
14
|
-
|
15
|
-
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
|
16
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
17
|
-
spec.require_paths = ["lib"]
|
18
|
-
|
19
|
-
spec.add_dependency "trailblazer", ">= 2.1.0.beta1", "< 2.2.0"
|
20
|
-
spec.add_dependency "trailblazer-loader", ">= 0.1.0"
|
21
|
-
spec.add_dependency "reform-rails", ">= 0.1.4", "< 0.2.0"
|
22
|
-
|
23
|
-
|
24
|
-
spec.add_development_dependency "
|
25
|
-
spec.add_development_dependency "
|
26
|
-
spec.add_development_dependency "
|
27
|
-
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'trailblazer/rails/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "trailblazer-rails"
|
7
|
+
spec.version = Trailblazer::Rails::VERSION
|
8
|
+
spec.authors = ["Nick Sutterer"]
|
9
|
+
spec.email = ["apotonick@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{Convenient Rails support for Trailblazer.}
|
12
|
+
spec.homepage = "http://trailblazer.to/gems/trailblazer/2.0/rails.html"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
|
16
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
17
|
+
spec.require_paths = ["lib"]
|
18
|
+
|
19
|
+
spec.add_dependency "trailblazer", ">= 2.1.0.beta1", "< 2.2.0"
|
20
|
+
spec.add_dependency "trailblazer-loader", ">= 0.1.0"
|
21
|
+
spec.add_dependency "reform-rails", ">= 0.1.4", "< 0.2.0"
|
22
|
+
spec.add_dependency "activesupport", ">= 5.0.0"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "minitest"
|
27
|
+
spec.add_development_dependency "rubocop"
|
28
|
+
end
|