much-rails 0.2.6 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 604eda47d3d5c2f66e52716269d3652f8799c022187829e83c2815fcf22dfd11
4
- data.tar.gz: f765d10688da5b2a2aeb8827532806cf2c92a2bdf54fe8aedb2bcefc8304ffae
3
+ metadata.gz: ecafeddd844c1b0413250e832370b88742ede359cb73b4b567ed4a85e2e375d6
4
+ data.tar.gz: 484ebe9506dcefe40232b5dac153f6e9d034c21b3a0f57d6b57888f740222f69
5
5
  SHA512:
6
- metadata.gz: 2170ba5582c6f6eb88011b2188bcd69f89c57b05d0df8a56ab26678ab52409cda999cac0b129d1606a70770414d067f09d3b7c8702df6e451f89c40bb9079452
7
- data.tar.gz: a92cc7b6571d14e755ba60c4156c2daffe142c86c2204a60869c7d5f56130d7d265480884adc9a03dee4e90bdc07e148319593c53e900eefde62a32488c3bdf8
6
+ metadata.gz: 6b44bb34ff3ad725bea2dbc6409830673f1553e01004b3d4476caf2b6d5dfaf5b96986d061f2a6e7ccbe3d4b5ba6a0f9108026b665dc23d9c0c9a9d2f205f77e
7
+ data.tar.gz: 064be4d568511f4ec5175f9b2ab290187e5f4bca88d25f993c2ff3762b71b541b57a8d6b8f21d38ee76680ab631a83c27c7b5bdd8e0f6ac59d6c25ad2555b28d
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"
@@ -31,7 +31,7 @@ module MuchRails::Action
31
31
 
32
32
  add_config :much_rails_action
33
33
 
34
- attr_reader :params, :current_user, :request, :errors
34
+ attr_reader :params, :request, :errors
35
35
  end
36
36
 
37
37
  mixin_class_methods do
@@ -107,19 +107,15 @@ module MuchRails::Action
107
107
 
108
108
  def default_action_template_name
109
109
  @default_action_template_name ||=
