much-rails 0.2.2 → 0.2.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65f11e22f8ed34e4bd1e940584390a1487e1c69d2c35d6641fb6352fc6179d4f
4
- data.tar.gz: 1824ade309dee8f599074986d52b120d3fcecc79ba302f725500177d353274bd
3
+ metadata.gz: 8a66a39e5898e5491c562aed8a32fb4036382a3d62485e71d45d8c946d18f622
4
+ data.tar.gz: ff4307e38c7d7d8115823189bd5d39d7799b3f4bcedc0fd5f3e39320215dfffe
5
5
  SHA512:
6
- metadata.gz: c0c4c70fbaeec9574a8b66465fbf11668242a521d9693a52f8f7f737558e28ed04a77047c6d634ebed576266fc5f5b4c065dd729a02108cadb07bce05f87bb86
7
- data.tar.gz: 630142f5702e5ad4694a758ded2c8eff9487a19acc0c8611075fd606f0ada5e0d8e486ef7ff0003e28b128d8ce0e8ce80bbe26d4e0cf89dd630b6b780a6114cc
6
+ metadata.gz: 40877d371bdefb9fb77e370c5847a61becc905658ccaf2504066ed2092a4e0f3343e9fcf37e6e334e90155c14a6f13cea4bf1e0faaf7f893554e9b333f235ff7
7
+ data.tar.gz: 804743827c52ec702454bc5fed1999883ffaa8d7a0434c8266323f23d1fb231ed73bf2bec93b710d84797297c4cd58566209e0ba1fba09f7eb3a8cb9997a9417
data/lib/much-rails.rb CHANGED
@@ -4,6 +4,7 @@ require "active_support"
4
4
  require "active_support/core_ext"
5
5
 
6
6
  require "much-rails/version"
7
+ require "much-rails/abstract_class"
7
8
  require "much-rails/action"
8
9
  require "much-rails/boolean"
9
10
  require "much-rails/call_method"
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "much-rails/mixin"
4
+
5
+ # MuchRails::AbstractClass overrides the `new` class method to prevent a class
6
+ # from being instantiated directly.
7
+ module MuchRails::AbstractClass
8
+ include MuchRails::Mixin
9
+
10
+ after_mixin_included do
11
+ self.abstract_class = self
12
+
13
+ define_singleton_method(:new) do |*args, &block|
14
+ if abstract_class?
15
+ raise(
16
+ NotImplementedError,
17
+ "#{self} is an abstract class and cannot be instantiated.",
18
+ )
19
+ end
20
+
21
+ super(*args, &block)
22
+ end
23
+ end
24
+
25
+ mixin_class_methods do
26
+ def abstract_class
27
+ @abstract_class
28
+ end
29
+
30
+ def abstract_class=(value)
31
+ @abstract_class = value
32
+ end
33
+
34
+ def abstract_class?
35
+ !!(abstract_class == self)
36
+ end
37
+ end
38
+ end
@@ -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, :current_session, :request, :errors
35
35
  end
36
36
 
37
37
  mixin_class_methods do
@@ -107,17 +107,14 @@ 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, current_session: nil, request: nil)
119
116
  @params = params.to_h.with_indifferent_access
120
- @current_user = current_user
117
+ @current_session = current_session
121
118
  @request = request
122
119
  @errors = Hash.new{ |hash, key| hash[key] = [] }
123
120
  end
@@ -257,6 +254,10 @@ module MuchRails::Action
257
254
  template: template || default_action_template_name,
258
255
  }.merge(**kargs)
259
256
 
257
+ if view_model&.respond_to?(:much_rails_action=)
258
+ view_model.much_rails_action = self
259
+ end
260
+
260
261
  @much_rails_action_result =
261
262
  MuchRails::Action::RenderResult.new(view_model, *args, **result_kargs)
262
263
  halt
@@ -70,8 +70,8 @@ class MuchRails::Action::BaseRouter
70
70
  # url :users, "/users", "Users::Index"
71
71
  # }
72
72
  # AdminRouter.path_for(:users) # => "/admin/users"
73
- def path_for(name, *args)
74
- @url_set.path_for(name, *args)
73
+ def path_for(name, **kargs)
74
+ @url_set.path_for(name, **kargs)
75
75
  end
