azeroth 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -1
  3. data/Dockerfile +1 -1
  4. data/README.md +1 -1
  5. data/azeroth.gemspec +2 -2
  6. data/config/yardstick.yml +1 -0
  7. data/lib/azeroth.rb +4 -1
  8. data/lib/azeroth/request_handler.rb +93 -0
  9. data/lib/azeroth/request_handler/create.rb +26 -0
  10. data/lib/azeroth/request_handler/destroy.rb +22 -0
  11. data/lib/azeroth/request_handler/edit.rb +14 -0
  12. data/lib/azeroth/request_handler/index.rb +21 -0
  13. data/lib/azeroth/request_handler/new.rb +25 -0
  14. data/lib/azeroth/request_handler/show.rb +24 -0
  15. data/lib/azeroth/request_handler/update.rb +27 -0
  16. data/lib/azeroth/resourceable.rb +0 -14
  17. data/lib/azeroth/resourceable/builder.rb +0 -8
  18. data/lib/azeroth/routes_builder.rb +14 -38
  19. data/lib/azeroth/version.rb +1 -1
  20. data/spec/controllers/documents_controller_spec.rb +69 -22
  21. data/spec/dummy/db/schema.rb +2 -2
  22. data/spec/lib/azeroth/request_handler/create_spec.rb +27 -0
  23. data/spec/lib/azeroth/request_handler/destroy_spec.rb +20 -0
  24. data/spec/lib/azeroth/request_handler/edit_spec.rb +13 -0
  25. data/spec/lib/azeroth/request_handler/index_spec.rb +12 -0
  26. data/spec/lib/azeroth/request_handler/new_spec.rb +12 -0
  27. data/spec/lib/azeroth/request_handler/show_spec.rb +13 -0
  28. data/spec/lib/azeroth/request_handler/update_spec.rb +32 -0
  29. data/spec/lib/azeroth/request_handler_spec.rb +68 -0
  30. data/spec/lib/azeroth/resourceable/builder_spec.rb +1 -3
  31. data/spec/lib/azeroth/routes_builder_spec.rb +36 -8
  32. data/spec/support/app/controllers/request_handler_controller.rb +15 -0
  33. data/spec/support/shared_examples/request_handler.rb +53 -0
  34. metadata +30 -9
  35. data/lib/azeroth/resource_route_builder.rb +0 -124
  36. data/spec/lib/azeroth/resource_route_builder_spec.rb +0 -22
  37. data/spec/support/app/controllers/routes_builder_controller.rb +0 -23
  38. data/spec/support/shared_examples/resource_routes.rb +0 -90
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RequestHandlerController < ActionController::Base
4
+ def document_params
5
+ params.require(:document).permit(:name)
6
+ end
7
+
8
+ def documents
9
+ Document.all
10
+ end
11
+
12
+ def document
13
+ documents.find(params.require(:id))
14
+ end
15
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples 'a request handler' do
4
+ subject(:handler) { described_class.new(controller, model) }
5
+
6
+ let(:controller) { controller_class.new }
7
+ let(:params) { ActionController::Parameters.new(parameters) }
8
+ let(:model) { Azeroth::Model.new(:document) }
9
+ let(:extra_params) { {} }
10
+
11
+ let(:decorator) { Document::Decorator.new(expected_resource) }
12
+ let(:expected_json) { decorator.as_json }
13
+ let(:documents_count) { 0 }
14
+
15
+ let(:controller_class) { RequestHandlerController }
16
+
17
+ let(:format) { 'json' }
18
+
19
+ let(:parameters) do
20
+ { format: format }.merge(extra_params)
21
+ end
22
+
23
+ before do
24
+ documents_count.times { create(:document) }
25
+
26
+ allow(controller).to receive(:params)
27
+ .and_return(params)
28
+
29
+ allow(controller).to receive(:render)
30
+ .with(json: expected_json)
31
+ .and_return(expected_json)
32
+ end
33
+
34
+ it 'returns all documents json' do
35
+ expect(handler.process).to eq(expected_json)
36
+ end
37
+
38
+ it 'renders the json' do
39
+ handler.process
40
+
41
+ expect(controller).to have_received(:render)
42
+ end
43
+
44
+ context 'with format html' do
45
+ let(:format) { 'html' }
46
+
47
+ it do
48
+ handler.process
49
+
50
+ expect(controller).not_to have_received(:render)
51
+ end
52
+ end
53
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: azeroth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darthjee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-12 00:00:00.000000000 Z
11
+ date: 2019-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -403,8 +403,15 @@ files:
403
403
  - lib/azeroth/decorator.rb
