much-rails 0.2.8 → 0.4.3
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/lib/much-rails.rb +1 -0
- data/lib/much-rails/action.rb +12 -4
- data/lib/much-rails/action/controller.rb +12 -10
- data/lib/much-rails/action/router.rb +28 -10
- data/lib/much-rails/change_action_result.rb +6 -3
- data/lib/much-rails/config.rb +3 -51
- data/lib/much-rails/destroy_service.rb +9 -0
- data/lib/much-rails/invalid_error.rb +22 -0
- data/lib/much-rails/save_service.rb +8 -0
- data/lib/much-rails/version.rb +1 -1
- data/much-rails.gemspec +5 -4
- data/test/support/config/routes/test/subrouter.rb +3 -0
- data/test/support/fake_action_controller.rb +17 -6
- data/test/unit/action/controller_tests.rb +20 -7
- data/test/unit/action/router_tests.rb +17 -11
- data/test/unit/action/unprocessable_entity_result_tests.rb +1 -1
- data/test/unit/action_tests.rb +62 -10
- data/test/unit/assets_tests.rb +4 -4
- data/test/unit/change_action_result_tests.rb +21 -7
- data/test/unit/change_action_tests.rb +7 -50
- data/test/unit/config_tests.rb +2 -53
- data/test/unit/destroy_action_tests.rb +1 -7
- data/test/unit/destroy_service_tests.rb +19 -0
- data/test/unit/invalid_error_tests.rb +45 -0
- data/test/unit/save_action_tests.rb +1 -7
- data/test/unit/save_service_tests.rb +19 -0
- metadata +30 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4e21c445f3eec6146fc636f67a3e98b4f40dde3c916c6f25f6bb02af8f6dfc38
|
|
4
|
+
data.tar.gz: ffcc8deab5152d91d1e433d5bfc174e359fa02a2d5e43b57c12f2b7dfed9fdab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3299e07aff0d7304b3cf84ca6df14e53e3dcdd0d63690ec9bed261217c04fdae8058e0314840b276a1e183a18b87e2ba47d930389c77eda82638f7637577437a
|
|
7
|
+
data.tar.gz: 5fe7641d69715ffe58daa889edf8635b3d0ae614d500e9205f44c4798aadd5d6c8c021d4a40f7c0afcc58db8c31ea10252a91e087fb7d8aa44f110fd883e1628
|
data/lib/much-rails.rb
CHANGED
|
@@ -18,6 +18,7 @@ require "much-rails/destroy_action"
|
|
|
18
18
|
require "much-rails/destroy_service"
|
|
19
19
|
require "much-rails/has_slug"
|
|
20
20
|
require "much-rails/input_value"
|
|
21
|
+
require "much-rails/invalid_error"
|
|
21
22
|
require "much-rails/json"
|
|
22
23
|
require "much-rails/layout"
|
|
23
24
|
require "much-rails/not_given"
|
data/lib/much-rails/action.rb
CHANGED
|
@@ -31,7 +31,7 @@ module MuchRails::Action
|
|
|
31
31
|
|
|
32
32
|
add_config :much_rails_action
|
|
33
33
|
|
|
34
|
-
attr_reader :params, :
|
|
34
|
+
attr_reader :params, :request, :errors
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
mixin_class_methods do
|
|
@@ -112,11 +112,10 @@ module MuchRails::Action
|
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
mixin_instance_methods do
|
|
115
|
-
def initialize(params: nil,
|
|
115
|
+
def initialize(params: nil, request: nil)
|
|
116
116
|
@params = params.to_h.with_indifferent_access
|
|
117
|
-
@current_session = current_session
|
|
118
117
|
@request = request
|
|
119
|
-
@errors =
|
|
118
|
+
@errors = HashWithIndifferentAccess.new{ |hash, key| hash[key] = [] }
|
|
120
119
|
end
|
|
121
120
|
|
|
122
121
|
def on_call
|
|
@@ -150,8 +149,17 @@ module MuchRails::Action
|
|
|
150
149
|
@much_rails_successful_action
|
|
151
150
|
end
|
|
152
151
|
|
|
152
|
+
def controller_session=(value)
|
|
153
|
+
@controller_session = value
|
|
154
|
+
end
|
|
155
|
+
|
|
153
156
|
private
|
|
154
157
|
|
|
158
|
+
def controller_session
|
|
159
|
+
@controller_session ||=
|
|
160
|
+
request&.env&.[]("action_controller.instance")&.session
|
|
161
|
+
end
|
|
162
|
+
|
|
155
163
|
def default_action_success_result
|
|
156
164
|
MuchRails::Action::HeadResult.new(:ok)
|
|
157
165
|
end
|
|
@@ -9,30 +9,31 @@ module MuchRails::Action; end
|
|
|
9
9
|
# MuchRails::Action::Controller defines the behaviors for controllers processing
|
|
10
10
|
# MuchRails::Actions.
|
|
11
11
|
module MuchRails::Action::Controller
|
|
12
|
-
DEFAULT_ACTION_CLASS_FORMAT = :any
|
|
13
|
-
|
|
14
12
|
include MuchRails::Mixin
|
|
15
13
|
|
|
14
|
+
def self.DEFAULT_ACTION_CLASS_FORMAT
|
|
15
|
+
:any
|
|
16
|
+
end
|
|
17
|
+
|
|
16
18
|
mixin_included do
|
|
17
19
|
attr_reader :much_rails_action_class
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
prepend_before_action(
|
|
20
22
|
:require_much_rails_action_class,
|
|
21
|
-
only: MuchRails::Action::Router
|
|
23
|
+
only: MuchRails::Action::Router.CONTROLLER_CALL_ACTION_METHOD_NAME,
|
|
22
24
|
)
|
|
23
25
|
before_action :permit_all_much_rails_action_params
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
mixin_instance_methods do
|
|
27
29
|
define_method(
|
|
28
|
-
MuchRails::Action::Router
|
|
30
|
+
MuchRails::Action::Router.CONTROLLER_CALL_ACTION_METHOD_NAME,
|
|
29
31
|
) do
|
|
30
32
|
respond_to do |format|
|
|
31
33
|
format.public_send(much_rails_action_class_format) do
|
|
32
34
|
result =
|
|
33
35
|
much_rails_action_class.call(
|
|
34
36
|
params: much_rails_action_params,
|
|
35
|
-
current_session: current_session,
|
|
36
37
|
request: request,
|
|
37
38
|
)
|
|
38
39
|
instance_exec(result, &result.execute_block)
|
|
@@ -41,7 +42,7 @@ module MuchRails::Action::Controller
|
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
define_method(
|
|
44
|
-
MuchRails::Action::Router
|
|
45
|
+
MuchRails::Action::Router.CONTROLLER_NOT_FOUND_METHOD_NAME,
|
|
45
46
|
) do
|
|
46
47
|
respond_to do |format|
|
|
47
48
|
format.html do
|
|
@@ -51,11 +52,12 @@ module MuchRails::Action::Controller
|
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
def much_rails_action_class_name
|
|
54
|
-
"::#{params[MuchRails::Action::Router
|
|
55
|
+
"::#{params[MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME]}"
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
def much_rails_action_class_format
|
|
58
|
-
much_rails_action_class.format ||
|
|
59
|
+
much_rails_action_class.format ||
|
|
60
|
+
MuchRails::Action::Controller.DEFAULT_ACTION_CLASS_FORMAT
|
|
59
61
|
end
|
|
60
62
|
|
|
61
63
|
def much_rails_action_params
|
|
@@ -67,7 +69,7 @@ module MuchRails::Action::Controller
|
|
|
67
69
|
params
|
|
68
70
|
.to_h
|
|
69
71
|
.except(
|
|
70
|
-
MuchRails::Action::Router
|
|
72
|
+
MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME,
|
|
71
73
|
:controller,
|
|
72
74
|
:action,
|
|
73
75
|
),
|
|
@@ -6,10 +6,21 @@ module MuchRails; end
|
|
|
6
6
|
module MuchRails::Action; end
|
|
7
7
|
|
|
8
8
|
class MuchRails::Action::Router < MuchRails::Action::BaseRouter
|
|
9
|
-
DEFAULT_CONTROLLER_NAME
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
def self.DEFAULT_CONTROLLER_NAME
|
|
10
|
+
"application"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.CONTROLLER_CALL_ACTION_METHOD_NAME
|
|
14
|
+
:much_rails_call_action
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.CONTROLLER_NOT_FOUND_METHOD_NAME
|
|
18
|
+
:much_rails_not_found
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.ACTION_CLASS_PARAM_NAME
|
|
22
|
+
:much_rails_action_class_name
|
|
23
|
+
end
|
|
13
24
|
|
|
14
25
|
def self.url_class
|
|
15
26
|
MuchRails::Action::Router::URL
|
|
@@ -28,7 +39,10 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
|
|
|
28
39
|
raise ArgumentError, "routes file `#{file_path.inspect}` does not exist."
|
|
29
40
|
end
|
|
30
41
|
|
|
31
|
-
new(
|
|
42
|
+
new(
|
|
43
|
+
routes_file_name.to_s.split(File::SEPARATOR).join("_"),
|
|
44
|
+
controller_name: controller_name,
|
|
45
|
+
) do
|
|
32
46
|
instance_eval(File.read(file_path), file_path.to_s, 1)
|
|
33
47
|
end
|
|
34
48
|
end
|
|
@@ -38,7 +52,7 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
|
|
|
38
52
|
def initialize(name = nil, controller_name: nil, &block)
|
|
39
53
|
super(name, &block)
|
|
40
54
|
|
|
41
|
-
@controller_name = controller_name || DEFAULT_CONTROLLER_NAME
|
|
55
|
+
@controller_name = controller_name || self.class.DEFAULT_CONTROLLER_NAME
|
|
42
56
|
end
|
|
43
57
|
|
|
44
58
|
# Example:
|
|
@@ -49,8 +63,10 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
|
|
|
49
63
|
# end
|
|
50
64
|
def apply_to(application_routes_draw_scope)
|
|
51
65
|
validate!
|
|
52
|
-
draw_url_to
|
|
53
|
-
|
|
66
|
+
draw_url_to =
|
|
67
|
+
"#{controller_name}##{self.class.CONTROLLER_NOT_FOUND_METHOD_NAME}"
|
|
68
|
+
draw_route_to =
|
|
69
|
+
"#{controller_name}##{self.class.CONTROLLER_CALL_ACTION_METHOD_NAME}"
|
|
54
70
|
|
|
55
71
|
definition_names = Set.new
|
|
56
72
|
|
|
@@ -63,7 +79,8 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
|
|
|
63
79
|
as: (definition.name if definition_names.add?(definition.name)),
|
|
64
80
|
defaults:
|
|
65
81
|
definition.default_params.merge({
|
|
66
|
-
ACTION_CLASS_PARAM_NAME =>
|
|
82
|
+
self.class.ACTION_CLASS_PARAM_NAME =>
|
|
83
|
+
request_type_action.class_name,
|
|
67
84
|
"format" => request_type_action.format,
|
|
68
85
|
}),
|
|
69
86
|
constraints: request_type_action.constraints_lambda,
|
|
@@ -79,7 +96,8 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
|
|
|
79
96
|
as: (definition.name if definition_names.add?(definition.name)),
|
|
80
97
|
defaults:
|
|
81
98
|
definition.default_params.merge({
|
|
82
|
-
ACTION_CLASS_PARAM_NAME =>
|
|
99
|
+
self.class.ACTION_CLASS_PARAM_NAME =>
|
|
100
|
+
definition.default_action_class_name,
|
|
83
101
|
"format" => definition.default_action_format,
|
|
84
102
|
}),
|
|
85
103
|
)
|
|
@@ -27,12 +27,15 @@ class MuchRails::ChangeActionResult
|
|
|
27
27
|
|
|
28
28
|
@service_result = save_service_result
|
|
29
29
|
|
|
30
|
-
@service_result.validation_errors ||=
|
|
30
|
+
@service_result.validation_errors ||= HashWithIndifferentAccess.new
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def validation_errors
|
|
34
34
|
@validation_errors ||=
|
|
35
|
-
service_result
|
|
35
|
+
service_result
|
|
36
|
+
.get_for_all_results(:validation_errors)
|
|
37
|
+
.to_h
|
|
38
|
+
.with_indifferent_access
|
|
36
39
|
end
|
|
37
40
|
|
|
38
41
|
def validation_error_messages
|
|
@@ -40,7 +43,7 @@ class MuchRails::ChangeActionResult
|
|
|
40
43
|
end
|
|
41
44
|
|
|
42
45
|
def extract_validation_error(field_name)
|
|
43
|
-
validation_errors.delete(field_name)
|
|
46
|
+
Array.wrap(validation_errors.delete(field_name)).compact
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
def any_unextracted_validation_errors?
|
data/lib/much-rails/config.rb
CHANGED
|
@@ -1,55 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "much-
|
|
3
|
+
require "much-config"
|
|
4
4
|
|
|
5
|
-
module MuchRails
|
|
6
|
-
|
|
7
|
-
# MuchRails::Config is a mix-in to implement object DSL configuration.
|
|
8
|
-
module MuchRails::Config
|
|
9
|
-
include MuchRails::Mixin
|
|
10
|
-
|
|
11
|
-
mixin_class_methods do
|
|
12
|
-
def add_config(name = nil, method_name: nil)
|
|
13
|
-
config_method_name, config_class_name, configure_method_name =
|
|
14
|
-
much_rails_config_names(name, method_name)
|
|
15
|
-
|
|
16
|
-
instance_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
|
17
|
-
def #{config_method_name}
|
|
18
|
-
@#{config_method_name} ||= self::#{config_class_name}.new
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def #{configure_method_name}
|
|
22
|
-
yield(#{config_method_name}) if block_given?
|
|
23
|
-
end
|
|
24
|
-
RUBY
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def add_instance_config(name = nil, method_name: nil)
|
|
28
|
-
config_method_name, config_class_name, configure_method_name =
|
|
29
|
-
much_rails_config_names(name, method_name)
|
|
30
|
-
|
|
31
|
-
instance_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
|
32
|
-
define_method(:#{config_method_name}) do
|
|
33
|
-
@#{config_method_name} ||= self.class::#{config_class_name}.new
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
define_method(:#{configure_method_name}) do |&block|
|
|
37
|
-
block.call(#{config_method_name}) if block
|
|
38
|
-
end
|
|
39
|
-
RUBY
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def much_rails_config_names(name, method_name)
|
|
45
|
-
name_prefix = name.nil? ? "" : "#{name.to_s.underscore}_"
|
|
46
|
-
config_method_name = (method_name || "#{name_prefix}config").to_s
|
|
47
|
-
config_class_name = "#{name_prefix.classify}Config"
|
|
48
|
-
|
|
49
|
-
name_suffix = name.nil? ? "" : "_#{name.to_s.underscore}"
|
|
50
|
-
configure_method_name = "configure#{name_suffix}"
|
|
51
|
-
|
|
52
|
-
[config_method_name, config_class_name, configure_method_name]
|
|
53
|
-
end
|
|
54
|
-
end
|
|
5
|
+
module MuchRails
|
|
6
|
+
Config = MuchConfig
|
|
55
7
|
end
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "much-rails/invalid_error"
|
|
3
4
|
require "much-rails/mixin"
|
|
4
5
|
require "much-rails/records"
|
|
5
6
|
require "much-rails/records/validate_destroy"
|
|
6
7
|
require "much-rails/result"
|
|
7
8
|
require "much-rails/service"
|
|
9
|
+
require "much-rails/service_validation_errors"
|
|
8
10
|
|
|
9
11
|
module MuchRails; end
|
|
10
12
|
|
|
@@ -51,6 +53,13 @@ module MuchRails::DestroyService
|
|
|
51
53
|
validation_error_messages: ex.error_full_messages.to_a,
|
|
52
54
|
)
|
|
53
55
|
end
|
|
56
|
+
e.add(MuchRails::InvalidError) do |ex|
|
|
57
|
+
MuchRails::SaveService::FailureResult.new(
|
|
58
|
+
exception: ex,
|
|
59
|
+
validation_errors: ex.errors,
|
|
60
|
+
validation_error_messages: ex.error_messages,
|
|
61
|
+
)
|
|
62
|
+
end
|
|
54
63
|
end
|
|
55
64
|
end
|
|
56
65
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MuchRails; end
|
|
4
|
+
|
|
5
|
+
# MuchRails::InvalidError allows for raising and auto-rescueing general
|
|
6
|
+
# validation errors outside the scope of e.g. an ActiveRecord save.
|
|
7
|
+
class MuchRails::InvalidError < StandardError
|
|
8
|
+
attr_reader :errors
|
|
9
|
+
|
|
10
|
+
def initialize(backtrace: nil, **errors)
|
|
11
|
+
@errors = errors
|
|
12
|
+
|
|
13
|
+
super(@errors.inspect)
|
|
14
|
+
set_backtrace(backtrace) if backtrace
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def error_messages
|
|
18
|
+
@errors.to_a.map do |(field_name, message)|
|
|
19
|
+
"#{field_name}: #{Array.wrap(message).to_sentence}"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "active_record"
|
|
4
|
+
require "much-rails/invalid_error"
|
|
4
5
|
require "much-rails/mixin"
|
|
5
6
|
require "much-rails/result"
|
|
6
7
|
require "much-rails/service"
|
|
@@ -52,6 +53,13 @@ module MuchRails::SaveService
|
|
|
52
53
|
ex.record&.errors&.full_messages.to_a,
|
|
53
54
|
)
|
|
54
55
|
end
|
|
56
|
+
e.add(MuchRails::InvalidError) do |ex|
|
|
57
|
+
MuchRails::SaveService::FailureResult.new(
|
|
58
|
+
exception: ex,
|
|
59
|
+
validation_errors: ex.errors,
|
|
60
|
+
validation_error_messages: ex.error_messages,
|
|
61
|
+
)
|
|
62
|
+
end
|
|
55
63
|
end
|
|
56
64
|
end
|
|
57
65
|
end
|
data/lib/much-rails/version.rb
CHANGED
data/much-rails.gemspec
CHANGED
|
@@ -23,20 +23,21 @@ Gem::Specification.new do |gem|
|
|
|
23
23
|
|
|
24
24
|
gem.required_ruby_version = "~> 2.5"
|
|
25
25
|
|
|
26
|
-
gem.add_development_dependency("much-style-guide", ["~> 0.6.
|
|
27
|
-
gem.add_development_dependency("assert", ["~> 2.19.
|
|
26
|
+
gem.add_development_dependency("much-style-guide", ["~> 0.6.6"])
|
|
27
|
+
gem.add_development_dependency("assert", ["~> 2.19.6"])
|
|
28
28
|
gem.add_development_dependency("rails", ["> 5.0", "< 7.0"])
|
|
29
29
|
|
|
30
30
|
gem.add_dependency("activerecord", ["> 5.0", "< 7.0"])
|
|
31
31
|
gem.add_dependency("activesupport", ["> 5.0", "< 7.0"])
|
|
32
|
-
gem.add_dependency("dassets", ["~> 0.15.
|
|
32
|
+
gem.add_dependency("dassets", ["~> 0.15.3"])
|
|
33
33
|
gem.add_dependency("dassets-erubi", ["~> 0.1.1"])
|
|
34
34
|
gem.add_dependency("dassets-sass", ["~> 0.5.1"])
|
|
35
35
|
gem.add_dependency("much-boolean", ["~> 0.2.1"])
|
|
36
|
+
gem.add_dependency("much-config", ["~> 0.1.0"])
|
|
36
37
|
gem.add_dependency("much-decimal", ["~> 0.1.3"])
|
|
37
38
|
gem.add_dependency("much-mixin", ["~> 0.2.4"])
|
|
38
39
|
gem.add_dependency("much-not-given", ["~> 0.1.2"])
|
|
39
40
|
gem.add_dependency("much-result", ["~> 0.1.3"])
|
|
40
41
|
gem.add_dependency("much-slug", ["~> 0.1.2"])
|
|
41
|
-
gem.add_dependency("oj", ["~> 3.
|
|
42
|
+
gem.add_dependency("oj", ["~> 3.11"])
|
|
42
43
|
end
|
|
@@ -13,20 +13,31 @@ module FakeActionController
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
mixin_class_methods do
|
|
16
|
-
def before_action(
|
|
17
|
-
|
|
16
|
+
def before_action(*args, &block)
|
|
17
|
+
before_action_calls << Assert::StubCall.new(*args, &block)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
def
|
|
21
|
-
|
|
20
|
+
def prepend_before_action(*args, &block)
|
|
21
|
+
prepend_before_action_calls << Assert::StubCall.new(*args, &block)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def before_action_calls
|
|
25
|
+
@before_action_calls ||= []
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def prepend_before_action_calls
|
|
29
|
+
@prepend_before_action_calls ||= []
|
|
22
30
|
end
|
|
23
31
|
end
|
|
24
32
|
|
|
25
33
|
mixin_instance_methods do
|
|
26
34
|
def initialize(params)
|
|
27
35
|
@params = FakeParams.new(params)
|
|
28
|
-
self.class.
|
|
29
|
-
public_send(
|
|
36
|
+
self.class.prepend_before_action_calls.each do |before_action_call|
|
|
37
|
+
public_send(before_action_call.args.first)
|
|
38
|
+
end
|
|
39
|
+
self.class.before_action_calls.each do |before_action_call|
|
|
40
|
+
public_send(before_action_call.args.first)
|
|
30
41
|
end
|
|
31
42
|
end
|
|
32
43
|
|
|
@@ -17,8 +17,8 @@ module MuchRails::Action::Controller
|
|
|
17
17
|
assert_that(subject).includes(MuchRails::Mixin)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
should "know its
|
|
21
|
-
assert_that(subject
|
|
20
|
+
should "know its attributes" do
|
|
21
|
+
assert_that(subject.DEFAULT_ACTION_CLASS_FORMAT).equals(:any)
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -29,6 +29,19 @@ module MuchRails::Action::Controller
|
|
|
29
29
|
let(:receiver_class) do
|
|
30
30
|
Class.new{ include FakeActionController }
|
|
31
31
|
end
|
|
32
|
+
|
|
33
|
+
should "be configured as expected" do
|
|
34
|
+
assert_that(subject.prepend_before_action_calls.size).equals(1)
|
|
35
|
+
assert_that(subject.prepend_before_action_calls.last.args)
|
|
36
|
+
.equals([
|
|
37
|
+
:require_much_rails_action_class,
|
|
38
|
+
only: MuchRails::Action::Router.CONTROLLER_CALL_ACTION_METHOD_NAME,
|
|
39
|
+
])
|
|
40
|
+
|
|
41
|
+
assert_that(subject.before_action_calls.size).equals(1)
|
|
42
|
+
assert_that(subject.before_action_calls.last.args)
|
|
43
|
+
.equals([:permit_all_much_rails_action_params])
|
|
44
|
+
end
|
|
32
45
|
end
|
|
33
46
|
|
|
34
47
|
class ReceiverInitTests < ReceiverTests
|
|
@@ -41,7 +54,7 @@ module MuchRails::Action::Controller
|
|
|
41
54
|
|
|
42
55
|
let(:params1) do
|
|
43
56
|
{
|
|
44
|
-
MuchRails::Action::Router
|
|
57
|
+
MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME => "Actions::Show",
|
|
45
58
|
controller: "actions",
|
|
46
59
|
action: "show",
|
|
47
60
|
nested: {
|
|
@@ -53,10 +66,10 @@ module MuchRails::Action::Controller
|
|
|
53
66
|
should have_readers :much_rails_action_class
|
|
54
67
|
|
|
55
68
|
should have_imeths(
|
|
56
|
-
MuchRails::Action::Router
|
|
69
|
+
MuchRails::Action::Router.CONTROLLER_CALL_ACTION_METHOD_NAME,
|
|
57
70
|
)
|
|
58
71
|
should have_imeths(
|
|
59
|
-
MuchRails::Action::Router
|
|
72
|
+
MuchRails::Action::Router.CONTROLLER_NOT_FOUND_METHOD_NAME,
|
|
60
73
|
)
|
|
61
74
|
should have_imeths :much_rails_action_class_name
|
|
62
75
|
should have_imeths :much_rails_action_class_format
|
|
@@ -69,7 +82,7 @@ module MuchRails::Action::Controller
|
|
|
69
82
|
.equals("::Actions::Show")
|
|
70
83
|
|
|
71
84
|
assert_that(subject.much_rails_action_class_format)
|
|
72
|
-
.equals(unit_module
|
|
85
|
+
.equals(unit_module.DEFAULT_ACTION_CLASS_FORMAT)
|
|
73
86
|
|
|
74
87
|
assert_that(subject.much_rails_action_params)
|
|
75
88
|
.equals(
|
|
@@ -91,7 +104,7 @@ module MuchRails::Action::Controller
|
|
|
91
104
|
|
|
92
105
|
let(:params1) do
|
|
93
106
|
{
|
|
94
|
-
MuchRails::Action::Router
|
|
107
|
+
MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME =>
|
|
95
108
|
"Actions::Unknown",
|
|
96
109
|
}
|
|
97
110
|
end
|
|
@@ -16,17 +16,17 @@ class MuchRails::Action::Router
|
|
|
16
16
|
|
|
17
17
|
should have_imeths :url_class
|
|
18
18
|
|
|
19
|
-
should "be
|
|
19
|
+
should "be configured as expected" do
|
|
20
20
|
assert_that(subject < MuchRails::Action::BaseRouter).is_true
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
should "know its
|
|
24
|
-
assert_that(subject
|
|
25
|
-
assert_that(subject
|
|
23
|
+
should "know its attributes" do
|
|
24
|
+
assert_that(subject.DEFAULT_CONTROLLER_NAME).equals("application")
|
|
25
|
+
assert_that(subject.CONTROLLER_CALL_ACTION_METHOD_NAME)
|
|
26
26
|
.equals(:much_rails_call_action)
|
|
27
|
-
assert_that(subject
|
|
27
|
+
assert_that(subject.CONTROLLER_NOT_FOUND_METHOD_NAME)
|
|
28
28
|
.equals(:much_rails_not_found)
|
|
29
|
-
assert_that(subject
|
|
29
|
+
assert_that(subject.ACTION_CLASS_PARAM_NAME)
|
|
30
30
|
.equals(:much_rails_action_class_name)
|
|
31
31
|
assert_that(subject.url_class).equals(unit_class::URL)
|
|
32
32
|
end
|
|
@@ -45,6 +45,12 @@ class MuchRails::Action::Router
|
|
|
45
45
|
assert_that(router.url_set.fetch(:root).path).equals("/")
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
should "eval the nested named routes file" do
|
|
49
|
+
router = unit_class.load("test/subrouter")
|
|
50
|
+
assert_that(router.url_set).is_not_empty
|
|
51
|
+
assert_that(router.url_set.fetch(:root).path).equals("/subrouter")
|
|
52
|
+
end
|
|
53
|
+
|
|
48
54
|
should "complain if no file name given" do
|
|
49
55
|
assert_that{ unit_class.load([nil, "", " "]) }.raises(ArgumentError)
|
|
50
56
|
end
|
|
@@ -64,7 +70,7 @@ class MuchRails::Action::Router
|
|
|
64
70
|
|
|
65
71
|
should "know its attributes" do
|
|
66
72
|
assert_that(subject.controller_name)
|
|
67
|
-
.equals(unit_class
|
|
73
|
+
.equals(unit_class.DEFAULT_CONTROLLER_NAME)
|
|
68
74
|
|
|
69
75
|
router = unit_class.new(controller_name: controller_name1)
|
|
70
76
|
assert_that(router.controller_name).equals(controller_name1)
|
|
@@ -99,13 +105,13 @@ class MuchRails::Action::Router
|
|
|
99
105
|
|
|
100
106
|
expected_draw_url_to =
|
|
101
107
|
"#{subject.controller_name}"\
|
|
102
|
-
"##{unit_class
|
|
108
|
+
"##{unit_class.CONTROLLER_NOT_FOUND_METHOD_NAME}"
|
|
103
109
|
expected_draw_route_to =
|
|
104
110
|
"#{subject.controller_name}"\
|
|
105
|
-
"##{unit_class
|
|
111
|
+
"##{unit_class.CONTROLLER_CALL_ACTION_METHOD_NAME}"
|
|
106
112
|
expected_default_defaults =
|
|
107
113
|
{
|
|
108
|
-
unit_class
|
|
114
|
+
unit_class.ACTION_CLASS_PARAM_NAME => default_class_name,
|
|
109
115
|
"format" => :html,
|
|
110
116
|
}
|
|
111
117
|
|
|
@@ -117,7 +123,7 @@ class MuchRails::Action::Router
|
|
|
117
123
|
as: url_name,
|
|
118
124
|
defaults:
|
|
119
125
|
{
|
|
120
|
-
unit_class
|
|
126
|
+
unit_class.ACTION_CLASS_PARAM_NAME => request_type_class_name,
|
|
121
127
|
"format" => :html,
|
|
122
128
|
},
|
|
123
129
|
constraints: request_type_proc,
|
|
@@ -20,7 +20,7 @@ class MuchRails::Action::UnprocessableEntityResult
|
|
|
20
20
|
let(:controller1){ FakeController.new(params1) }
|
|
21
21
|
let(:params1) do
|
|
22
22
|
{
|
|
23
|
-
MuchRails::Action::Router
|
|
23
|
+
MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME => "Actions::Show",
|
|
24
24
|
}
|
|
25
25
|
end
|
|
26
26
|
let(:errors1) do
|
data/test/unit/action_tests.rb
CHANGED
|
@@ -176,11 +176,7 @@ module MuchRails::Action
|
|
|
176
176
|
class InitTests < ReceiverTests
|
|
177
177
|
desc "when init"
|
|
178
178
|
subject do
|
|
179
|
-
receiver_class.new(
|
|
180
|
-
params: params1,
|
|
181
|
-
current_session: current_session1,
|
|
182
|
-
request: request1,
|
|
183
|
-
)
|
|
179
|
+
receiver_class.new(params: params1, request: request1)
|
|
184
180
|
end
|
|
185
181
|
|
|
186
182
|
let(:receiver_class) do
|
|
@@ -203,7 +199,7 @@ module MuchRails::Action
|
|
|
203
199
|
end
|
|
204
200
|
|
|
205
201
|
if params[:fail_custom_validation]
|
|
206
|
-
errors[
|
|
202
|
+
errors["custom_validation"] << "ERROR1"
|
|
207
203
|
end
|
|
208
204
|
end
|
|
209
205
|
|
|
@@ -218,6 +214,10 @@ module MuchRails::Action
|
|
|
218
214
|
on_after_call do
|
|
219
215
|
@after_call_called = true
|
|
220
216
|
end
|
|
217
|
+
|
|
218
|
+
def action_controller_session
|
|
219
|
+
controller_session
|
|
220
|
+
end
|
|
221
221
|
end
|
|
222
222
|
end
|
|
223
223
|
|
|
@@ -234,16 +234,41 @@ module MuchRails::Action
|
|
|
234
234
|
active: "true",
|
|
235
235
|
}
|
|
236
236
|
end
|
|
237
|
-
let(:
|
|
238
|
-
let(:request1){ "REQUEST 1" }
|
|
237
|
+
let(:request1){ FakeRequest.new }
|
|
239
238
|
|
|
240
|
-
should have_readers :params, :
|
|
239
|
+
should have_readers :params, :request, :errors
|
|
240
|
+
should have_writers :controller_session
|
|
241
241
|
should have_imeths :on_call, :valid_action?, :successful_action?
|
|
242
242
|
|
|
243
243
|
should "know its attributes" do
|
|
244
244
|
assert_that(subject.params).equals(params1.with_indifferent_access)
|
|
245
|
-
assert_that(subject.current_session).equals(current_session1)
|
|
246
245
|
assert_that(subject.request).equals(request1)
|
|
246
|
+
assert_that(subject.action_controller_session).is_a(FakeSession)
|
|
247
|
+
|
|
248
|
+
receiver = receiver_class.new(params: params1)
|
|
249
|
+
assert_that(receiver.action_controller_session).is_nil
|
|
250
|
+
|
|
251
|
+
controller_session = FakeRequest.new
|
|
252
|
+
receiver.controller_session = controller_session
|
|
253
|
+
assert_that(receiver.action_controller_session).is(controller_session)
|
|
254
|
+
|
|
255
|
+
receiver =
|
|
256
|
+
receiver_class.new(params: params1, request: FakeRequestWithNoEnv.new)
|
|
257
|
+
assert_that(receiver.action_controller_session).is_nil
|
|
258
|
+
|
|
259
|
+
receiver =
|
|
260
|
+
receiver_class.new(
|
|
261
|
+
params: params1,
|
|
262
|
+
request: FakeRequestWithNoControllerInstance.new,
|
|
263
|
+
)
|
|
264
|
+
assert_that(receiver.action_controller_session).is_nil
|
|
265
|
+
|
|
266
|
+
receiver =
|
|
267
|
+
receiver_class.new(
|
|
268
|
+
params: params1,
|
|
269
|
+
request: FakeRequestWithNoControllerInstance.new,
|
|
270
|
+
)
|
|
271
|
+
assert_that(receiver.action_controller_session).is_nil
|
|
247
272
|
end
|
|
248
273
|
|
|
249
274
|
should "return the expected Result" do
|
|
@@ -409,4 +434,31 @@ module MuchRails::Action
|
|
|
409
434
|
assert_that(result.errors[:custom_validation]).includes("ERROR1")
|
|
410
435
|
end
|
|
411
436
|
end
|
|
437
|
+
|
|
438
|
+
class FakeController
|
|
439
|
+
def session
|
|
440
|
+
FakeSession.new
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
class FakeSession
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
class FakeRequest
|
|
448
|
+
def env
|
|
449
|
+
{ "action_controller.instance" => FakeController.new }
|
|
450
|
+
end
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
class FakeRequestWithNoControllerInstance
|
|
454
|
+
def env
|
|
455
|
+
{ "action_controller.instance" => nil }
|
|
456
|
+
end
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
class FakeRequestWithNoEnv
|
|
460
|
+
def env
|
|
461
|
+
nil
|
|
462
|
+
end
|
|
463
|
+
end
|
|
412
464
|
end
|
data/test/unit/assets_tests.rb
CHANGED
|
@@ -48,7 +48,7 @@ module MuchRails::Assets
|
|
|
48
48
|
|
|
49
49
|
should "configure the app's app/assets/css folder as a source" do
|
|
50
50
|
source =
|
|
51
|
-
subject.config.sources.
|
|
51
|
+
subject.config.sources.find do |source|
|
|
52
52
|
source.path == FakeRails.root.join("app", "assets", "css").to_s
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -63,7 +63,7 @@ module MuchRails::Assets
|
|
|
63
63
|
|
|
64
64
|
should "configure the app's app/assets/img folder as a source" do
|
|
65
65
|
source =
|
|
66
|
-
subject.config.sources.
|
|
66
|
+
subject.config.sources.find do |source|
|
|
67
67
|
source.path == FakeRails.root.join("app", "assets", "img").to_s
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -74,7 +74,7 @@ module MuchRails::Assets
|
|
|
74
74
|
|
|
75
75
|
should "configure the app's app/assets/js folder as a source" do
|
|
76
76
|
source =
|
|
77
|
-
subject.config.sources.
|
|
77
|
+
subject.config.sources.find do |source|
|
|
78
78
|
source.path == FakeRails.root.join("app", "assets", "js").to_s
|
|
79
79
|
end
|
|
80
80
|
|
|
@@ -87,7 +87,7 @@ module MuchRails::Assets
|
|
|
87
87
|
|
|
88
88
|
should "configure the app's app/assets/vendor folder as a source" do
|
|
89
89
|
source =
|
|
90
|
-
subject.config.sources.
|
|
90
|
+
subject.config.sources.find do |source|
|
|
91
91
|
source.path == FakeRails.root.join("app", "assets", "vendor").to_s
|
|
92
92
|
end
|
|
93
93
|
|
|
@@ -64,19 +64,27 @@ class MuchRails::ChangeActionResult
|
|
|
64
64
|
class ValidationMethodsTests < UnitTests
|
|
65
65
|
desc "validation methods"
|
|
66
66
|
subject do
|
|
67
|
-
unit_class.failure(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
unit_class.failure(
|
|
68
|
+
validation_errors: {
|
|
69
|
+
name: ["NAME ERROR"],
|
|
70
|
+
other: ["OTHER ERROR"],
|
|
71
|
+
empty: [],
|
|
72
|
+
none: nil,
|
|
73
|
+
},
|
|
74
|
+
)
|
|
71
75
|
end
|
|
72
76
|
|
|
73
77
|
should "know its attributes" do
|
|
74
78
|
# validation_errors
|
|
75
79
|
assert_that(subject.validation_errors)
|
|
76
80
|
.equals({
|
|
77
|
-
name
|
|
78
|
-
other
|
|
81
|
+
"name" => ["NAME ERROR"],
|
|
82
|
+
"other" => ["OTHER ERROR"],
|
|
83
|
+
"empty" => [],
|
|
84
|
+
"none" => [nil],
|
|
79
85
|
})
|
|
86
|
+
assert_that(subject.validation_errors[:name]).equals(["NAME ERROR"])
|
|
87
|
+
assert_that(subject.validation_errors["name"]).equals(["NAME ERROR"])
|
|
80
88
|
|
|
81
89
|
# validation_error_messages
|
|
82
90
|
assert_that(subject.validation_error_messages)
|
|
@@ -88,8 +96,14 @@ class MuchRails::ChangeActionResult
|
|
|
88
96
|
# extract_validation_error
|
|
89
97
|
assert_that(subject.extract_validation_error(:name))
|
|
90
98
|
.equals(["NAME ERROR"])
|
|
91
|
-
assert_that(subject.extract_validation_error(
|
|
99
|
+
assert_that(subject.extract_validation_error("other"))
|
|
92
100
|
.equals(["OTHER ERROR"])
|
|
101
|
+
assert_that(subject.extract_validation_error(:empty))
|
|
102
|
+
.equals([])
|
|
103
|
+
assert_that(subject.extract_validation_error("none"))
|
|
104
|
+
.equals([])
|
|
105
|
+
assert_that(subject.extract_validation_error(:unknown))
|
|
106
|
+
.equals([])
|
|
93
107
|
assert_that(subject.validation_errors).is_empty
|
|
94
108
|
|
|
95
109
|
# any_unextracted_validation_errors?
|
|
@@ -57,14 +57,7 @@ module MuchRails::ChangeAction
|
|
|
57
57
|
|
|
58
58
|
class InitTests < ReceiverTests
|
|
59
59
|
desc "when init"
|
|
60
|
-
subject{ receiver_class.new(params: {}) }
|
|
61
|
-
subject do
|
|
62
|
-
receiver_class.new(
|
|
63
|
-
params: {},
|
|
64
|
-
current_session: nil,
|
|
65
|
-
request: nil,
|
|
66
|
-
)
|
|
67
|
-
end
|
|
60
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
68
61
|
|
|
69
62
|
setup do
|
|
70
63
|
Assert.stub(subject, :any_unextracted_change_result_validation_errors?) do
|
|
@@ -84,13 +77,7 @@ module MuchRails::ChangeAction
|
|
|
84
77
|
|
|
85
78
|
class RecordErrorsWithResultExceptionTests < InitTests
|
|
86
79
|
desc "with record errors and a result exception"
|
|
87
|
-
subject
|
|
88
|
-
receiver_class.new(
|
|
89
|
-
params: {},
|
|
90
|
-
current_session: nil,
|
|
91
|
-
request: nil,
|
|
92
|
-
)
|
|
93
|
-
end
|
|
80
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
94
81
|
|
|
95
82
|
setup do
|
|
96
83
|
Assert.stub(subject, :any_unextracted_change_result_validation_errors?) do
|
|
@@ -118,13 +105,7 @@ module MuchRails::ChangeAction
|
|
|
118
105
|
|
|
119
106
|
class RecordErrorsWithNoResultExceptionTests < InitTests
|
|
120
107
|
desc "with record errors and no result exception"
|
|
121
|
-
subject
|
|
122
|
-
receiver_class.new(
|
|
123
|
-
params: {},
|
|
124
|
-
current_session: nil,
|
|
125
|
-
request: nil,
|
|
126
|
-
)
|
|
127
|
-
end
|
|
108
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
128
109
|
|
|
129
110
|
setup do
|
|
130
111
|
Assert.stub(subject, :any_unextracted_change_result_validation_errors?) do
|
|
@@ -149,13 +130,7 @@ module MuchRails::ChangeAction
|
|
|
149
130
|
|
|
150
131
|
class ChangeResultMethodTests < InitTests
|
|
151
132
|
desc "#change_result method"
|
|
152
|
-
subject
|
|
153
|
-
receiver_class.new(
|
|
154
|
-
params: {},
|
|
155
|
-
current_session: nil,
|
|
156
|
-
request: nil,
|
|
157
|
-
)
|
|
158
|
-
end
|
|
133
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
159
134
|
|
|
160
135
|
should "memoize and return the expected Result" do
|
|
161
136
|
result = subject.change_result
|
|
@@ -178,13 +153,7 @@ module MuchRails::ChangeAction
|
|
|
178
153
|
|
|
179
154
|
class AnyUnextractedChangeResultValidationErrorsMethodTests < ReceiverTests
|
|
180
155
|
desc "#any_unextracted_change_result_validation_errors? method"
|
|
181
|
-
subject
|
|
182
|
-
receiver_class.new(
|
|
183
|
-
params: {},
|
|
184
|
-
current_session: nil,
|
|
185
|
-
request: nil,
|
|
186
|
-
)
|
|
187
|
-
end
|
|
156
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
188
157
|
|
|
189
158
|
let(:receiver_class) do
|
|
190
159
|
Class.new do
|
|
@@ -205,13 +174,7 @@ module MuchRails::ChangeAction
|
|
|
205
174
|
class NoValidationErrorsTests <
|
|
206
175
|
AnyUnextractedChangeResultValidationErrorsMethodTests
|
|
207
176
|
desc "with no validation errors"
|
|
208
|
-
subject
|
|
209
|
-
receiver_class.new(
|
|
210
|
-
params: {},
|
|
211
|
-
current_session: nil,
|
|
212
|
-
request: nil,
|
|
213
|
-
)
|
|
214
|
-
end
|
|
177
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
215
178
|
|
|
216
179
|
let(:receiver_class) do
|
|
217
180
|
Class.new do
|
|
@@ -232,13 +195,7 @@ module MuchRails::ChangeAction
|
|
|
232
195
|
class ValidationErrorsTests <
|
|
233
196
|
AnyUnextractedChangeResultValidationErrorsMethodTests
|
|
234
197
|
desc "with validation errors"
|
|
235
|
-
subject
|
|
236
|
-
receiver_class.new(
|
|
237
|
-
params: {},
|
|
238
|
-
current_session: nil,
|
|
239
|
-
request: nil,
|
|
240
|
-
)
|
|
241
|
-
end
|
|
198
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
242
199
|
|
|
243
200
|
let(:receiver_class) do
|
|
244
201
|
Class.new do
|
data/test/unit/config_tests.rb
CHANGED
|
@@ -10,59 +10,8 @@ module MuchRails::Config
|
|
|
10
10
|
|
|
11
11
|
let(:unit_class){ MuchRails::Config }
|
|
12
12
|
|
|
13
|
-
should "
|
|
14
|
-
assert_that(
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
class ReceiverTests < UnitTests
|
|
19
|
-
desc "receiver"
|
|
20
|
-
subject{ receiver_class }
|
|
21
|
-
|
|
22
|
-
setup do
|
|
23
|
-
class receiver_class::Config
|
|
24
|
-
attr_accessor :value
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
class receiver_class::AnotherConfig
|
|
28
|
-
include MuchRails::Config
|
|
29
|
-
|
|
30
|
-
add_instance_config :sub, method_name: :sub
|
|
31
|
-
|
|
32
|
-
attr_accessor :another_value
|
|
33
|
-
|
|
34
|
-
class SubConfig
|
|
35
|
-
attr_accessor :sub_value
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
let(:receiver_class) do
|
|
41
|
-
Class.new do
|
|
42
|
-
include MuchRails::Config
|
|
43
|
-
|
|
44
|
-
add_config
|
|
45
|
-
add_config :another
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
should have_imeths :config, :another_config
|
|
50
|
-
|
|
51
|
-
should "know its attributes" do
|
|
52
|
-
assert_that(subject.config).is_instance_of(subject::Config)
|
|
53
|
-
subject.configure{ |config| config.value = "VALUE 1" }
|
|
54
|
-
assert_that(subject.config.value).equals("VALUE 1")
|
|
55
|
-
|
|
56
|
-
assert_that(subject.another_config).is_instance_of(subject::AnotherConfig)
|
|
57
|
-
subject.configure_another{ |config| config.another_value = "VALUE 2" }
|
|
58
|
-
assert_that(subject.another_config.another_value).equals("VALUE 2")
|
|
59
|
-
|
|
60
|
-
assert_that(subject.another_config.sub)
|
|
61
|
-
.is_instance_of(subject::AnotherConfig::SubConfig)
|
|
62
|
-
subject.another_config.configure_sub do |sub|
|
|
63
|
-
sub.sub_value = "VALUE 3"
|
|
64
|
-
end
|
|
65
|
-
assert_that(subject.another_config.sub.sub_value).equals("VALUE 3")
|
|
13
|
+
should "be MuchConfig" do
|
|
14
|
+
assert_that(unit_class).is(MuchConfig)
|
|
66
15
|
end
|
|
67
16
|
end
|
|
68
17
|
end
|
|
@@ -50,13 +50,7 @@ module MuchRails::DestroyAction
|
|
|
50
50
|
|
|
51
51
|
class InitTests < ReceiverTests
|
|
52
52
|
desc "when init"
|
|
53
|
-
subject
|
|
54
|
-
receiver_class.new(
|
|
55
|
-
params: {},
|
|
56
|
-
current_session: nil,
|
|
57
|
-
request: nil,
|
|
58
|
-
)
|
|
59
|
-
end
|
|
53
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
60
54
|
|
|
61
55
|
should have_imeths :destroy_result
|
|
62
56
|
|
|
@@ -73,6 +73,7 @@ module MuchRails::DestroyService
|
|
|
73
73
|
RuntimeError.new(Factory.string),
|
|
74
74
|
ArgumentError.new(Factory.string),
|
|
75
75
|
MuchRails::Records::DestructionInvalid.new(FakeRecord.new),
|
|
76
|
+
MuchRails::InvalidError.new,
|
|
76
77
|
]
|
|
77
78
|
end
|
|
78
79
|
let(:exception_classes){ exceptions.map(&:class) }
|
|
@@ -102,6 +103,8 @@ module MuchRails::DestroyService
|
|
|
102
103
|
.is_an_instance_of(MuchRails::ServiceValidationErrors)
|
|
103
104
|
assert_that(subject.service_validation_errors.exception_classes)
|
|
104
105
|
.includes(MuchRails::Records::DestructionInvalid)
|
|
106
|
+
assert_that(subject.service_validation_errors.exception_classes)
|
|
107
|
+
.includes(MuchRails::InvalidError)
|
|
105
108
|
end
|
|
106
109
|
end
|
|
107
110
|
|
|
@@ -185,6 +188,22 @@ module MuchRails::DestroyService
|
|
|
185
188
|
end
|
|
186
189
|
end
|
|
187
190
|
|
|
191
|
+
class ValidationErrorsResultForInvalidErrorTests < ValidationErrorsTests
|
|
192
|
+
desc "when .result_for is passed an MuchRails::InvalidError"
|
|
193
|
+
|
|
194
|
+
let(:exception){ MuchRails::InvalidError.new }
|
|
195
|
+
|
|
196
|
+
should "return a failure result with the record and validation errors" do
|
|
197
|
+
result = subject.result_for(exception)
|
|
198
|
+
|
|
199
|
+
assert_that(result.failure?).is_true
|
|
200
|
+
assert_that(result.exception).equals(exception)
|
|
201
|
+
assert_that(result.validation_errors).equals(exception.errors)
|
|
202
|
+
assert_that(result.validation_error_messages)
|
|
203
|
+
.equals(exception.error_messages)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
188
207
|
class FailureResultTests < UnitTests
|
|
189
208
|
desc "FailureResult"
|
|
190
209
|
subject{ unit_class::FailureResult }
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "assert"
|
|
4
|
+
require "much-rails/invalid_error"
|
|
5
|
+
|
|
6
|
+
class MuchRails::InvalidError
|
|
7
|
+
class UnitTests < Assert::Context
|
|
8
|
+
desc "MuchRails::InvalidError"
|
|
9
|
+
subject{ unit_class }
|
|
10
|
+
|
|
11
|
+
let(:unit_class){ MuchRails::InvalidError }
|
|
12
|
+
|
|
13
|
+
should "be configured as expected" do
|
|
14
|
+
assert_that(subject < StandardError).is_true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class InitSetupTests < UnitTests
|
|
19
|
+
desc "when init"
|
|
20
|
+
subject{ unit_class.new }
|
|
21
|
+
|
|
22
|
+
should have_readers :errors
|
|
23
|
+
should have_imeths :error_messages
|
|
24
|
+
|
|
25
|
+
should "know its attributes" do
|
|
26
|
+
assert_that(subject.backtrace).is_nil
|
|
27
|
+
assert_that(subject.errors).equals({})
|
|
28
|
+
assert_that(subject.message).equals(subject.errors.inspect)
|
|
29
|
+
assert_that(subject.error_messages).equals([])
|
|
30
|
+
|
|
31
|
+
backtrace = Array.new(Factory.integer(3)){ Factory.path }
|
|
32
|
+
errors =
|
|
33
|
+
{
|
|
34
|
+
field1: ["ERROR 1A", "ERROR 2B"],
|
|
35
|
+
field2: "ERROR 2A",
|
|
36
|
+
}
|
|
37
|
+
exception = unit_class.new(backtrace: backtrace, **errors)
|
|
38
|
+
assert_that(exception.backtrace).equals(backtrace)
|
|
39
|
+
assert_that(exception.errors).equals(errors)
|
|
40
|
+
assert_that(exception.message).equals(exception.errors.inspect)
|
|
41
|
+
assert_that(exception.error_messages)
|
|
42
|
+
.equals(["field1: ERROR 1A and ERROR 2B", "field2: ERROR 2A"])
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -50,13 +50,7 @@ module MuchRails::SaveAction
|
|
|
50
50
|
|
|
51
51
|
class InitTests < ReceiverTests
|
|
52
52
|
desc "when init"
|
|
53
|
-
subject
|
|
54
|
-
receiver_class.new(
|
|
55
|
-
params: {},
|
|
56
|
-
current_session: nil,
|
|
57
|
-
request: nil,
|
|
58
|
-
)
|
|
59
|
-
end
|
|
53
|
+
subject{ receiver_class.new(params: {}, request: nil) }
|
|
60
54
|
|
|
61
55
|
should have_imeths :save_result
|
|
62
56
|
|
|
@@ -73,6 +73,7 @@ module MuchRails::SaveService
|
|
|
73
73
|
RuntimeError.new(Factory.string),
|
|
74
74
|
ArgumentError.new(Factory.string),
|
|
75
75
|
ActiveRecord::RecordInvalid.new(FakeRecord.new),
|
|
76
|
+
MuchRails::InvalidError.new,
|
|
76
77
|
]
|
|
77
78
|
end
|
|
78
79
|
let(:exception_classes){ exceptions.map(&:class) }
|
|
@@ -102,6 +103,8 @@ module MuchRails::SaveService
|
|
|
102
103
|
.is_an_instance_of(MuchRails::ServiceValidationErrors)
|
|
103
104
|
assert_that(subject.service_validation_errors.exception_classes)
|
|
104
105
|
.includes(ActiveRecord::RecordInvalid)
|
|
106
|
+
assert_that(subject.service_validation_errors.exception_classes)
|
|
107
|
+
.includes(MuchRails::InvalidError)
|
|
105
108
|
end
|
|
106
109
|
end
|
|
107
110
|
|
|
@@ -197,6 +200,22 @@ module MuchRails::SaveService
|
|
|
197
200
|
end
|
|
198
201
|
end
|
|
199
202
|
|
|
203
|
+
class ValidationErrorsResultForInvalidErrorTests < ValidationErrorsTests
|
|
204
|
+
desc "when .result_for is passed an MuchRails::InvalidError"
|
|
205
|
+
|
|
206
|
+
let(:exception){ MuchRails::InvalidError.new }
|
|
207
|
+
|
|
208
|
+
should "return a failure result with the record and validation errors" do
|
|
209
|
+
result = subject.result_for(exception)
|
|
210
|
+
|
|
211
|
+
assert_that(result.failure?).is_true
|
|
212
|
+
assert_that(result.exception).equals(exception)
|
|
213
|
+
assert_that(result.validation_errors).equals(exception.errors)
|
|
214
|
+
assert_that(result.validation_error_messages)
|
|
215
|
+
.equals(exception.error_messages)
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
200
219
|
class FailureResultTests < UnitTests
|
|
201
220
|
desc "FailureResult"
|
|
202
221
|
subject{ unit_class::FailureResult }
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: much-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kelly Redding
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2021-
|
|
12
|
+
date: 2021-06-23 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: much-style-guide
|
|
@@ -17,28 +17,28 @@ dependencies:
|
|
|
17
17
|
requirements:
|
|
18
18
|
- - "~>"
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: 0.6.
|
|
20
|
+
version: 0.6.6
|
|
21
21
|
type: :development
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
25
|
- - "~>"
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: 0.6.
|
|
27
|
+
version: 0.6.6
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: assert
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
32
|
- - "~>"
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: 2.19.
|
|
34
|
+
version: 2.19.6
|
|
35
35
|
type: :development
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
39
|
- - "~>"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: 2.19.
|
|
41
|
+
version: 2.19.6
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: rails
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -105,14 +105,14 @@ dependencies:
|
|
|
105
105
|
requirements:
|
|
106
106
|
- - "~>"
|
|
107
107
|
- !ruby/object:Gem::Version
|
|
108
|
-
version: 0.15.
|
|
108
|
+
version: 0.15.3
|
|
109
109
|
type: :runtime
|
|
110
110
|
prerelease: false
|
|
111
111
|
version_requirements: !ruby/object:Gem::Requirement
|
|
112
112
|
requirements:
|
|
113
113
|
- - "~>"
|
|
114
114
|
- !ruby/object:Gem::Version
|
|
115
|
-
version: 0.15.
|
|
115
|
+
version: 0.15.3
|
|
116
116
|
- !ruby/object:Gem::Dependency
|
|
117
117
|
name: dassets-erubi
|
|
118
118
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -155,6 +155,20 @@ dependencies:
|
|
|
155
155
|
- - "~>"
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
157
|
version: 0.2.1
|
|
158
|
+
- !ruby/object:Gem::Dependency
|
|
159
|
+
name: much-config
|
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
|
161
|
+
requirements:
|
|
162
|
+
- - "~>"
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: 0.1.0
|
|
165
|
+
type: :runtime
|
|
166
|
+
prerelease: false
|
|
167
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - "~>"
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: 0.1.0
|
|
158
172
|
- !ruby/object:Gem::Dependency
|
|
159
173
|
name: much-decimal
|
|
160
174
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -231,14 +245,14 @@ dependencies:
|
|
|
231
245
|
requirements:
|
|
232
246
|
- - "~>"
|
|
233
247
|
- !ruby/object:Gem::Version
|
|
234
|
-
version: '3.
|
|
248
|
+
version: '3.11'
|
|
235
249
|
type: :runtime
|
|
236
250
|
prerelease: false
|
|
237
251
|
version_requirements: !ruby/object:Gem::Requirement
|
|
238
252
|
requirements:
|
|
239
253
|
- - "~>"
|
|
240
254
|
- !ruby/object:Gem::Version
|
|
241
|
-
version: '3.
|
|
255
|
+
version: '3.11'
|
|
242
256
|
description: Rails utilities.
|
|
243
257
|
email:
|
|
244
258
|
- kelly@kellyredding.com
|
|
@@ -277,6 +291,7 @@ files:
|
|
|
277
291
|
- lib/much-rails/destroy_service.rb
|
|
278
292
|
- lib/much-rails/has_slug.rb
|
|
279
293
|
- lib/much-rails/input_value.rb
|
|
294
|
+
- lib/much-rails/invalid_error.rb
|
|
280
295
|
- lib/much-rails/json.rb
|
|
281
296
|
- lib/much-rails/layout.rb
|
|
282
297
|
- lib/much-rails/layout/helper.rb
|
|
@@ -304,6 +319,7 @@ files:
|
|
|
304
319
|
- test/helper.rb
|
|
305
320
|
- test/support/actions/show.rb
|
|
306
321
|
- test/support/config/routes/test.rb
|
|
322
|
+
- test/support/config/routes/test/subrouter.rb
|
|
307
323
|
- test/support/factory.rb
|
|
308
324
|
- test/support/fake_action_controller.rb
|
|
309
325
|
- test/system/.keep
|
|
@@ -333,6 +349,7 @@ files:
|
|
|
333
349
|
- test/unit/destroy_service_tests.rb
|
|
334
350
|
- test/unit/has_slug_tests.rb
|
|
335
351
|
- test/unit/input_value_tests.rb
|
|
352
|
+
- test/unit/invalid_error_tests.rb
|
|
336
353
|
- test/unit/json_tests.rb
|
|
337
354
|
- test/unit/layout_tests.rb
|
|
338
355
|
- test/unit/mixin_tests.rb
|
|
@@ -371,7 +388,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
371
388
|
- !ruby/object:Gem::Version
|
|
372
389
|
version: '0'
|
|
373
390
|
requirements: []
|
|
374
|
-
rubygems_version: 3.
|
|
391
|
+
rubygems_version: 3.1.6
|
|
375
392
|
signing_key:
|
|
376
393
|
specification_version: 4
|
|
377
394
|
summary: Rails utilities.
|
|
@@ -379,6 +396,7 @@ test_files:
|
|
|
379
396
|
- test/helper.rb
|
|
380
397
|
- test/support/actions/show.rb
|
|
381
398
|
- test/support/config/routes/test.rb
|
|
399
|
+
- test/support/config/routes/test/subrouter.rb
|
|
382
400
|
- test/support/factory.rb
|
|
383
401
|
- test/support/fake_action_controller.rb
|
|
384
402
|
- test/system/.keep
|
|
@@ -408,6 +426,7 @@ test_files:
|
|
|
408
426
|
- test/unit/destroy_service_tests.rb
|
|
409
427
|
- test/unit/has_slug_tests.rb
|
|
410
428
|
- test/unit/input_value_tests.rb
|
|
429
|
+
- test/unit/invalid_error_tests.rb
|
|
411
430
|
- test/unit/json_tests.rb
|
|
412
431
|
- test/unit/layout_tests.rb
|
|
413
432
|
- test/unit/mixin_tests.rb
|