76
76
 
77
77
  # Example:
@@ -87,8 +87,8 @@ class MuchRails::Action::BaseRouter
87
87
  # url :users, "/users", "Users::Index"
88
88
  # }
89
89
  # AdminRouter.url_for(:users) # => "http://example.org/admin/users"
90
- def url_for(name, *args)
91
- @url_set.url_for(name, *args)
90
+ def url_for(name, **kargs)
91
+ @url_set.url_for(name, **kargs)
92
92
  end
93
93
 
94
94
  # Example:
@@ -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
@@ -350,12 +358,12 @@ class MuchRails::Action::BaseRouter
350
358
  end
351
359
  end
352
360
 
353
- def path_for(name, *args)
354
- fetch(name).path_for(*args)
361
+ def path_for(name, **kargs)
362
+ fetch(name).path_for(**kargs)
355
363
  end
356
364
 
357
- def url_for(name, *args)
358
- fetch(name).url_for(*args)
365
+ def url_for(name, **kargs)
366
+ fetch(name).url_for(**kargs)
359
367
  end
360
368
  end
361
369
 
@@ -396,11 +404,11 @@ class MuchRails::Action::BaseRouter
396
404
  self.class.url_path(@router, @url_path)
397
405
  end
398
406
 
399
- def path_for(*args)
407
+ def path_for(**kargs)
400
408
  raise NotImplementedError
401
409
  end
402
410
 
403
- def url_for(*args)
411
+ def url_for(**kargs)
404
412
  raise NotImplementedError
405
413
  end
406
414
 
@@ -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
 
@@ -32,7 +32,7 @@ module MuchRails::Action::Controller
32
32
  result =
33
33
  much_rails_action_class.call(
34
34
  params: much_rails_action_params,
35
- current_user: current_user,
35
+ current_session: current_session,
36
36
  request: request,
37
37
  )
38
38
  instance_exec(result, &result.execute_block)
@@ -52,16 +52,19 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
52
52
  draw_url_to = "#{controller_name}##{CONTROLLER_NOT_FOUND_METHOD_NAME}"
53
53
  draw_route_to = "#{controller_name}##{CONTROLLER_CALL_ACTION_METHOD_NAME}"
54
54
 
55
+ definition_names = Set.new
56
+
55
57
  definitions.each do |definition|
56
58
  definition.request_type_actions.each do |request_type_action|
57
59
  application_routes_draw_scope.public_send(
58
60
  definition.http_method,
59
61
  definition.path,
60
62
  to: draw_route_to,
61
- as: definition.name,
63
+ as: (definition.name if definition_names.add?(definition.name)),
62
64
  defaults:
63
65
  definition.default_params.merge({
64
66
  ACTION_CLASS_PARAM_NAME => request_type_action.class_name,
67
+ "format" => request_type_action.format,
65
68
  }),
66
69
  constraints: request_type_action.constraints_lambda,
67
70
  )
@@ -73,10 +76,11 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
73
76
  definition.http_method,
74
77
  definition.path,
75
78
  to: draw_route_to,
76
- as: definition.name,
79
+ as: (definition.name if definition_names.add?(definition.name)),
77
80
  defaults:
78
81
  definition.default_params.merge({
79
82
  ACTION_CLASS_PARAM_NAME => definition.default_action_class_name,
83
+ "format" => definition.default_action_format,
80
84
  }),
81
85
  )
82
86
  end
@@ -90,12 +94,18 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
90
94
  alias_method :draw, :apply_to
91
95
 
92
96
  class URL < MuchRails::Action::BaseRouter::BaseURL
93
- def path_for(*args)
94
- MuchRails::RailsRoutes.instance.public_send("#{name}_path", *args)
97
+ def path_for(**kargs)
98
+ MuchRails::RailsRoutes.instance.public_send(
99
+ "#{name}_path",
100
+ **kargs.symbolize_keys,
101
+ )
95
102
  end
96
103
 
97
- def url_for(*args)
98
- MuchRails::RailsRoutes.instance.public_send("#{name}_url", *args)
104
+ def url_for(**kargs)
105
+ MuchRails::RailsRoutes.instance.public_send(
106
+ "#{name}_url",
107
+ **kargs.symbolize_keys,
108
+ )
99
109
  end