404
404
  - lib/azeroth/model.rb
405
405
  - lib/azeroth/options.rb
406
+ - lib/azeroth/request_handler.rb
407
+ - lib/azeroth/request_handler/create.rb
408
+ - lib/azeroth/request_handler/destroy.rb
409
+ - lib/azeroth/request_handler/edit.rb
410
+ - lib/azeroth/request_handler/index.rb
411
+ - lib/azeroth/request_handler/new.rb
412
+ - lib/azeroth/request_handler/show.rb
413
+ - lib/azeroth/request_handler/update.rb
406
414
  - lib/azeroth/resource_builder.rb
407
- - lib/azeroth/resource_route_builder.rb
408
415
  - lib/azeroth/resourceable.rb
409
416
  - lib/azeroth/resourceable/builder.rb
410
417
  - lib/azeroth/resourceable/class_methods.rb
@@ -486,21 +493,28 @@ files:
486
493
  - spec/integration/yard/azeroth/decorator_spec.rb
487
494
  - spec/lib/azeroth/decorator_spec.rb
488
495
  - spec/lib/azeroth/model_spec.rb
496
+ - spec/lib/azeroth/request_handler/create_spec.rb
497
+ - spec/lib/azeroth/request_handler/destroy_spec.rb
498
+ - spec/lib/azeroth/request_handler/edit_spec.rb
499
+ - spec/lib/azeroth/request_handler/index_spec.rb
500
+ - spec/lib/azeroth/request_handler/new_spec.rb
501
+ - spec/lib/azeroth/request_handler/show_spec.rb
502
+ - spec/lib/azeroth/request_handler/update_spec.rb
503
+ - spec/lib/azeroth/request_handler_spec.rb
489
504
  - spec/lib/azeroth/resource_builder_spec.rb
490
- - spec/lib/azeroth/resource_route_builder_spec.rb
491
505
  - spec/lib/azeroth/resourceable/builder_spec.rb
492
506
  - spec/lib/azeroth/routes_builder_spec.rb
493
507
  - spec/spec_helper.rb
494
508
  - spec/support/app/controllers/controller.rb
509
+ - spec/support/app/controllers/request_handler_controller.rb
495
510
  - spec/support/app/controllers/resource_builder_controller.rb
496
511
  - spec/support/app/controllers/resource_route_builder_controller.rb
497
- - spec/support/app/controllers/routes_builder_controller.rb
498
512
  - spec/support/factories/document.rb
499
513
  - spec/support/factories/dummy_model.rb
500
514
  - spec/support/factories/user.rb
501
515
  - spec/support/factory_bot.rb
502
516
  - spec/support/matchers/add_method.rb
503
- - spec/support/shared_examples/resource_routes.rb
517
+ - spec/support/shared_examples/request_handler.rb
504
518
  homepage: https://github.com/darthjee/azeroth
505
519
  licenses: []
506
520
  metadata: {}
@@ -601,18 +615,25 @@ test_files:
601
615
  - spec/integration/yard/azeroth/decorator_spec.rb
602
616
  - spec/lib/azeroth/decorator_spec.rb
603
617
  - spec/lib/azeroth/model_spec.rb
618
+ - spec/lib/azeroth/request_handler/create_spec.rb
619
+ - spec/lib/azeroth/request_handler/destroy_spec.rb
620
+ - spec/lib/azeroth/request_handler/edit_spec.rb
621
+ - spec/lib/azeroth/request_handler/index_spec.rb
622
+ - spec/lib/azeroth/request_handler/new_spec.rb
623
+ - spec/lib/azeroth/request_handler/show_spec.rb
624
+ - spec/lib/azeroth/request_handler/update_spec.rb
625
+ - spec/lib/azeroth/request_handler_spec.rb
604
626
  - spec/lib/azeroth/resource_builder_spec.rb