110
- to_s
111
- .remove(/\A#{MuchRails.config.action.namespace}/)
112
- .tableize
113
- .singularize
110
+ to_s.remove(/\A#{MuchRails.config.action.namespace}/).underscore
114
111
  end
115
112
  end
116
113
 
117
114
  mixin_instance_methods do
118
- def initialize(params: nil, current_user: nil, request: nil)
115
+ def initialize(params: nil, request: nil)
119
116
  @params = params.to_h.with_indifferent_access
120
- @current_user = current_user
121
117
  @request = request
122
- @errors = Hash.new{ |hash, key| hash[key] = [] }
118
+ @errors = HashWithIndifferentAccess.new{ |hash, key| hash[key] = [] }
123
119
  end
124
120
 
125
121
  def on_call
@@ -153,8 +149,17 @@ module MuchRails::Action
153
149
  @much_rails_successful_action
154
150
  end
155
151
 
152
+ def controller_session=(value)
153
+ @controller_session = value
154
+ end
155
+
156
156
  private
157
157
 
158
+ def controller_session
159
+ @controller_session ||=
160
+ request&.env&.[]("action_controller.instance")&.session
161
+ end
162
+
158
163
  def default_action_success_result
159
164
  MuchRails::Action::HeadResult.new(:ok)
160
165
  end
@@ -257,6 +262,10 @@ module MuchRails::Action
257
262
  template: template || default_action_template_name,
258
263
  }.merge(**kargs)
259
264
 
265
+ if view_model&.respond_to?(:much_rails_action=)
266
+ view_model.much_rails_action = self
267
+ end
268
+
260
269
  @much_rails_action_result =
261
270
  MuchRails::Action::RenderResult.new(view_model, *args, **result_kargs)
262
271
  halt
@@ -149,7 +149,7 @@ class MuchRails::Action::BaseRouter
149
149
  # get "/new", "Root::New"
150
150
  # post "/", "Root::Create"
151
151
  # get "/edit", "Root::Edit"
152
- # put "/", "Root::Update"
152
+ # put "/", "Root::Upsert"
153
153
  # patch "/", "Root::Update"
154
154
  # get "/remove", "Root::Remove"
155
155
  # delete "/", "Root::Destroy"
@@ -301,6 +301,14 @@ class MuchRails::Action::BaseRouter
301
301
  def constraints_lambda
302
302
  request_type.constraints_lambda
303
303
  end
304
+
305
+ def class_constant
306
+ @class_constant ||= class_name.constantize
307
+ end
308
+
309
+ def format
310
+ class_constant.format
311
+ end
304
312
  end
305
313
 
306
314
  class URLSet
@@ -460,6 +468,16 @@ class MuchRails::Action::BaseRouter
460
468
  !@default_action_class_name.nil?
461
469
  end
462
470
 
471
+ def default_action_class_constant
472
+ return unless has_default_action_class_name?
473
+
474
+ @default_action_class_constant ||= default_action_class_name.constantize
475
+ end
476
+
477
+ def default_action_format
478
+ default_action_class_constant&.format
479
+ end
480
+
463
481
  def ==(other)
464
482
  return super unless other.is_a?(self.class)
465
483
 
@@ -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
- before_action(
21
+ prepend_before_action(
20
22
  :require_much_rails_action_class,
21
- only: MuchRails::Action::Router::CONTROLLER_CALL_ACTION_METHOD_NAME,
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::CONTROLLER_CALL_ACTION_METHOD_NAME,
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_user: current_user,
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::CONTROLLER_NOT_FOUND_METHOD_NAME,
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::ACTION_CLASS_PARAM_NAME]}"
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 || DEFAULT_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::ACTION_CLASS_PARAM_NAME,
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 = "application"
10
- CONTROLLER_CALL_ACTION_METHOD_NAME = :much_rails_call_action
11
- CONTROLLER_NOT_FOUND_METHOD_NAME = :much_rails_not_found
12
- ACTION_CLASS_PARAM_NAME = :much_rails_action_class_name
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
@@ -38,7 +49,7 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
38
49
  def initialize(name = nil, controller_name: nil, &block)
39
50
  super(name, &block)
40
51
 
41
- @controller_name = controller_name || DEFAULT_CONTROLLER_NAME
52
+ @controller_name = controller_name || self.class.DEFAULT_CONTROLLER_NAME
42
53
  end
43
54
 
44
55
  # Example:
@@ -49,8 +60,12 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
49
60
  # end
50
61
  def apply_to(application_routes_draw_scope)
51
62
  validate!
52
- draw_url_to = "#{controller_name}##{CONTROLLER_NOT_FOUND_METHOD_NAME}"
53
- draw_route_to = "#{controller_name}##{CONTROLLER_CALL_ACTION_METHOD_NAME}"
63
+ draw_url_to =
64
+ "#{controller_name}##{self.class.CONTROLLER_NOT_FOUND_METHOD_NAME}"
65
+ draw_route_to =
66
+ "#{controller_name}##{self.class.CONTROLLER_CALL_ACTION_METHOD_NAME}"
67
+
68
+ definition_names = Set.new
54
69
 
55
70
  definitions.each do |definition|
56
71
  definition.request_type_actions.each do |request_type_action|
@@ -58,10 +73,12 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
58
73
  definition.http_method,
59
74
  definition.path,
60
75
  to: draw_route_to,
61
- as: definition.name,
76
+ as: (definition.name if definition_names.add?(definition.name)),
62
77
  defaults:
63
78
  definition.default_params.merge({
64
- ACTION_CLASS_PARAM_NAME => request_type_action.class_name,
79
+ self.class.ACTION_CLASS_PARAM_NAME =>
80
+ request_type_action.class_name,
81
+ "format" => request_type_action.format,
65
82
  }),
66
83
  constraints: request_type_action.constraints_lambda,
67
84
  )
@@ -73,10 +90,12 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
73
90
  definition.http_method,
74
91
  definition.path,
75
92
  to: draw_route_to,
76
- as: definition.name,
93
+ as: (definition.name if definition_names.add?(definition.name)),
77
94
  defaults:
78
95
  definition.default_params.merge({
79
- ACTION_CLASS_PARAM_NAME => definition.default_action_class_name,
96
+ self.class.ACTION_CLASS_PARAM_NAME =>
97
+ definition.default_action_class_name,
98
+ "format" => definition.default_action_format,
80
99
  }),
81
100
  )
82
101
  end
@@ -93,14 +112,14 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
93
112
  def path_for(**kargs)
94
113
  MuchRails::RailsRoutes.instance.public_send(
95
114
  "#{name}_path",
96
- **kargs.symbolize_keys,
115
+ **kargs.symbolize_keys.except(:format),
97
116
  )