100
110
  end
101
111
  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.2"
4
+ VERSION = "0.2.7"
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
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "assert"
4
+ require "much-rails/abstract_class"
5
+
6
+ module MuchRails::AbstractClassTest
7
+ class UnitTests < Assert::Context
8
+ desc "MuchRails::AbstractClass"
9
+ subject{ unit_class }
10
+
11
+ let(:unit_class){ MuchRails::AbstractClass }
12
+
13
+ should "include MuchRails::Mixin" do
14
+ assert_that(subject).includes(MuchRails::Mixin)
15
+ end
16
+ end
17
+
18
+ class ReceiverTests < UnitTests
19
+ desc "receiver"
20
+ subject{ receiver_class }
21
+
22
+ let(:receiver_class) do
23
+ Class.new.tap{ |c| c.include unit_class }
24
+ end
25
+ let(:receiver_subclass) do
26
+ Class.new(receiver_class)
27
+ end
28
+
29
+ should have_accessor :abstract_class
30
+ should have_imeths :new, :abstract_class?
31
+
32
+ should "know if it is an abstract class or not" do
33
+ assert_that(subject.abstract_class?).equals(true)
34
+ assert_that(receiver_subclass.abstract_class?).equals(false)
35
+ end
36
+
37
+ should "prevent calling .new on the receiver" do
38
+ assert_that{ subject.new }.raises(NotImplementedError)
39
+ end
40
+
41
+ should "allow calling .new on subclasses of the receiver" do
42
+ assert_that(receiver_subclass.new).is_a?(subject)
43
+ end
44
+ end
45
+ end
@@ -80,13 +80,13 @@ class MuchRails::Action::BaseRouter
80
80
  end
81
81
 
82
82
  should "build path/URL strings for named URLs" do
83
- path_string = subject.path_for(:url1, "TEST PATH ARGS")
83
+ path_string = subject.path_for(:url1, test: "args")
84
84
  assert_that(path_string).equals("TEST PATH STRING")
85
- assert_that(@url_set_path_for_call.args).equals([:url1, "TEST PATH ARGS"])
85
+ assert_that(@url_set_path_for_call.args).equals([:url1, { test: "args" }])
86
86
 
87
- url_string = subject.url_for(:url1, "TEST URL ARGS")
87
+ url_string = subject.url_for(:url1, test: "args")
88
88
  assert_that(url_string).equals("TEST URL STRING")
89
- assert_that(@url_set_url_for_call.args).equals([:url1, "TEST URL ARGS"])
89
+ assert_that(@url_set_url_for_call.args).equals([:url1, { test: "args" }])
90
90
  end
91
91
 
92
92
  should "define request types" do
@@ -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
 
@@ -380,13 +390,13 @@ class MuchRails::Action::BaseRouter
380
390
 
381
391
  subject.add(:url1, Factory.url)
382
392
 
383
- path_string = subject.path_for(:url1, "TEST PATH ARGS")
393
+ path_string = subject.path_for(:url1, test: "args")
384
394
  assert_that(path_string).equals("TEST PATH STRING")
385
- assert_that(@url_path_for_call.args).equals(["TEST PATH ARGS"])
395
+ assert_that(@url_path_for_call.args).equals([{ test: "args" }])
386
396
 
387
- url_string = subject.url_for(:url1, "TEST URL ARGS")
397
+ url_string = subject.url_for(:url1, test: "args")
388
398
  assert_that(url_string).equals("TEST URL STRING")
389
- assert_that(@url_url_for_call.args).equals(["TEST URL ARGS"])
399
+ assert_that(@url_url_for_call.args).equals([{ test: "args" }])
390
400
  end
391
401
  end
392
402
 
@@ -450,8 +460,8 @@ class MuchRails::Action::BaseRouter
450
460
  assert_that(subject.path)
451
461
  .equals(base_url_class.url_path(router1, url_path1))
452
462
 
453
- assert_that{ subject.path_for("TEST ARGS") }.raises(NotImplementedError)
454
- assert_that{ subject.url_for("TEST ARGS") }.raises(NotImplementedError)
463
+ assert_that{ subject.path_for(test: "args") }.raises(NotImplementedError)
464
+ assert_that{ subject.url_for(test: "args") }.raises(NotImplementedError)
455
465
  end
