azeroth 0.6.4 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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) { handler_class.new(controller, model) }
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
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :pokemon, class: '::Pokemon' do
5
+ name { 'Bulbasaur' }
6
+ pokemon_master
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :pokemon_master, class: '::PokemonMaster' do
5
+ sequence(:first_name) { |n| "Ash-#{n}" }
6
+ sequence(:last_name) { |n| "Ketchum-#{n}" }
7
+ age { 10 }
8
+ end
9
+ 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) { described_class.new(controller, model) }
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.6.4
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: 2020-05-06 00:00:00.000000000 Z
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.0
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.0
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.4
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.4
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.4.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.4.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.4.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.4.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.10.9
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.10.9
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.4.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.4.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