605
- - spec/lib/azeroth/resource_route_builder_spec.rb
606
627
  - spec/lib/azeroth/resourceable/builder_spec.rb
607
628
  - spec/lib/azeroth/routes_builder_spec.rb
608
629
  - spec/spec_helper.rb
609
630
  - spec/support/app/controllers/controller.rb
631
+ - spec/support/app/controllers/request_handler_controller.rb
610
632
  - spec/support/app/controllers/resource_builder_controller.rb
611
633
  - spec/support/app/controllers/resource_route_builder_controller.rb
612
- - spec/support/app/controllers/routes_builder_controller.rb
613
634
  - spec/support/factories/document.rb
614
635
  - spec/support/factories/dummy_model.rb
615
636
  - spec/support/factories/user.rb
616
637
  - spec/support/factory_bot.rb
617
638
  - spec/support/matchers/add_method.rb
618
- - spec/support/shared_examples/resource_routes.rb
639
+ - spec/support/shared_examples/request_handler.rb
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Azeroth
4
- # @api private
5
- # @author Darthjee
6
- #
7
- # Builder for resources for each route
8
- #
9
- # For each route method in the controller, there
10
- # should be a resource, index should have listing
11
- # of all entries, update should update and return
12
- # updated resource, new should return an empty object,
13
- # etc..
14
- class ResourceRouteBuilder
15
- # @param (see ResourceBuilder#initialize)
16
- def initialize(model, builder)
17
- @model = model
18
- @builder = builder
19
- end
20
-
21
- # Append methods to be build to the builder
22
- #
23
- # The methods to be added are resources related
24
- # to the routes:
25
- # - new
26
- # - show
27
- # - create
28
- # - update
29
- # - edit
30
- # - index
31
- #
32
- # @return [Array<Sinclair::MethodDefinition>]
33
- def append
34
- add_new_reource
35
- add_create_resource
36
- add_update_resource
37
-
38
- add_method(:index_resource, model.plural)
39
- add_method(:edit_resource, name)
40
- add_method(:show_resource, name)
41
- end
42
-
43
- private
44
-
45
- attr_reader :model, :builder
46
- # @method model
47
- # @api private
48
- # @private
49
- #
50
- # Returns the model class of the resource
51
- #
52
- # @return [Model]
53
-
54
- # @method builder
55
- # @api private
56
- # @private
57
- #
58
- # Returns a method builder
59
- #
60
- # @return [Sinclair]
61
- #
62
- # @see https://www.rubydoc.info/gems/sinclair Sinclair
63
-
64
- delegate :add_method, to: :builder
65
- # @api private
66
- # @method add_method
67
- #
68
- # Add a method to be build on the controller
69
- #
70
- # @return [Array<Sinclair::MethodDefinition>]
71
-
72
- delegate :name, :klass, to: :model
73
- # @method name
74
- # @api private
75
- #
76
- # Returns the name of the resource represented by the model
77
- #
78
- # @return [String]
79
-
80
- # @method klass
81
- # @api private
82
- #
83
- # Resource class (real model class)
84
- #
85
- # @return [Class]
86
-
87
- # Adds the reource for new route
88
- #
89
- # It returns a new empty object
90
- #
91
- # @return [Array<Sinclair::MethodDefinition>]
92
- def add_new_reource
93
- add_method(:new_resource, "@new_resource ||= #{klass}.new")
94
- end
95
-
96
- # Adds the reource for create route
97
- #
98
- # It creates an entry in the database from the parameters
99
- #
100
- # @return [Array<Sinclair::MethodDefinition>]
101
- def add_create_resource
102
- add_method(
103
- :create_resource,
104
- "@create_resource ||= #{klass}.create(#{name}_params)"
105
- )
106
- end
107
-
108
- # Adds the reource for update route
109
- #
110
- # It updates an entry in the database from the parameters
111
- #
112
- # @return [Array<Sinclair::MethodDefinition>]
113
- def add_update_resource
114
- add_method(
115
- :update_resource,
116
- <<-CODE
117
- @update_resource ||= #{name}.tap do |value|
118
- value.update(#{name}_params)
119
- end
120
- CODE
121
- )
122
- end
123
- end
124
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Azeroth::ResourceRouteBuilder do
6
- subject(:resource_routes_builder) do
7
- described_class.new(model, builder)
8
- end
9
-
10
- let(:model) { Azeroth::Model.new(:document) }
11
- let(:builder) { Sinclair.new(klass) }
12
- let(:klass) { Class.new(ResourceRouteBuilderController) }
13
-
14
- before do
15
- resource_routes_builder.append
16
- 10.times { Document.create }
17
- end
18
-
19
- describe '#append' do
20
- it_behaves_like 'a route resource build'
21
- end
22
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class RoutesBuilderController
4
- def initialize(id: nil, document: nil)
5
- @id = id
6
- @document_params = document
7
- end
8
-
9
- def perform(action)
10
- @action = action
11
- send(action)
12
- end
13
-
14
- private
15
-
16
- attr_reader :id, :document_params, :action
17
-
18
- def render_basic
19
- {
20
- json: "#{action}_json"
21
- }
22
- end
23
- end
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- shared_examples 'a builder that adds a resource for route' do |route|
4
- let(:params) { {} }
5
- let(:instance) { klass.new(params) }
6
- let(:value) { instance.public_send("#{route}_resource") }
7
-
8
- it "adds #{route}_resource" do
9
- expect { builder.build }
10
- .to change { klass.new.respond_to?(:"#{route}_resource") }
11
- .from(false).to(true)
12
- end
13
-
14
- it "#{route}_resource responds with correct resource" do
15
- builder.build
16
- expect(value.to_json).to eq(expected.to_json)
17
- end
18
- end
19
-
20
- shared_examples 'a route resource build' do
21
- let(:name) { 'The Doc' }
22
- let(:document_params) { { name: name } }
23
-
24
- describe 'index_resource' do
25
- it_behaves_like 'a builder that adds a resource for route', :index do
26
- let(:expected) { Document.all }
27
- end
28
- end
29
-
30
- describe 'new_resource' do
31
- it_behaves_like 'a builder that adds a resource for route', :new do
32
- let(:expected) { Document.new }
33
-
34
- it 'does not create the resource' do
35
- builder.build
36
- expect do
37
- instance.new_resource
38
- end.not_to change(Document, :count)
39
- end
40
- end
41
- end
42
-
43
- describe 'create_resource' do
44
- it_behaves_like 'a builder that adds a resource for route', :create do
45
- let(:expected) { Document.last }
46
- let(:params) { { document: document_params } }
47
-
48
- it 'creates the resource' do
49
- builder.build
50
- expect do
51
- instance.create_resource
52
- end.to change(Document, :count).by(1)
53
- end
54
- end
55
- end
56
-
57
- describe 'show_resource' do
58
- let(:document) { Document.create }
59
-
60
- it_behaves_like 'a builder that adds a resource for route', :show do
61
- let(:expected) { document }
62
- let(:params) { { id: document.id } }
63
- end
64
- end
65
-
66
- describe 'update_resource' do
67
- let!(:document) { Document.create }
68
-
69
- it_behaves_like 'a builder that adds a resource for route', :update do
70
- let(:expected) { Document.find(document.id) }
71
- let(:params) { { id: document.id, document: document_params } }
72
-
73
- describe 'after the methods has been built' do
74
- before { builder.build }
75
-
76
- it 'updates the resource the resource' do
77
- expect do
78
- instance.update_resource
79
- end.to change { document.reload.name }.to(name)
80
- end
81
-
82
- it 'does not create the resource' do
83
- expect do
84
- instance.update_resource
85
- end.not_to change(Document, :count)
86
- end
87
- end
88
- end
89
- end
90
- end