98
117
  end
99
118
 
100
119
  def url_for(**kargs)
101
120
  MuchRails::RailsRoutes.instance.public_send(
102
121
  "#{name}_url",
103
- **kargs.symbolize_keys,
122
+ **kargs.symbolize_keys.except(:format),
104
123
  )
105
124
  end
106
125
  end
@@ -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.get_for_all_results(:validation_errors).to_h
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?
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuchRails
4
- VERSION = "0.2.6"
4
+ VERSION = "0.4.1"
5
5
  end
data/much-rails.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |gem|
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.2"])
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"])
@@ -7,5 +7,7 @@ module Actions; end
7
7
  module Actions::Show
8
8
  include MuchRails::Action
9
9
 
10
+ format :html
11
+
10
12
  params_root :nested
11
13
  end
@@ -13,20 +13,31 @@ module FakeActionController
13
13
  end
14
14
 
15
15
  mixin_class_methods do
16
- def before_action(method_name, **)
17
- before_actions << method_name
16
+ def before_action(*args, &block)
17
+ before_action_calls << Assert::StubCall.new(*args, &block)
18
18
  end
19
19
 
20
- def before_actions
21
- @before_actions ||= []
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.before_actions.each do |before_action|
29
- public_send(before_action)
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
 
@@ -296,20 +296,30 @@ class MuchRails::Action::BaseRouter
296
296
  desc "when init"
297
297
  subject{ request_type_action_class.new(request_type1, action_class_name1) }
298
298
 
299
+ setup do
300
+ Assert.stub(action_class_name1, :constantize){ action_class1 }
301
+ end
302
+
299
303
  let(:name1){ Factory.symbol }
300
304
  let(:constraints_lambda1){ ->(request){} }
301
305
  let(:request_type1) do
302
306
  unit_class::RequestType.new(name1, constraints_lambda1)
303
307
  end
304
308
  let(:action_class_name1){ Factory.string }
309
+ let(:action_class1) do
310
+ Struct.new(:format).new([:html, :any].sample)
311
+ end
305
312
 
306
313
  should have_imeths :request_type, :class_name, :constraints_lambda
314
+ should have_imeths :class_constant, :format
307
315
 
308
316
  should "know its attributes" do
309
317
  assert_that(subject.request_type).equals(request_type1)
310
318
  assert_that(subject.class_name).equals(action_class_name1)
311
319
  assert_that(subject.constraints_lambda)
312
320
  .equals(request_type1.constraints_lambda)
321
+ assert_that(subject.class_constant).equals(action_class1)
322
+ assert_that(subject.format).equals(subject.class_constant.format)
313
323
  end
314
324
  end
315
325
 
@@ -506,6 +516,15 @@ class MuchRails::Action::BaseRouter
506
516
  )
507
517
  end
508
518
 
519
+ setup do
520
+ Assert.stub(default_action_class_name1, :constantize) do
521
+ default_action_class1
522
+ end
523
+ end
524
+
525
+ let(:default_action_class1) do
526
+ Struct.new(:format).new([:html, :any].sample)
527
+ end
509
528
  let(:default_params1) do
510
529
  { Factory.string => Factory.string }
511
530
  end
@@ -514,6 +533,7 @@ class MuchRails::Action::BaseRouter
514
533
  should have_readers :default_action_class_name, :request_type_actions
515
534
  should have_readers :called_from
516
535
  should have_imeths :path, :name, :has_default_action_class_name?
536
+ should have_imeths :default_action_class_constant, :default_action_format
517
537
 
518
538
  should "know its attributes" do
519
539
  assert_that(subject.http_method).equals(http_method1)
@@ -525,6 +545,10 @@ class MuchRails::Action::BaseRouter
525
545
  assert_that(subject.called_from).equals(caller1)
526
546
  assert_that(subject.path).equals(url_path1)
527
547
  assert_that(subject.name).equals(url_name1)
548
+ assert_that(subject.default_action_class_constant)
549
+ .equals(default_action_class1)
550
+ assert_that(subject.default_action_format)
551
+ .equals(subject.default_action_class_constant.format)
528
552
  end
529
553
  end
530
554
  end
@@ -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 constants" do
21
- assert_that(subject::DEFAULT_ACTION_CLASS_FORMAT).equals(:any)
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,15 +29,32 @@ 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
35
48
  desc "when init"
36
49
  subject{ receiver_class.new(params1) }