456
466
  end
457
467
 
@@ -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
@@ -35,6 +35,10 @@ module MuchRails::Action::Controller
35
35
  desc "when init"
36
36
  subject{ receiver_class.new(params1) }
37
37
 
38
+ setup do
39
+ Assert.stub(::Actions::Show, :format){ nil }
40
+ end
41
+
38
42
  let(:params1) do
39
43
  {
40
44
  MuchRails::Action::Router::ACTION_CLASS_PARAM_NAME => "Actions::Show",
@@ -75,10 +79,9 @@ module MuchRails::Action::Controller
75
79
 
76
80
  assert_that(subject.much_rails_action_class).equals(Actions::Show)
77
81
 
78
- Actions::Show.format(:html)
82
+ Assert.stub(::Actions::Show, :format){ :html }
79
83
  receiver = receiver_class.new(params1)
80
84
  assert_that(receiver.much_rails_action_class_format).equals(:html)
81
- Actions::Show.format(nil)
82
85
  end
83
86
  end
84
87
 
@@ -104,7 +104,10 @@ class MuchRails::Action::Router
104
104
  "#{subject.controller_name}"\
105
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,15 +212,15 @@ 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 PATH ARGS")
215
+ path_string = subject.path_for(test: "args")
210
216
  assert_that(path_string).equals("TEST PATH OR URL STRING")
211
217
  assert_that(@rails_routes_method_missing_call.args)
212
- .equals(["#{url_name1}_path".to_sym, "TEST PATH ARGS"])
218
+ .equals(["#{url_name1}_path".to_sym, { test: "args" }])
213
219
 
214
- url_string = subject.url_for("TEST URL ARGS")
220
+ url_string = subject.url_for(test: "args")
215
221
  assert_that(url_string).equals("TEST PATH OR URL STRING")
216
222
  assert_that(@rails_routes_method_missing_call.args)
217
- .equals(["#{url_name1}_url".to_sym, "TEST URL ARGS"])
223
+ .equals(["#{url_name1}_url".to_sym, { test: "args" }])
218
224
  end
219
225
  end
220
226
 
@@ -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
@@ -178,7 +178,7 @@ module MuchRails::Action
178
178
  subject do
179
179
  receiver_class.new(
180
180
  params: params1,
181
- current_user: current_user1,
181
+ current_session: current_session1,
182
182
  request: request1,
183
183
  )
184
184
  end
@@ -234,15 +234,15 @@ module MuchRails::Action
234
234
  active: "true",
235
235
  }
236
236
  end
237
- let(:current_user1){ "CURRENT USER 1" }
237
+ let(:current_session1){ "CURRENT SESSION 1" }
238
238
  let(:request1){ "REQUEST 1" }
239
239
 
240
- should have_readers :params, :current_user, :request, :errors
240
+ should have_readers :params, :current_session, :request, :errors
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)
245
+ assert_that(subject.current_session).equals(current_session1)
246
246
  assert_that(subject.request).equals(request1)
247
247
  end
248
248
 
@@ -318,6 +318,7 @@ module MuchRails::Action
318
318
  layout: false,
319
319
  )
320
320
 
321
+ view_model = Object.new
321
322
  receiver_class.on_call do
322
323
  render(view_model, "some/view/template", layout: false)
323
324
  end
@@ -330,18 +331,29 @@ module MuchRails::Action
330
331
  layout: false,
331
332
  )
332
333
 
334
+ view_model =
335
+ Class
336
+ .new{
337
+ def much_rails_action
338
+ "NOT A MUCH RAILS ACTION"
339
+ end
340
+ }
341
+ .new
333
342
  receiver_class.on_call do
334
343
  render(view_model, "some/view/template", template: "other/template")
335
344
  end
336
345
  action = receiver_class.new(params: params1)
337
346
  result = action.call
338
347
  assert_that(result.render_view_model).is(view_model)
348
+ assert_that(result.render_view_model.much_rails_action).is_not(action)
339
349
  assert_that(result.render_kargs).equals(template: "other/template")
340
350
 
351
+ view_model = Struct.new(:much_rails_action).new(nil)
341
352
  receiver_class.on_call{ render(view_model, template: "other/template") }
