much-rails 0.1.0 → 0.1.1

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: 0bf08e9a5f11a8a2597b17d7aa796d5e749fba3197e9d342b45e230d818d7fc8
4
- data.tar.gz: 794522b0a10b417994189c85599f9fbd4106c1ad002b4b04d3bfe8a788bd4951
3
+ metadata.gz: 0172aa43ad656d16da5f3becf0dc3792488c920453799ab14d69281a6db8799c
4
+ data.tar.gz: e7e6d23911c2525703639b38d5f2f8974d048e4c953ddb9b8bd77e37aacbdcdf
5
5
  SHA512:
6
- metadata.gz: b53df073f7f24299b154a06d16dc94ef01fce26e719065201efa523d683f52c5a65a8c2570a3542ae595e43d91a94a6d4df2d486d6fba5141d3120e9ac6e244e
7
- data.tar.gz: 381f52f7be00bba2d90da5904a998d450d6077461e7f6d85fffd49fd749512d073759e9827db4f6db0ae2eaf38c1dc78044a35b69fe4a80ee550472c380fa905
6
+ metadata.gz: 897a07060cecba2fab179514b8aa1d116a51bef41477486dc9ca0e10a63e0cfaaf75680a2b99bcad1aa36e7670d5b5e3f678cb97a4f2bf004da0303cf918c9b5
7
+ data.tar.gz: ad74dbf2040de64bb85d70c89f5729635cb947ab9d6efb38dfa8249a109097c3416a08e5923dde311edf8c07373cde3e0af7502166d5449c393d973f588e09b2
@@ -19,6 +19,7 @@ class MuchRails::Action::BaseRouter
19
19
  @request_type_set = RequestTypeSet.new
20
20
  @url_set = URLSet.new(self)
21
21
  @definitions = []
22
+ @defined_urls = []
22
23
 
23
24
  @base_url = DEFAULT_BASE_URL
24
25
  instance_exec(&(block || proc{}))
@@ -28,6 +29,10 @@ class MuchRails::Action::BaseRouter
28
29
  self.class.url_class
29
30
  end
30
31
 
32
+ def unrouted_urls
33
+ @url_set.urls - @defined_urls
34
+ end
35
+
31
36
  def validate!
32
37
  definitions.each do |definition|
33
38
  definition.request_type_actions.each do |request_type_action|
@@ -240,15 +245,22 @@ class MuchRails::Action::BaseRouter
240
245
  acc
241
246
  end
242
247
 
243
- Definition
244
- .for_route(
248
+ add_definition(
249
+ Definition.for_route(
245
250
  http_method: http_method,
246
251
  url: url,
247
252
  default_action_class_name: default_class_name,
248
253
  request_type_actions: request_type_actions,
249
254
  called_from: called_from,
250
- )
251
- .tap{ |definition| @definitions << definition }
255
+ ),
256
+ )
257
+ end
258
+
259
+ def add_definition(definition)
260
+ @definitions << definition
261
+ @defined_urls << definition.url
262
+
263
+ definition
252
264
  end
253
265
 
254
266
  class RequestTypeSet
@@ -301,6 +313,10 @@ class MuchRails::Action::BaseRouter
301
313
  @set.empty?
302
314
  end
303
315
 
316
+ def urls
317
+ @set.values
318
+ end
319
+
304
320
  def add(name, path)
305
321
  url = @router.url_class.new(@router, path, name.to_sym)
306
322
  key = url.name
@@ -406,35 +422,40 @@ class MuchRails::Action::BaseRouter
406
422
  called_from:)
407
423
  new(
408
424
  http_method: http_method,
409
- path: url.path,
410
- name: url.name,
425
+ url: url,
411
426
  default_action_class_name: default_action_class_name,
412
427
  request_type_actions: request_type_actions,
413
428
  called_from: called_from,
414
429
  )
415
430
  end
416
431
 
417
- attr_reader :http_method, :path, :name, :default_params
432
+ attr_reader :http_method, :url, :default_params
418
433
  attr_reader :default_action_class_name, :request_type_actions
419
434
  attr_reader :called_from
420
435
 
421
436
  def initialize(
422
437
  http_method:,
423
- path:,
424
- name:,
438
+ url:,
425
439
  default_action_class_name:,
426
440
  request_type_actions:,
427
441
  called_from:,
428
442
  default_params: nil)
429
443
  @http_method = http_method
430
- @path = path
431
- @name = name
444
+ @url = url
432
445
  @default_params = default_params || {}
433
446
  @default_action_class_name = default_action_class_name