37
50
 
51
+ setup do
52
+ Assert.stub(::Actions::Show, :format){ nil }
53
+ end
54
+
38
55
  let(:params1) do
39
56
  {
40
- MuchRails::Action::Router::ACTION_CLASS_PARAM_NAME => "Actions::Show",
57
+ MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME => "Actions::Show",
41
58
  controller: "actions",
42
59
  action: "show",
43
60
  nested: {
@@ -49,10 +66,10 @@ module MuchRails::Action::Controller
49
66
  should have_readers :much_rails_action_class
50
67
 
51
68
  should have_imeths(
52
- MuchRails::Action::Router::CONTROLLER_CALL_ACTION_METHOD_NAME,
69
+ MuchRails::Action::Router.CONTROLLER_CALL_ACTION_METHOD_NAME,
53
70
  )
54
71
  should have_imeths(
55
- MuchRails::Action::Router::CONTROLLER_NOT_FOUND_METHOD_NAME,
72
+ MuchRails::Action::Router.CONTROLLER_NOT_FOUND_METHOD_NAME,
56
73
  )
57
74
  should have_imeths :much_rails_action_class_name
58
75
  should have_imeths :much_rails_action_class_format
@@ -65,7 +82,7 @@ module MuchRails::Action::Controller
65
82
  .equals("::Actions::Show")
66
83
 
67
84
  assert_that(subject.much_rails_action_class_format)
68
- .equals(unit_module::DEFAULT_ACTION_CLASS_FORMAT)
85
+ .equals(unit_module.DEFAULT_ACTION_CLASS_FORMAT)
69
86
 
70
87
  assert_that(subject.much_rails_action_params)
71
88
  .equals(
@@ -75,10 +92,9 @@ module MuchRails::Action::Controller
75
92
 
76
93
  assert_that(subject.much_rails_action_class).equals(Actions::Show)
77
94
 
78
- Actions::Show.format(:html)
95
+ Assert.stub(::Actions::Show, :format){ :html }
79
96
  receiver = receiver_class.new(params1)
80
97
  assert_that(receiver.much_rails_action_class_format).equals(:html)
81
- Actions::Show.format(nil)
82
98
  end
83
99
  end
84
100
 
@@ -88,7 +104,7 @@ module MuchRails::Action::Controller
88
104
 
89
105
  let(:params1) do
90
106
  {
91
- MuchRails::Action::Router::ACTION_CLASS_PARAM_NAME =>
107
+ MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME =>
92
108
  "Actions::Unknown",
93
109
  }
94
110
  end
@@ -16,17 +16,17 @@ class MuchRails::Action::Router
16
16
 
17
17
  should have_imeths :url_class
18
18
 
19
- should "be a BaseRouter" do
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 constants" do
24
- assert_that(subject::DEFAULT_CONTROLLER_NAME).equals("application")
25
- assert_that(subject::CONTROLLER_CALL_ACTION_METHOD_NAME)
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::CONTROLLER_NOT_FOUND_METHOD_NAME)
27
+ assert_that(subject.CONTROLLER_NOT_FOUND_METHOD_NAME)
28
28
  .equals(:much_rails_not_found)
29
- assert_that(subject::ACTION_CLASS_PARAM_NAME)
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
@@ -64,7 +64,7 @@ class MuchRails::Action::Router
64
64
 
65
65
  should "know its attributes" do
66
66
  assert_that(subject.controller_name)
67
- .equals(unit_class::DEFAULT_CONTROLLER_NAME)
67
+ .equals(unit_class.DEFAULT_CONTROLLER_NAME)
68
68
 
69
69
  router = unit_class.new(controller_name: controller_name1)
70
70
  assert_that(router.controller_name).equals(controller_name1)
@@ -99,12 +99,15 @@ class MuchRails::Action::Router
99
99
 
100
100
  expected_draw_url_to =
101
101
  "#{subject.controller_name}"\
102
- "##{unit_class::CONTROLLER_NOT_FOUND_METHOD_NAME}"
102
+ "##{unit_class.CONTROLLER_NOT_FOUND_METHOD_NAME}"
103
103
  expected_draw_route_to =
104
104
  "#{subject.controller_name}"\
105
- "##{unit_class::CONTROLLER_CALL_ACTION_METHOD_NAME}"
105
+ "##{unit_class.CONTROLLER_CALL_ACTION_METHOD_NAME}"
106
106
  expected_default_defaults =
107
- { unit_class::ACTION_CLASS_PARAM_NAME => default_class_name }
107
+ {
108
+ unit_class.ACTION_CLASS_PARAM_NAME => default_class_name,
109
+ "format" => :html,
110
+ }
108
111
 
109
112
  assert_that(application_routes.get_calls.size).equals(3)
110
113
  assert_that(application_routes.get_calls[0].pargs).equals([url_path])
@@ -113,14 +116,17 @@ class MuchRails::Action::Router
113
116
  to: expected_draw_route_to,
114
117
  as: url_name,
115
118
  defaults:
116
- { unit_class::ACTION_CLASS_PARAM_NAME => request_type_class_name },
119
+ {
120
+ unit_class.ACTION_CLASS_PARAM_NAME => request_type_class_name,
121
+ "format" => :html,
122
+ },
117
123
  constraints: request_type_proc,
118
124
  )
119
125
  assert_that(application_routes.get_calls[1].pargs).equals([url_path])
120
126
  assert_that(application_routes.get_calls[1].kargs)
121
127
  .equals(
122
128
  to: expected_draw_route_to,
123
- as: url_name,
129
+ as: nil,
124
130
  defaults: expected_default_defaults,
125
131
  )
126
132
  assert_that(application_routes.get_calls[2].pargs).equals([url2_path])
@@ -135,7 +141,7 @@ class MuchRails::Action::Router
135
141
  assert_that(application_routes.post_calls.last.kargs)
136
142
  .equals(
137
143
  to: expected_draw_route_to,
138
- as: url_name,
144
+ as: nil,
139
145
  defaults: expected_default_defaults,
140
146
  )
141
147
 
@@ -153,7 +159,7 @@ class MuchRails::Action::Router
153
159
  assert_that(application_routes.patch_calls.last.kargs)
154
160
  .equals(
155
161
  to: expected_draw_route_to,
156
- as: url_name,
162
+ as: nil,
157
163
  defaults: expected_default_defaults,
158
164
  )
159
165
 
@@ -162,7 +168,7 @@ class MuchRails::Action::Router
162
168
  assert_that(application_routes.delete_calls.last.kargs)
163
169
  .equals(
164
170
  to: expected_draw_route_to,
165
- as: url_name,
171
+ as: nil,
166
172
  defaults: expected_default_defaults,
167
173
  )
168
174
  end
@@ -206,12 +212,12 @@ class MuchRails::Action::Router
206
212
  should have_imeths :path_for, :url_for
207
213
 
208
214
  should "know its attributes" do
209
- path_string = subject.path_for(test: "args")
215
+ path_string = subject.path_for(test: "args", format: "html")
210
216
  assert_that(path_string).equals("TEST PATH OR URL STRING")
211
217
  assert_that(@rails_routes_method_missing_call.args)
212
218
  .equals(["#{url_name1}_path".to_sym, { test: "args" }])
213
219
 
214
- url_string = subject.url_for(test: "args")
220
+ url_string = subject.url_for(test: "args", format: "xml")
215
221
  assert_that(url_string).equals("TEST PATH OR URL STRING")
216
222
  assert_that(@rails_routes_method_missing_call.args)
217
223
  .equals(["#{url_name1}_url".to_sym, { test: "args" }])
@@ -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::ACTION_CLASS_PARAM_NAME => "Actions::Show",
23
+ MuchRails::Action::Router.ACTION_CLASS_PARAM_NAME => "Actions::Show",
24
24
  }