342
353
  action = receiver_class.new(params: params1)
343
354
  result = action.call
344
355
  assert_that(result.render_view_model).is(view_model)
356
+ assert_that(result.render_view_model.much_rails_action).is(action)
345
357
  assert_that(result.render_kargs).equals(template: "other/template")
346
358
  end
347
359
 
@@ -61,7 +61,7 @@ module MuchRails::ChangeAction
61
61
  subject do
62
62
  receiver_class.new(
63
63
  params: {},
64
- current_user: nil,
64
+ current_session: nil,
65
65
  request: nil,
66
66
  )
67
67
  end
@@ -87,7 +87,7 @@ module MuchRails::ChangeAction
87
87
  subject do
88
88
  receiver_class.new(
89
89
  params: {},
90
- current_user: nil,
90
+ current_session: nil,
91
91
  request: nil,
92
92
  )
93
93
  end
@@ -121,7 +121,7 @@ module MuchRails::ChangeAction
121
121
  subject do
122
122
  receiver_class.new(
123
123
  params: {},
124
- current_user: nil,
124
+ current_session: nil,
125
125
  request: nil,
126
126
  )
127
127
  end
@@ -152,7 +152,7 @@ module MuchRails::ChangeAction
152
152
  subject do
153
153
  receiver_class.new(
154
154
  params: {},
155
- current_user: nil,
155
+ current_session: nil,
156
156
  request: nil,
157
157
  )
158
158
  end
@@ -181,7 +181,7 @@ module MuchRails::ChangeAction
181
181
  subject do
182
182
  receiver_class.new(
183
183
  params: {},
184
- current_user: nil,
184
+ current_session: nil,
185
185
  request: nil,
186
186
  )
187
187
  end
@@ -208,7 +208,7 @@ module MuchRails::ChangeAction
208
208
  subject do
209
209
  receiver_class.new(
210
210
  params: {},
211
- current_user: nil,
211
+ current_session: nil,
212
212
  request: nil,
213
213
  )
214
214
  end
@@ -235,7 +235,7 @@ module MuchRails::ChangeAction
235
235
  subject do
236
236
  receiver_class.new(
237
237
  params: {},
238
- current_user: nil,
238
+ current_session: nil,
239
239
  request: nil,
240
240
  )
241
241
  end
@@ -53,7 +53,7 @@ module MuchRails::DestroyAction
53
53
  subject do
54
54
  receiver_class.new(
55
55
  params: {},
56
- current_user: nil,
56
+ current_session: nil,
57
57
  request: nil,
58
58
  )
59
59
  end
@@ -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
@@ -53,7 +53,7 @@ module MuchRails::SaveAction
53
53
  subject do
54
54
  receiver_class.new(
55
55
  params: {},
56
- current_user: nil,
56
+ current_session: nil,
57
57
  request: nil,
58
58
  )
59
59
  end
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.2
4
+ version: 0.2.7
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-01 00:00:00.000000000 Z
12
+ date: 2021-04-12 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
@@ -251,6 +251,7 @@ files:
251
251
  - LICENSE
252
252
  - README.md
253
253
  - lib/much-rails.rb
254
+ - lib/much-rails/abstract_class.rb
254
255
  - lib/much-rails/action.rb
255
256
  - lib/much-rails/action/base_command_result.rb
256
257
  - lib/much-rails/action/base_result.rb
@@ -306,6 +307,7 @@ files:
306
307
  - test/support/factory.rb
307
308
  - test/support/fake_action_controller.rb
308
309
  - test/system/.keep
310
+ - test/unit/abstract_class_tests.rb
309
311
  - test/unit/action/base_command_result_tests.rb
310
312
  - test/unit/action/base_result_tests.rb
311
313
  - test/unit/action/base_router_tests.rb
@@ -380,6 +382,7 @@ test_files:
380
382
  - test/support/factory.rb
381
383
  - test/support/fake_action_controller.rb
382
384
  - test/system/.keep
385
+ - test/unit/abstract_class_tests.rb
383
386
  - test/unit/action/base_command_result_tests.rb
384
387
  - test/unit/action/base_result_tests.rb
385
388
  - test/unit/action/base_router_tests.rb