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 +4 -4
- data/lib/much-rails.rb +1 -0
- data/lib/much-rails/abstract_class.rb +38 -0
- data/lib/much-rails/action.rb +8 -7
- data/lib/much-rails/action/base_router.rb +29 -11
- data/lib/much-rails/action/controller.rb +1 -1
- data/lib/much-rails/action/router.rb +16 -6
- data/lib/much-rails/input_value.rb +1 -1
- data/lib/much-rails/version.rb +1 -1
- data/much-rails.gemspec +1 -1
- data/test/support/actions/show.rb +2 -0
- data/test/unit/abstract_class_tests.rb +45 -0
- data/test/unit/action/base_router_tests.rb +34 -10
- data/test/unit/action/controller_tests.rb +5 -2
- data/test/unit/action/router_tests.rb +16 -10
- data/test/unit/action_tests.rb +17 -5
- data/test/unit/change_action_tests.rb +7 -7
- data/test/unit/destroy_action_tests.rb +1 -1
- data/test/unit/input_value_tests.rb +10 -1
- data/test/unit/save_action_tests.rb +1 -1
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a66a39e5898e5491c562aed8a32fb4036382a3d62485e71d45d8c946d18f622
|
4
|
+
data.tar.gz: ff4307e38c7d7d8115823189bd5d39d7799b3f4bcedc0fd5f3e39320215dfffe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40877d371bdefb9fb77e370c5847a61becc905658ccaf2504066ed2092a4e0f3343e9fcf37e6e334e90155c14a6f13cea4bf1e0faaf7f893554e9b333f235ff7
|
7
|
+
data.tar.gz: 804743827c52ec702454bc5fed1999883ffaa8d7a0434c8266323f23d1fb231ed73bf2bec93b710d84797297c4cd58566209e0ba1fba09f7eb3a8cb9997a9417
|
data/lib/much-rails.rb
CHANGED
@@ -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
|
data/lib/much-rails/action.rb
CHANGED
@@ -31,7 +31,7 @@ module MuchRails::Action
|
|
31
31
|
|
32
32
|
add_config :much_rails_action
|
33
33
|
|
34
|
-
attr_reader :params, :
|
34
|
+
attr_reader :params, :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,
|
115
|
+
def initialize(params: nil, current_session: nil, request: nil)
|
119
116
|
@params = params.to_h.with_indifferent_access
|
120
|
-
@
|
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,
|
74
|
-
@url_set.path_for(name,
|
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,
|
91
|
-
@url_set.url_for(name,
|
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::
|
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,
|
354
|
-
fetch(name).path_for(
|
361
|
+
def path_for(name, **kargs)
|
362
|
+
fetch(name).path_for(**kargs)
|
355
363
|
end
|
356
364
|
|
357
|
-
def url_for(name,
|
358
|
-
fetch(name).url_for(
|
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(
|
407
|
+
def path_for(**kargs)
|
400
408
|
raise NotImplementedError
|
401
409
|
end
|
402
410
|
|
403
|
-
def url_for(
|
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
|
-
|
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(
|
94
|
-
MuchRails::RailsRoutes.instance.public_send(
|
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(
|
98
|
-
MuchRails::RailsRoutes.instance.public_send(
|
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
|
data/lib/much-rails/version.rb
CHANGED
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.
|
40
|
+
gem.add_dependency("much-slug", ["~> 0.1.2"])
|
41
41
|
gem.add_dependency("oj", ["~> 3.10"])
|
42
42
|
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,
|
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,
|
85
|
+
assert_that(@url_set_path_for_call.args).equals([:url1, { test: "args" }])
|
86
86
|
|
87
|
-
url_string = subject.url_for(:url1,
|
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,
|
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,
|
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([
|
395
|
+
assert_that(@url_path_for_call.args).equals([{ test: "args" }])
|
386
396
|
|
387
|
-
url_string = subject.url_for(:url1,
|
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([
|
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(
|
454
|
-
assert_that{ subject.url_for(
|
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
|
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
|
-
{
|
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
|
-
{
|
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:
|
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:
|
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:
|
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:
|
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(
|
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,
|
218
|
+
.equals(["#{url_name1}_path".to_sym, { test: "args" }])
|
213
219
|
|
214
|
-
url_string = subject.url_for(
|
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,
|
223
|
+
.equals(["#{url_name1}_url".to_sym, { test: "args" }])
|
218
224
|
end
|
219
225
|
end
|
220
226
|
|
data/test/unit/action_tests.rb
CHANGED
@@ -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.
|
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
|
-
|
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(:
|
237
|
+
let(:current_session1){ "CURRENT SESSION 1" }
|
238
238
|
let(:request1){ "REQUEST 1" }
|
239
239
|
|
240
|
-
should have_readers :params, :
|
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.
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
238
|
+
current_session: nil,
|
239
239
|
request: nil,
|
240
240
|
)
|
241
241
|
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
|
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
|
+
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-
|
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.
|
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.
|
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
|