25
25
  end
26
26
  let(:errors1) do
@@ -167,7 +167,7 @@ module MuchRails::Action
167
167
  assert_that(subject.default_action_template_name)
168
168
  .equals(
169
169
  "some/namespace/for/"\
170
- "#{MuchRails.config.action.namespace.tableize.singularize}"\
170
+ "#{MuchRails.config.action.namespace.underscore}"\
171
171
  "thing/show",
172
172
  )
173
173
  end
@@ -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_user: current_user1,
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[:custom_validation] << "ERROR1"
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(:current_user1){ "CURRENT USER 1" }
238
- let(:request1){ "REQUEST 1" }
237
+ let(:request1){ FakeRequest.new }
239
238
 
240
- should have_readers :params, :current_user, :request, :errors
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_user).equals(current_user1)
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
@@ -318,6 +343,7 @@ module MuchRails::Action
318
343
  layout: false,
319
344
  )
320
345
 
346
+ view_model = Object.new
321
347
  receiver_class.on_call do
322
348
  render(view_model, "some/view/template", layout: false)
323
349
  end
@@ -330,18 +356,29 @@ module MuchRails::Action
330
356
  layout: false,
331
357
  )
332
358
 
359
+ view_model =
360
+ Class
361
+ .new{
362
+ def much_rails_action
363
+ "NOT A MUCH RAILS ACTION"
364
+ end
365
+ }
366
+ .new
333
367
  receiver_class.on_call do