434
447
  @request_type_actions = request_type_actions || []
435
448
  @called_from = called_from
436
449
  end
437
450
 
451
+ def name
452
+ @url.name
453
+ end
454
+
455
+ def path
456
+ @url.path
457
+ end
458
+
438
459
  def has_default_action_class_name?
439
460
  !@default_action_class_name.nil?
440
461
  end
@@ -443,8 +464,7 @@ class MuchRails::Action::BaseRouter
443
464
  return super unless other.is_a?(self.class)
444
465
 
445
466
  @http_method == other.http_method &&
446
- @path == other.path &&
447
- @name == other.name &&
467
+ @url == other.url &&
448
468
  @default_params == other.default_params &&
449
469
  @default_action_class_name ==
450
470
  other.default_action_class_name &&
@@ -14,12 +14,17 @@ module MuchRails::Action::Controller
14
14
  mixin_included do
15
15
  attr_reader :much_rails_action_class
16
16
 
17
- before_action :require_much_rails_action_class
17
+ before_action(
18
+ :require_much_rails_action_class,
19
+ only: MuchRails::Action::Router::CONTROLLER_CALL_ACTION_METHOD_NAME,
20
+ )
18
21
  before_action :permit_all_much_rails_action_params
19
22
  end
20
23
 
21
24
  mixin_instance_methods do
22
- define_method(MuchRails::Action::Router::CONTROLLER_METHOD_NAME) do
25
+ define_method(
26
+ MuchRails::Action::Router::CONTROLLER_CALL_ACTION_METHOD_NAME,
27
+ ) do
23
28
  respond_to do |format|
24
29
  format.public_send(much_rails_action_class.format) do
25
30
  result =
@@ -33,6 +38,16 @@ module MuchRails::Action::Controller
33
38
  end
34
39
  end
35
40
 
41
+ define_method(
42
+ MuchRails::Action::Router::CONTROLLER_NOT_FOUND_METHOD_NAME,
43
+ ) do
44
+ respond_to do |format|
45
+ format.html do
46
+ head :not_found
47
+ end
48
+ end
49
+ end
50
+
36
51
  def much_rails_action_class_name
37
52
  "::#{params[MuchRails::Action::Router::ACTION_CLASS_PARAM_NAME]}"
38
53
  end
@@ -7,7 +7,8 @@ module MuchRails::Action; end
7
7
 
8
8
  class MuchRails::Action::Router < MuchRails::Action::BaseRouter
9
9
  DEFAULT_CONTROLLER_NAME = "application"
10
- CONTROLLER_METHOD_NAME = :much_rails_call_action
10
+ CONTROLLER_CALL_ACTION_METHOD_NAME = :much_rails_call_action
11
+ CONTROLLER_NOT_FOUND_METHOD_NAME = :much_rails_not_found
11
12
  ACTION_CLASS_PARAM_NAME = :much_rails_action_class_name
12
13
 
13
14
  def self.url_class
@@ -48,7 +49,8 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
48
49
  # end
49
50
  def apply_to(application_routes_draw_scope)
50
51
  validate!
51
- draw_route_to = "#{controller_name}##{CONTROLLER_METHOD_NAME}"
52
+ draw_url_to = "#{controller_name}##{CONTROLLER_NOT_FOUND_METHOD_NAME}"
53
+ draw_route_to = "#{controller_name}##{CONTROLLER_CALL_ACTION_METHOD_NAME}"
52
54
 
53
55
  definitions.each do |definition|
54
56
  definition.request_type_actions.each do |request_type_action|
@@ -78,6 +80,12 @@ class MuchRails::Action::Router < MuchRails::Action::BaseRouter
78
80
  }),
79
81
  )
80
82
  end
83
+
84
+ # Draw each URL that doesn't have a route definition so that we can generate
85
+ # them using MuchRails::RailsRoutes.
86
+ unrouted_urls.each do |url|
87
+ application_routes_draw_scope.get(url.path, to: draw_url_to, as: url.name)
88
+ end
81
89
  end
82
90
  alias_method :draw, :apply_to
83
91
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuchRails
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
@@ -24,7 +24,7 @@ Gem::Specification.new do |gem|
24
24
  gem.required_ruby_version = "~> 2.5"
25
25
 
26
26
  gem.add_development_dependency("much-style-guide", ["~> 0.6.0"])
27
- gem.add_development_dependency("assert", ["~> 2.19.4"])
27
+ gem.add_development_dependency("assert", ["~> 2.19.5"])
28
28
  gem.add_development_dependency("rails", ["> 5.0", "< 7.0"])
