azeroth 0.6.4 → 0.7.3
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/.circleci/config.yml +37 -2
- data/Dockerfile +2 -2
- data/README.md +58 -7
- data/azeroth.gemspec +7 -6
- data/lib/azeroth.rb +1 -0
- data/lib/azeroth/decorator.rb +2 -0
- data/lib/azeroth/model.rb +3 -1
- data/lib/azeroth/options.rb +38 -1
- data/lib/azeroth/request_handler.rb +39 -2
- data/lib/azeroth/request_handler/create.rb +31 -5
- data/lib/azeroth/request_handler/update.rb +3 -3
- data/lib/azeroth/resourceable.rb +23 -0
- data/lib/azeroth/resourceable/class_methods.rb +31 -11
- data/lib/azeroth/routes_builder.rb +2 -1
- data/lib/azeroth/version.rb +1 -1
- data/spec/controllers/pokemon_masters_controller_spec.rb +56 -0
- data/spec/controllers/pokemons_controller_spec.rb +56 -0
- data/spec/dummy/app/controllers/pokemon_masters_controller.rb +9 -0
- data/spec/dummy/app/controllers/pokemons_controller.rb +27 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/lib/azeroth/decorator/key_value_extractor_spec.rb +32 -0
- data/spec/lib/azeroth/decorator_spec.rb +28 -2
- data/spec/lib/azeroth/request_handler/create_spec.rb +166 -0
- data/spec/lib/azeroth/request_handler/update_spec.rb +91 -0
- data/spec/lib/azeroth/request_handler_spec.rb +3 -1
- data/spec/support/app/controllers/request_handler_controller.rb +12 -1
- data/spec/support/factories/pokemon.rb +8 -0
- data/spec/support/factories/pokemon_master.rb +9 -0
- data/spec/support/shared_examples/request_handler.rb +5 -2
- metadata +46 -20
@@ -30,6 +30,97 @@ describe Azeroth::RequestHandler::Update do
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
context 'with before_save block option' do
|
34
|
+
it_behaves_like 'a request handler' do
|
35
|
+
let(:block) do
|
36
|
+
value = 10
|
37
|
+
proc do
|
38
|
+
document.reference = "X-MAGIC-#{value}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:options_hash) do
|
43
|
+
{
|
44
|
+
before_save: block
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
let(:expected_resource) { document }
|
49
|
+
|
50
|
+
let(:extra_params) do
|
51
|
+
{
|
52
|
+
id: document.id,
|
53
|
+
document: {
|
54
|
+
name: 'New Name'
|
55
|
+
}
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
let(:expected_json) do
|
60
|
+
{
|
61
|
+
'name' => 'New Name',
|
62
|
+
'reference' => 'X-MAGIC-10'
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'updates the values given by request' do
|
67
|
+
expect { handler.process }
|
68
|
+
.to change { document.reload.name }
|
69
|
+
.from(document.name)
|
70
|
+
.to('New Name')
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'updates the values done by before_save' do
|
74
|
+
expect { handler.process }
|
75
|
+
.to change { document.reload.reference }
|
76
|
+
.from(nil)
|
77
|
+
.to('X-MAGIC-10')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'with before_save symbol option' do
|
83
|
+
it_behaves_like 'a request handler' do
|
84
|
+
let(:options_hash) do
|
85
|
+
{
|
86
|
+
before_save: :add_magic_reference
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
let(:expected_resource) { document }
|
91
|
+
|
92
|
+
let(:extra_params) do
|
93
|
+
{
|
94
|
+
id: document.id,
|
95
|
+
document: {
|
96
|
+
name: 'New Name'
|
97
|
+
}
|
98
|
+
}
|
99
|
+
end
|
100
|
+
|
101
|
+
let(:expected_json) do
|
102
|
+
{
|
103
|
+
'name' => 'New Name',
|
104
|
+
'reference' => 'X-MAGIC-15'
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'updates the values given by request' do
|
109
|
+
expect { handler.process }
|
110
|
+
.to change { document.reload.name }
|
111
|
+
.from(document.name)
|
112
|
+
.to('New Name')
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'updates the values done by before_save' do
|
116
|
+
expect { handler.process }
|
117
|
+
.to change { document.reload.reference }
|
118
|
+
.from(nil)
|
119
|
+
.to('X-MAGIC-15')
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
33
124
|
context 'when payload is invalid' do
|
34
125
|
it_behaves_like 'a request handler',
|
35
126
|
status: :unprocessable_entity do
|
@@ -4,7 +4,9 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe Azeroth::RequestHandler do
|
6
6
|
describe '#process' do
|
7
|
-
subject(:handler)
|
7
|
+
subject(:handler) do
|
8
|
+
handler_class.new(controller, model, options)
|
9
|
+
end
|
8
10
|
|
9
11
|
let(:controller) { controller_class.new }
|
10
12
|
let(:params) { ActionController::Parameters.new(parameters) }
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class RequestHandlerController < ActionController::Base
|
4
|
+
private
|
5
|
+
|
4
6
|
def document_params
|
5
7
|
params.require(:document).permit(:name)
|
6
8
|
end
|
@@ -10,6 +12,15 @@ class RequestHandlerController < ActionController::Base
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def document
|
13
|
-
documents.find(params.require(:id))
|
15
|
+
@document ||= documents.find(params.require(:id))
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_magic_reference
|
19
|
+
document.reference = 'X-MAGIC-15'
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_magic_document
|
23
|
+
documents.where(reference: 'X-MAGIC-15')
|
24
|
+
.build(document_params)
|
14
25
|
end
|
15
26
|
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
shared_examples 'a request handler' do |status: :ok|
|
4
|
-
subject(:handler)
|
4
|
+
subject(:handler) do
|
5
|
+
described_class.new(controller, model, options)
|
6
|
+
end
|
5
7
|
|
6
8
|
let(:controller) { controller_class.new }
|
7
9
|
let(:params) { ActionController::Parameters.new(parameters) }
|
8
10
|
let(:model) { Azeroth::Model.new(:document, options) }
|
9
|
-
let(:options) { Azeroth::Options.new }
|
11
|
+
let(:options) { Azeroth::Options.new(options_hash) }
|
12
|
+
let(:options_hash) { {} }
|
10
13
|
let(:extra_params) { {} }
|
11
14
|
|
12
15
|
let(:decorator) { Document::Decorator.new(expected_resource) }
|
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.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darthjee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.2.
|
19
|
+
version: 5.2.x
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.2.
|
26
|
+
version: 5.2.x
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: darthjee-active_ext
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,48 +38,62 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.3.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jace
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.3
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.3
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: sinclair
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.6.
|
61
|
+
version: 1.6.5
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.6.
|
68
|
+
version: 1.6.5
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: actionpack
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: 5.2.
|
75
|
+
version: 5.2.x
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: 5.2.
|
82
|
+
version: 5.2.x
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: activerecord
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: 5.2.
|
89
|
+
version: 5.2.x
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: 5.2.
|
96
|
+
version: 5.2.x
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: bundler
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +128,14 @@ dependencies:
|
|
114
128
|
requirements:
|
115
129
|
- - '='
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.
|
131
|
+
version: 1.11.3
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - '='
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: 1.
|
138
|
+
version: 1.11.3
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: pry
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,16 +168,16 @@ dependencies:
|
|
154
168
|
name: rails
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
|
-
- -
|
171
|
+
- - "~>"
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: 5.2.
|
173
|
+
version: 5.2.x
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
|
-
- -
|
178
|
+
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: 5.2.
|
180
|
+
version: 5.2.x
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: rails-controller-testing
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -438,6 +452,8 @@ files:
|
|
438
452
|
- spec/controllers/documents_controller_spec.rb
|
439
453
|
- spec/controllers/documents_with_error_controller_spec.rb
|
440
454
|
- spec/controllers/index_documents_controller_spec.rb
|
455
|
+
- spec/controllers/pokemon_masters_controller_spec.rb
|
456
|
+
- spec/controllers/pokemons_controller_spec.rb
|
441
457
|
- spec/dummy/.ruby-version
|
442
458
|
- spec/dummy/Rakefile
|
443
459
|
- spec/dummy/app/assets/config/manifest.js
|
@@ -454,6 +470,8 @@ files:
|
|
454
470
|
- spec/dummy/app/controllers/documents_with_error_controller.rb
|
455
471
|
- spec/dummy/app/controllers/games_controller.rb
|
456
472
|
- spec/dummy/app/controllers/index_documents_controller.rb
|
473
|
+
- spec/dummy/app/controllers/pokemon_masters_controller.rb
|
474
|
+
- spec/dummy/app/controllers/pokemons_controller.rb
|
457
475
|
- spec/dummy/app/controllers/publishers_controller.rb
|
458
476
|
- spec/dummy/app/helpers/application_helper.rb
|
459
477
|
- spec/dummy/app/jobs/application_job.rb
|
@@ -560,6 +578,8 @@ files:
|
|
560
578
|
- spec/support/factories/dummy_model.rb
|
561
579
|
- spec/support/factories/factory.rb
|
562
580
|
- spec/support/factories/game.rb
|
581
|
+
- spec/support/factories/pokemon.rb
|
582
|
+
- spec/support/factories/pokemon_master.rb
|
563
583
|
- spec/support/factories/product.rb
|
564
584
|
- spec/support/factories/publisher.rb
|
565
585
|
- spec/support/factories/user.rb
|
@@ -593,6 +613,8 @@ test_files:
|
|
593
613
|
- spec/controllers/documents_controller_spec.rb
|
594
614
|
- spec/controllers/documents_with_error_controller_spec.rb
|
595
615
|
- spec/controllers/index_documents_controller_spec.rb
|
616
|
+
- spec/controllers/pokemon_masters_controller_spec.rb
|
617
|
+
- spec/controllers/pokemons_controller_spec.rb
|
596
618
|
- spec/dummy/.ruby-version
|
597
619
|
- spec/dummy/Rakefile
|
598
620
|
- spec/dummy/app/assets/config/manifest.js
|
@@ -609,6 +631,8 @@ test_files:
|
|
609
631
|
- spec/dummy/app/controllers/documents_with_error_controller.rb
|
610
632
|
- spec/dummy/app/controllers/games_controller.rb
|
611
633
|
- spec/dummy/app/controllers/index_documents_controller.rb
|
634
|
+
- spec/dummy/app/controllers/pokemon_masters_controller.rb
|
635
|
+
- spec/dummy/app/controllers/pokemons_controller.rb
|
612
636
|
- spec/dummy/app/controllers/publishers_controller.rb
|
613
637
|
- spec/dummy/app/helpers/application_helper.rb
|
614
638
|
- spec/dummy/app/jobs/application_job.rb
|
@@ -715,6 +739,8 @@ test_files:
|
|
715
739
|
- spec/support/factories/dummy_model.rb
|
716
740
|
- spec/support/factories/factory.rb
|
717
741
|
- spec/support/factories/game.rb
|
742
|
+
- spec/support/factories/pokemon.rb
|
743
|
+
- spec/support/factories/pokemon_master.rb
|
718
744
|
- spec/support/factories/product.rb
|
719
745
|
- spec/support/factories/publisher.rb
|
720
746
|
- spec/support/factories/user.rb
|