334
368
  render(view_model, "some/view/template", template: "other/template")
335
369
  end
336
370
  action = receiver_class.new(params: params1)
337
371
  result = action.call
338
372
  assert_that(result.render_view_model).is(view_model)
373
+ assert_that(result.render_view_model.much_rails_action).is_not(action)
339
374
  assert_that(result.render_kargs).equals(template: "other/template")
340
375
 
376
+ view_model = Struct.new(:much_rails_action).new(nil)
341
377
  receiver_class.on_call{ render(view_model, template: "other/template") }
342
378
  action = receiver_class.new(params: params1)
343
379
  result = action.call
344
380
  assert_that(result.render_view_model).is(view_model)
381
+ assert_that(result.render_view_model.much_rails_action).is(action)
345
382
  assert_that(result.render_kargs).equals(template: "other/template")
346
383
  end
347
384
 
@@ -397,4 +434,31 @@ module MuchRails::Action
397
434
  assert_that(result.errors[:custom_validation]).includes("ERROR1")
398
435
  end
399
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
400
464
  end
@@ -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(validation_errors: {
68
- name: ["NAME ERROR"],
69
- other: ["OTHER ERROR"],
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: ["NAME ERROR"],
78
- other: ["OTHER ERROR"],
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(:other))
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_user: 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 do
88
- receiver_class.new(
89
- params: {},
90
- current_user: 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 do
122
- receiver_class.new(
123
- params: {},
124
- current_user: 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 do
153
- receiver_class.new(
154
- params: {},
155
- current_user: 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 do
182
- receiver_class.new(
183
- params: {},
184
- current_user: 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 do
209
- receiver_class.new(
210
- params: {},
211
- current_user: 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 do
236
- receiver_class.new(
237
- params: {},
238
- current_user: 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
@@ -50,13 +50,7 @@ module MuchRails::DestroyAction
50
50
 
51
51
  class InitTests < ReceiverTests
52
52
  desc "when init"
53
- subject do
54
- receiver_class.new(
55
- params: {},
56
- current_user: 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 do
54
- receiver_class.new(
55
- params: {},
56
- current_user: 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.2.6
4
+ version: 0.4.1
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-03-26 00:00:00.000000000 Z
12
+ date: 2021-05-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: much-style-guide
@@ -105,14 +105,14 @@ dependencies:
105
105
  requirements:
106
106
  - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: 0.15.2
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.2
115
+ version: 0.15.3
116
116
  - !ruby/object:Gem::Dependency
117
117
  name: dassets-erubi
118
118
  requirement: !ruby/object:Gem::Requirement
@@ -277,6 +277,7 @@ files:
277
277
  - lib/much-rails/destroy_service.rb
278
278
  - lib/much-rails/has_slug.rb
279
279
  - lib/much-rails/input_value.rb
280
+ - lib/much-rails/invalid_error.rb
280
281
  - lib/much-rails/json.rb
281
282
  - lib/much-rails/layout.rb
282
283
  - lib/much-rails/layout/helper.rb
@@ -333,6 +334,7 @@ files:
333
334
  - test/unit/destroy_service_tests.rb
334
335
  - test/unit/has_slug_tests.rb
335
336
  - test/unit/input_value_tests.rb
337
+ - test/unit/invalid_error_tests.rb
336
338
  - test/unit/json_tests.rb
337
339
  - test/unit/layout_tests.rb
338
340
  - test/unit/mixin_tests.rb
@@ -408,6 +410,7 @@ test_files:
408
410
  - test/unit/destroy_service_tests.rb
409
411
  - test/unit/has_slug_tests.rb
410
412
  - test/unit/input_value_tests.rb
413
+ - test/unit/invalid_error_tests.rb
411
414
  - test/unit/json_tests.rb
412
415
  - test/unit/layout_tests.rb
413
416
  - test/unit/mixin_tests.rb