29
29
 
30
30
  gem.add_dependency("activerecord", ["> 5.0", "< 7.0"])
@@ -13,7 +13,7 @@ module FakeActionController
13
13
  end
14
14
 
15
15
  mixin_class_methods do
16
- def before_action(method_name)
16
+ def before_action(method_name, **)
17
17
  before_actions << method_name
18
18
  end
19
19
 
@@ -52,7 +52,7 @@ class MuchRails::Action::BaseRouter
52
52
  should have_readers :name
53
53
  should have_readers :request_type_set, :url_set, :definitions
54
54
 
55
- should have_imeths :url_class, :apply_to
55
+ should have_imeths :url_class, :unrouted_urls, :apply_to
56
56
  should have_imeths :path_for, :url_for
57
57
  should have_imeths :request_type
58
58
  should have_imeths :base_url, :url
@@ -62,6 +62,7 @@ class MuchRails::Action::BaseRouter
62
62
  assert_that(subject.name).is_nil
63
63
  assert_that(subject.request_type_set).is_empty
64
64
  assert_that(subject.url_set).is_empty
65
+ assert_that(subject.unrouted_urls).is_empty
65
66
  assert_that(subject.definitions).is_empty
66
67
  assert_that(subject.base_url).equals(unit_class::DEFAULT_BASE_URL)
67
68
  assert_that(subject.url_class).equals(unit_class.url_class)
@@ -106,6 +107,7 @@ class MuchRails::Action::BaseRouter
106
107
  assert_that(subject.url_set).is_not_empty
107
108
  assert_that(url).is_kind_of(subject.url_class)
108
109
  assert_that(@url_set_add_call.args).equals([:url1, path])
110
+ assert_that(subject.unrouted_urls).equals([url])
109
111
 
110
112
  ex =
111
113
  assert_that{ subject.url(:url2.to_s, Factory.url) }
@@ -338,13 +340,14 @@ class MuchRails::Action::BaseRouter
338
340
 
339
341
  let(:router1){ unit_class.new }
340
342
 
341
- should have_imeths :empty?, :add, :fetch, :path_for, :url_for
343
+ should have_imeths :empty?, :urls, :add, :fetch, :path_for, :url_for
342
344
 
343
345
  should "add URLs" do
344
346
  assert_that(subject).is_empty
345
347
 
346
348
  url = subject.add(:url1.to_s, path = Factory.url)
347
349
  assert_that(subject).is_not_empty
350
+ assert_that(subject.urls).equals([url])
348
351
  assert_that(url).is_kind_of(router1.url_class)
349
352
  assert_that(@url_new_call.args).equals([router1, path, :url1])
350
353
 
@@ -472,8 +475,7 @@ class MuchRails::Action::BaseRouter
472
475
  definition1 =
