much-rails 0.2.4 → 0.3.0

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: 8b0abf64ca287edfd1a6546db5766e878424a9165a661ef991ca7fda1dba6f78
4
- data.tar.gz: 3aa006e90bb01924786952077cb5a72c595bb1c0fa28e4f32f3701063fc2ac06
3
+ metadata.gz: ba7d46f07c2592e152fe836a0cff5a7bf8061e9f531aac1c6a748f1365cc383b
4
+ data.tar.gz: 19e41c6e470a0021b6b78ea9c7eff7e6e530758d0522a591b4f8623b610f9fa2
5
5
  SHA512:
6
- metadata.gz: 92884c3070b8cbaf78ff384b7ea4bc12476ee175a56e73b4ea58431f84c3539c1d27d97e180b9ddcfbc16ba908127a6783c72f3716890ac5e879773dde7ff4e1
7
- data.tar.gz: '0755183185e5f64a4c0e289e31d6bf0545438c96631847f306f83c0aa588308d215583ab2249e856c35592162438dc8cc4315ac959bb478a14baa9aa5c08584f'
6
+ metadata.gz: 37bdf6aa9a624f270cd53e5ba22f3e400f331b9b91c29aed2c6169627350f9c49e2f929ff6b9bc83665c789953559f67f546c11fd4cc9660814b46f61bfb2bb9
7
+ data.tar.gz: eb78925cf707aef2f6484665963da6dee38f495cad04de680f7ea349292eae41b77bdd36f014b05a2e5fcda48e8c8d03b23485f60786020100794f4d1cb3c15f
@@ -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,17 +107,13 @@ 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
118
  @errors = Hash.new{ |hash, key| hash[key] = [] }
123
119
  end
@@ -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
@@ -7,7 +7,7 @@ module MuchRails::InputValue
7
7
  def self.strip(value)
8
8
  return if value.blank?
9
9
 
10
- value.to_s.strip
10
+ value.to_s.strip.presence
11
11
  end
12
12
 
13
13
  def self.strip_all(values)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuchRails
4
- VERSION = "0.2.4"
4
+ VERSION = "0.3.0"
5
5
  end
data/much-rails.gemspec CHANGED
@@ -37,6 +37,6 @@ Gem::Specification.new do |gem|
37
37
  gem.add_dependency("much-mixin", ["~> 0.2.4"])
38
38
  gem.add_dependency("much-not-given", ["~> 0.1.2"])
39
39
  gem.add_dependency("much-result", ["~> 0.1.3"])
40
- gem.add_dependency("much-slug", ["~> 0.1.1"])
40
+ gem.add_dependency("much-slug", ["~> 0.1.2"])
41
41
  gem.add_dependency("oj", ["~> 3.10"])
42
42
  end
@@ -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
@@ -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
@@ -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
 
@@ -9,12 +9,21 @@ module MuchRails::InputValue
9
9
  subject{ unit_class }
10
10
 
11
11
  let(:unit_class){ MuchRails::InputValue }
12
+ let(:non_blank_but_empty_to_s_object) do
13
+ Class
14
+ .new{
15
+ def to_s
16
+ ["", " "].sample
17
+ end
18
+ }
19
+ .new
20
+ end
12
21
 
13
22
  should have_imeths :strip, :strip_all
14
23
 
15
24
  should "know its attributes" do
16
25
  # strip
17
- input_value = [nil, "", " "].sample
26
+ input_value = [nil, "", " ", non_blank_but_empty_to_s_object].sample
18
27
  assert_that(subject.strip(input_value)).is_nil
19
28
 
20
29
  input_value = [" VALUE ", "\r VALUE\n"].sample
@@ -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
 
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.4
4
+ version: 0.3.0
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-02-09 00:00:00.000000000 Z
12
+ date: 2021-05-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: much-style-guide
@@ -217,14 +217,14 @@ dependencies:
217
217
  requirements:
218
218
  - - "~>"
219
219
  - !ruby/object:Gem::Version
220
- version: 0.1.1
220
+ version: 0.1.2
221
221
  type: :runtime
222
222
  prerelease: false
223
223
  version_requirements: !ruby/object:Gem::Requirement
224
224
  requirements:
225
225
  - - "~>"
226
226
  - !ruby/object:Gem::Version
227
- version: 0.1.1
227
+ version: 0.1.2
228
228
  - !ruby/object:Gem::Dependency
229
229
  name: oj
230
230
  requirement: !ruby/object:Gem::Requirement