473
476
  definition_class.new(
474
477
  http_method: http_method1,
475
- path: url_path1,
476
- name: url_name1,
478
+ url: url1,
477
479
  default_action_class_name: default_action_class_name1,
478
480
  request_type_actions: request_type_actions1,
479
481
  called_from: caller1,
@@ -496,8 +498,7 @@ class MuchRails::Action::BaseRouter
496
498
  subject do
497
499
  definition_class.new(
498
500
  http_method: http_method1,
499
- path: url_path1,
500
- name: url_name1,
501
+ url: url1,
501
502
  default_action_class_name: default_action_class_name1,
502
503
  request_type_actions: request_type_actions1,
503
504
  default_params: default_params1,
@@ -509,19 +510,21 @@ class MuchRails::Action::BaseRouter
509
510
  { Factory.string => Factory.string }
510
511
  end
511
512
 
512
- should have_readers :http_method, :path, :name, :default_params
513
+ should have_readers :http_method, :url, :default_params
513
514
  should have_readers :default_action_class_name, :request_type_actions
514
- should have_reader :called_from
515
+ should have_readers :called_from
516
+ should have_imeths :path, :name, :has_default_action_class_name?
515
517
 
516
518
  should "know its attributes" do
517
519
  assert_that(subject.http_method).equals(http_method1)
518
- assert_that(subject.path).equals(url_path1)
519
- assert_that(subject.name).equals(url_name1)
520
+ assert_that(subject.url).equals(url1)
520
521
  assert_that(subject.default_params).equals(default_params1)
521
522
  assert_that(subject.default_action_class_name)
522
523
  .equals(default_action_class_name1)
523
524
  assert_that(subject.request_type_actions).equals(request_type_actions1)
524
525
  assert_that(subject.called_from).equals(caller1)
526
+ assert_that(subject.path).equals(url_path1)
527
+ assert_that(subject.name).equals(url_name1)
525
528
  end
526
529
  end
527
530
  end
@@ -44,7 +44,12 @@ module MuchRails::Action::Controller
44
44
 
45
45
  should have_readers :much_rails_action_class
46
46
 
47
- should have_imeths MuchRails::Action::Router::CONTROLLER_METHOD_NAME
47
+ should have_imeths(
48
+ MuchRails::Action::Router::CONTROLLER_CALL_ACTION_METHOD_NAME,
49
+ )
50
+ should have_imeths(
51
+ MuchRails::Action::Router::CONTROLLER_NOT_FOUND_METHOD_NAME,
52
+ )
48
53
  should have_imeths :much_rails_action_class_name
49
54
  should have_imeths :much_rails_action_params
50
55
  should have_imeths :require_much_rails_action_class
@@ -22,8 +22,10 @@ class MuchRails::Action::Router
22
22
 
23
23
  should "know its constants" do
24
24
  assert_that(subject::DEFAULT_CONTROLLER_NAME).equals("application")
25
- assert_that(subject::CONTROLLER_METHOD_NAME)
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)
28
+ .equals(:much_rails_not_found)
27
29
  assert_that(subject::ACTION_CLASS_PARAM_NAME)
28
30
  .equals(:much_rails_action_class_name)
29
31
  assert_that(subject.url_class).equals(unit_class::URL)
@@ -88,17 +90,25 @@ class MuchRails::Action::Router
88
90
  subject.patch(url_name, default_class_name)
89
91
  subject.delete(url_name, default_class_name)
90
92
 
93
+ url2_name = Factory.symbol
94
+ url2_path = Factory.url
95
+ subject.url(url2_name, url2_path)
96
+
91
97
  application_routes = FakeApplicationRoutes.new
92
98
  subject.draw(application_routes)
93
99
 
100
+ expected_draw_url_to =
101
+ "#{subject.controller_name}"\
102
+ "##{unit_class::CONTROLLER_NOT_FOUND_METHOD_NAME}"
94
103
  expected_draw_route_to =
95
- "#{subject.controller_name}##{unit_class::CONTROLLER_METHOD_NAME}"
104
+ "#{subject.controller_name}"\
105
+ "##{unit_class::CONTROLLER_CALL_ACTION_METHOD_NAME}"
96
106
  expected_default_defaults =
97
107
  { unit_class::ACTION_CLASS_PARAM_NAME => default_class_name }
98
108
 
99
- assert_that(application_routes.get_calls.size).equals(2)
100
- assert_that(application_routes.get_calls.first.pargs).equals([url_path])
101
- assert_that(application_routes.get_calls.first.kargs)
109
+ assert_that(application_routes.get_calls.size).equals(3)
110
+ assert_that(application_routes.get_calls[0].pargs).equals([url_path])
111
+ assert_that(application_routes.get_calls[0].kargs)
102
112
  .equals(
103
113
  to: expected_draw_route_to,
104
114
  as: url_name,
@@ -106,13 +116,19 @@ class MuchRails::Action::Router
106
116
  { unit_class::ACTION_CLASS_PARAM_NAME => request_type_class_name },
107
117
  constraints: request_type_proc,
108
118
  )
109
- assert_that(application_routes.get_calls.last.pargs).equals([url_path])
110
- assert_that(application_routes.get_calls.last.kargs)
119
+ assert_that(application_routes.get_calls[1].pargs).equals([url_path])
120
+ assert_that(application_routes.get_calls[1].kargs)
111
121
  .equals(
112
122
  to: expected_draw_route_to,
113
123
  as: url_name,
114
124
  defaults: expected_default_defaults,
115
125
  )
126
+ assert_that(application_routes.get_calls[2].pargs).equals([url2_path])
127
+ assert_that(application_routes.get_calls[2].kargs)
128
+ .equals(
129
+ to: expected_draw_url_to,
130
+ as: url2_name,
131
+ )
116
132
 
117
133
  assert_that(application_routes.post_calls.size).equals(1)
118
134
  assert_that(application_routes.post_calls.last.pargs).equals([url_path])
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.1.0
4
+ version: 0.1.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-01-11 00:00:00.000000000 Z
12
+ date: 2021-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: much-style-guide
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 2.19.4
34
+ version: 2.19.5
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 2.19.4
41
+ version: 2.19.5
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rails
44
44
  requirement: !ruby/object:Gem::Requirement