azeroth 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b3f2e1e80d4b8a81dc439e3932b0742cc127fb6ebbe7b00b10668a0c71f1a59
4
- data.tar.gz: 47ddb93df9b8071bd0eeac69b3a709b2e7698f24a3cff1615931f8f244298d70
3
+ metadata.gz: '09152b8053d40bd19405c5b7165458483d4304310fa5ec64c0d2b5723dda0067'
4
+ data.tar.gz: 1a1039542352929720e5cc7ae1242932b7d2a65856e2156b14a36d1a8bb1722b
5
5
  SHA512:
6
- metadata.gz: f46485bfd779e80c4c56fb3e727ab3bdd1beda52f25a6ad923e6952ae114f7ab15b47e9ed529fcfa84094767dd67606872b7cea0bce61c12a81166d49b28ac75
7
- data.tar.gz: ea59d8e707925e64004493181c5303bc954ddf28e7c518a214ef2d19c9314098a9bc29454cd4bec9b9d697750d1f92e1492d48e2a345fa21518d43c6b2177e2d
6
+ metadata.gz: 2ae5257e2851ccbbadbd79d9a0c0a13be63e392b2af16c6e1f66be399ee00bc51b06f9682f25d88648f3a32d2c07451d456d80035f04b48a4cc471d27a572e59
7
+ data.tar.gz: d7c01b81ce09615d65cc451d2a1669ac9d843d18d75fbb0c12c2e4356507fce62288145bd30295674619a0649327b1b69568fede8adb452e602073f67659235e
data/.circleci/config.yml CHANGED
@@ -18,7 +18,7 @@ workflows:
18
18
  jobs:
19
19
  test:
20
20
  docker:
21
- - image: darthjee/circleci_rails_gems:0.5.4
21
+ - image: darthjee/circleci_rails_gems:0.6.3
22
22
  environment:
23
23
  PROJECT: azeroth
24
24
  steps:
@@ -52,7 +52,7 @@ jobs:
52
52
  command: check_specs
53
53
  build-and-release:
54
54
  docker:
55
- - image: darthjee/circleci_rails_gems:0.5.4
55
+ - image: darthjee/circleci_rails_gems:0.6.3
56
56
  environment:
57
57
  PROJECT: azeroth
58
58
  steps:
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM darthjee/rails_gems:0.5.4 as base
1
+ FROM darthjee/rails_gems:0.7.0 as base
2
2
  FROM darthjee/scripts:0.1.8 as scripts
3
3
 
4
4
  ######################################
data/README.md CHANGED
@@ -11,7 +11,7 @@ Azeroth
11
11
 
12
12
  Yard Documentation
13
13
  -------------------
14
- [https://www.rubydoc.info/gems/azeroth/0.7.1](https://www.rubydoc.info/gems/azeroth/0.7.1)
14
+ [https://www.rubydoc.info/gems/azeroth/0.8.0](https://www.rubydoc.info/gems/azeroth/0.8.0)
15
15
 
16
16
  Azeroth has been designed making the coding of controllers easier
17
17
  as routes in controllers are usually copy, paste and replace of same
@@ -59,7 +59,10 @@ It accepts options
59
59
  - except: List of actions to not to be built
60
60
  - decorator: Decorator class or flag allowing/disallowing decorators
61
61
  - before_save: Method/Proc to be ran before saving the resource on create or update
62
+ - after_save: Method/Proc to be ran after saving the resource on create or update
62
63
  - build_with: Method/Block to be ran when building the reource on create
64
+ - paginated: Flag when pagination should be applied
65
+ - per_page: Number of items returned when pagination is active
63
66
 
64
67
  ```ruby
65
68
  # publishers_controller.rb
data/azeroth.gemspec CHANGED
@@ -18,33 +18,35 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ['lib']
20
20
 
21
- gem.add_runtime_dependency 'activesupport', '~> 5.2.4.2'
21
+ gem.add_runtime_dependency 'activesupport', '~> 5.2.x'
22
22
  gem.add_runtime_dependency 'darthjee-active_ext', '>= 1.3.2'
23
23
  gem.add_runtime_dependency 'jace', '>= 0.0.3'
24
- gem.add_runtime_dependency 'sinclair', '>= 1.6.5'
24
+ gem.add_runtime_dependency 'sinclair', '>= 1.6.7'
25
25
 
26
- gem.add_development_dependency 'actionpack', '5.2.4.2'
27
- gem.add_development_dependency 'activerecord', '5.2.4.2'
28
- gem.add_development_dependency 'bundler', '1.16.1'
29
- gem.add_development_dependency 'factory_bot', '5.2.0'
30
- gem.add_development_dependency 'nokogiri', '1.10.9'
31
- gem.add_development_dependency 'pry', '0.12.2'
32
- gem.add_development_dependency 'pry-nav', '0.3.0'
33
- gem.add_development_dependency 'rails', '5.2.4.2'
34
- gem.add_development_dependency 'rails-controller-testing', '1.0.4'
35
- gem.add_development_dependency 'rake', '13.0.1'
36
- gem.add_development_dependency 'reek', '5.6.0'
37
- gem.add_development_dependency 'rspec', '3.9.0'
38
- gem.add_development_dependency 'rspec-core', '3.9.1'
39
- gem.add_development_dependency 'rspec-expectations', '3.9.1'
40
- gem.add_development_dependency 'rspec-mocks', '3.9.1'
41
- gem.add_development_dependency 'rspec-rails', '3.9.0'
42
- gem.add_development_dependency 'rspec-support', '3.9.2'
43
- gem.add_development_dependency 'rubocop', '0.80.1'
44
- gem.add_development_dependency 'rubocop-rspec', '1.38.1'
45
- gem.add_development_dependency 'rubycritic', '4.4.1'
46
- gem.add_development_dependency 'simplecov', '0.17.1'
47
- gem.add_development_dependency 'sqlite3', '1.4.2'
48
- gem.add_development_dependency 'yard', '0.9.24'
49
- gem.add_development_dependency 'yardstick', '0.9.9'
26
+ gem.add_development_dependency 'actionpack', '~> 5.2.x'
27
+ gem.add_development_dependency 'activerecord', '~> 5.2.x'
28
+ gem.add_development_dependency 'bundler', '1.16.1'
29
+ gem.add_development_dependency 'factory_bot', '5.2.0'
30
+ gem.add_development_dependency 'nokogiri', '1.11.4'
31
+ gem.add_development_dependency 'pry', '0.12.2'
32
+ gem.add_development_dependency 'pry-nav', '0.3.0'
33
+ gem.add_development_dependency 'rails', '~> 5.2.x'
34
+ gem.add_development_dependency 'rails-controller-testing', '1.0.4'
35
+ gem.add_development_dependency 'rake', '13.0.3'
36
+ gem.add_development_dependency 'reek', '6.0.3'
37
+ gem.add_development_dependency 'rspec', '3.9.0'
38
+ gem.add_development_dependency 'rspec-collection_matchers', '1.2.0'
39
+ gem.add_development_dependency 'rspec-core', '3.9.3'
40
+ gem.add_development_dependency 'rspec-expectations', '3.9.4'
41
+ gem.add_development_dependency 'rspec-mocks', '3.9.1'
42
+ gem.add_development_dependency 'rspec-rails', '3.9.0'
43
+ gem.add_development_dependency 'rspec-support', '3.9.4'
44
+ gem.add_development_dependency 'rubocop', '0.80.1'
45
+ gem.add_development_dependency 'rubocop-rspec', '1.38.1'
46
+ gem.add_development_dependency 'rubycritic', '4.6.1'
47
+ gem.add_development_dependency 'shoulda-matchers', '4.3.0'
48
+ gem.add_development_dependency 'simplecov', '0.17.1'
49
+ gem.add_development_dependency 'sqlite3', '1.4.2'
50
+ gem.add_development_dependency 'yard', '0.9.26'
51
+ gem.add_development_dependency 'yardstick', '0.9.9'
50
52
  end
@@ -42,6 +42,7 @@ module Azeroth
42
42
  class Decorator
43
43
  autoload :HashBuilder, 'azeroth/decorator/hash_builder'
44
44
  autoload :KeyValueExtractor, 'azeroth/decorator/key_value_extractor'
45
+ autoload :MethodBuilder, 'azeroth/decorator/method_builder'
45
46
  autoload :Options, 'azeroth/decorator/options'
46
47
 
47
48
  class << self
@@ -228,9 +229,7 @@ module Azeroth
228
229
  def expose(attribute, **options_hash)
229
230
  options = Decorator::Options.new(options_hash)
230
231
 
231
- builder = Sinclair.new(self)
232
- builder.add_method(attribute, "@object.#{attribute}")
233
- builder.build
232
+ MethodBuilder.build_reader(self, attribute)
234
233
 
235
234
  attributes_map[attribute] = options
236
235
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinclair'
4
+
5
+ module Azeroth
6
+ class Decorator
7
+ # Responsible for building readers for attributes
8
+ # @api private
9
+ class MethodBuilder < Sinclair
10
+ # Builds reader
11
+ #
12
+ # reaader delegate method calls to @object
13
+ #
14
+ # @return (see Sinclair#build)
15
+ def self.build_reader(klass, attribute)
16
+ new(klass).build_reader(attribute)
17
+ end
18
+
19
+ # (see MethodBuilder.build_reader)
20
+ def build_reader(attribute)
21
+ add_method(attribute, "@object.#{attribute}")
22
+ build
23
+ end
24
+ end
25
+ end
26
+ end
@@ -19,7 +19,10 @@ module Azeroth
19
19
  except: [],
20
20
  decorator: true,
21
21
  before_save: nil,
22
- build_with: nil
22
+ after_save: nil,
23
+ build_with: nil,
24
+ paginated: false,
25
+ per_page: 20
23
26
  }.freeze
24
27
 
25
28
  with_options DEFAULT_OPTIONS
@@ -40,10 +43,18 @@ module Azeroth
40
43
  # @return [Jace::Dispatcher]
41
44
  def event_dispatcher(event)
42
45
  Jace::Dispatcher.new(
43
- before: try("before_#{event}")
46
+ before: try("before_#{event}"),
47
+ after: try("after_#{event}")
44
48
  )
45
49
  end
46
50
 
51
+ alias paginated? paginated
52
+ # @method paginated?
53
+ # @api private
54
+ #
55
+ # @see paginated
56
+ # @return [TrueClass,FalseClass]
57
+
47
58
  # @method only
48
59
  # @api private
49
60
  #
@@ -81,11 +92,36 @@ module Azeroth
81
92
  #
82
93
  # @return [Symbol,Proc]
83
94
 
95
+ # @method after_save
96
+ # @api private
97
+ #
98
+ # Block or method name to be run after save
99
+ #
100
+ # The given method or block will be ran
101
+ # after committing changes in models
102
+ # to database
103
+ #
104
+ # @return [Symbol,Proc]
105
+
84
106
  # @method build_with
85
107
  # @api private
86
108
  #
87
109
  # Block or method name to be ran when building the resource
88
110
  #
89
111
  # @return [Symbol,Proc]
112
+
113
+ # @method paginated
114
+ # @api private
115
+ #
116
+ # Boolean indicating if pagination should or not be used
117
+ #
118
+ # @return [TrueClass,FalseClass]
119
+
120
+ # @method per_page
121
+ # @api private
122
+ #
123
+ # Number of elements when pagination is active
124
+ #
125
+ # @return [Integer]
90
126
  end
91
127
  end
@@ -8,12 +8,58 @@ module Azeroth
8
8
  class Index < RequestHandler
9
9
  private
10
10
 
11
+ delegate :paginated?, :per_page, to: :options
12
+
11
13
  # @private
12
14
  #
13
15
  # return a collection of the model
14
16
  #
15
17
  # @return [Enumerable<Object>]
16
18
  def resource
19
+ return scoped_entries unless paginated?
20
+
21
+ paginated_entries
22
+ end
23
+
24
+ # @private
25
+ #
26
+ # paginated collection of the model
27
+ #
28
+ # @return [Enumerable<Object>]
29
+ def paginated_entries
30
+ scoped_entries.offset(offset).limit(limit)
31
+ end
32
+
33
+ # @private
34
+ #
35
+ # offest used in pagination
36
+ #
37
+ # offset is retrieved from +params[:per_page]+
38
+ # or +options.per_page+
39
+ #
40
+ # @return [Integer]
41
+ def offset
42
+ page = (params[:page] || 1).to_i - 1
43
+ page * limit
44
+ end
45
+
46
+ # @private
47
+ #
48
+ # limit used in pagination
49
+ #
50
+ # limit is retrieved from +params[:page]+
51
+ #
52
+ # @return [Integer]
53
+ def limit
54
+ (params[:per_page] || per_page).to_i
55
+ end
56
+
57
+ # @private
58
+ #
59
+ # default scope of elements
60
+ #
61
+ # @return [Enumerable<Object>]
62
+ def scoped_entries
17
63
  controller.send(model.plural)
18
64
  end
19
65
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Azeroth
4
- VERSION = '0.7.1'
4
+ VERSION = '0.8.0'
5
5
  end
@@ -11,7 +11,7 @@ describe DocumentsController do
11
11
  let(:documents_count) { 0 }
12
12
 
13
13
  before do
14
- documents_count.times.map { create(:document) }
14
+ create_list(:document, documents_count)
15
15
  end
16
16
 
17
17
  context 'when calling on format json' do
@@ -11,7 +11,7 @@ describe DocumentsWithErrorController do
11
11
  let(:documents_count) { 0 }
12
12
 
13
13
  before do
14
- documents_count.times.map { create(:document) }
14
+ create_list(:document, documents_count)
15
15
  end
16
16
 
17
17
  context 'when calling on format json' do
@@ -10,7 +10,7 @@ describe IndexDocumentsController do
10
10
  describe 'GET index' do
11
11
  let(:documents_count) { 0 }
12
12
  let!(:documents) do
13
- documents_count.times.map { create(:document) }
13
+ create_list(:document, documents_count)
14
14
  end
15
15
 
16
16
  let(:expected_json) do
@@ -37,6 +37,17 @@ describe IndexDocumentsController do
37
37
  expect(parsed_response).to eq(expected_json)
38
38
  end
39
39
  end
40
+
41
+ context 'when there are more documents than expected pagination' do
42
+ let(:documents_count) { Random.rand(21..30) }
43
+
44
+ it { expect(response).to be_successful }
45
+
46
+ it 'returns all documents' do
47
+ expect(parsed_response)
48
+ .to have(documents_count).elements
49
+ end
50
+ end
40
51
  end
41
52
  end
42
53
 
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe PaginatedDocumentsController do
6
+ let(:parsed_response) do
7
+ JSON.parse(response.body)
8
+ end
9
+
10
+ describe 'GET index' do
11
+ let(:documents_count) { 0 }
12
+ let!(:documents) do
13
+ create_list(:document, documents_count)
14
+ end
15
+
16
+ let(:expected_json) do
17
+ Document::Decorator.new(documents).as_json
18
+ end
19
+
20
+ context 'when calling on format json' do
21
+ let(:parameters) { {} }
22
+
23
+ before do
24
+ get :index, params: parameters.merge(format: :json)
25
+ end
26
+
27
+ it { expect(response).to be_successful }
28
+
29
+ it 'returns empty array' do
30
+ expect(parsed_response).to eq(expected_json)
31
+ end
32
+
33
+ context 'when there is a document' do
34
+ let(:documents_count) { 1 }
35
+
36
+ it { expect(response).to be_successful }
37
+
38
+ it 'renders documents json' do
39
+ expect(parsed_response).to eq(expected_json)
40
+ end
41
+ end
42
+
43
+ context 'when there are more documents than expected pagination' do
44
+ let(:documents_count) { Random.rand(21..30) }
45
+
46
+ it { expect(response).to be_successful }
47
+
48
+ it 'returns paginated documents' do
49
+ expect(parsed_response)
50
+ .not_to have(documents_count).elements
51
+ end
52
+
53
+ it 'returns full page of documents' do
54
+ expect(parsed_response)
55
+ .to have(20).elements
56
+ end
57
+ end
58
+
59
+ context 'when page is given' do
60
+ let(:documents_count) { Random.rand(21..30) }
61
+ let(:parameters) { { page: 2 } }
62
+
63
+ it { expect(response).to be_successful }
64
+
65
+ it 'returns paginated documents' do
66
+ expect(parsed_response)
67
+ .not_to have(documents_count).elements
68
+ end
69
+
70
+ it 'returns full page of documents' do
71
+ expect(parsed_response)
72
+ .to have(documents_count - 20)
73
+ .elements
74
+ end
75
+ end
76
+
77
+ context 'when per_page is given' do
78
+ let(:documents_count) { Random.rand(21..30) }
79
+ let(:per_page) { Random.rand(5..15) }
80
+ let(:parameters) { { per_page: per_page } }
81
+
82
+ it { expect(response).to be_successful }
83
+
84
+ it 'returns paginated documents' do
85
+ expect(parsed_response)
86
+ .not_to have(documents_count).elements
87
+ end
88
+
89
+ it 'returns full page of documents' do
90
+ expect(parsed_response)
91
+ .to have(per_page)
92
+ .elements
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PaginatedDocumentsController < ApplicationController
4
+ include Azeroth::Resourceable
5
+
6
+ resource_for :document, only: 'index', paginated: true
7
+ end
@@ -4,6 +4,7 @@ Rails.application.routes.draw do
4
4
  resources :documents
5
5
  resources :public_documents, controller: :index_documents
6
6
  resources :create_documents, controller: :documents_with_error
7
+ resources :paginated_documents
7
8
 
8
9
  resources :publishers, only: %i[create index] do
9
10
  resources :games, except: :delete
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Azeroth::Decorator::MethodBuilder do
6
+ let(:decorator_class) { Class.new(Azeroth::Decorator) }
7
+ let(:decorator) { decorator_class.new(object) }
8
+ let(:model) { build(:dummy_model) }
9
+ let(:object) { model }
10
+
11
+ describe '.build_reader' do
12
+ it do
13
+ expect { described_class.build_reader(decorator_class, :age) }
14
+ .to add_method(:age).to(decorator)
15
+ end
16
+
17
+ it do
18
+ described_class.build_reader(decorator_class, :age)
19
+
20
+ expect(decorator.age).to eq(model.age)
21
+ end
22
+ end
23
+ end
@@ -106,6 +106,112 @@ describe Azeroth::RequestHandler::Create do
106
106
  end
107
107
  end
108
108
  end
109
+
110
+ context 'with after_save block option' do
111
+ it_behaves_like 'a request handler', status: :created do
112
+ let(:block) do
113
+ value = 10
114
+ proc do
115
+ document.update(reference: "X-MAGIC-#{value}")
116
+ Worker.perform(document.id)
117
+ end
118
+ end
119
+
120
+ let(:options_hash) do
121
+ {
122
+ after_save: block
123
+ }
124
+ end
125
+
126
+ let(:extra_params) do
127
+ {
128
+ document: {
129
+ name: 'My Document'
130
+ }
131
+ }
132
+ end
133
+
134
+ let(:expected_json) do
135
+ {
136
+ 'name' => 'My Document',
137
+ 'reference' => 'X-MAGIC-10'
138
+ }
139
+ end
140
+
141
+ before do
142
+ allow(Worker).to receive(:perform)
143
+ end
144
+
145
+ it 'creates entry' do
146
+ expect { handler.process }
147
+ .to change(Document, :count)
148
+ .by(1)
149
+ end
150
+
151
+ it 'trigger workers after saving' do
152
+ handler.process
153
+
154
+ expect(Worker).to have_received(:perform)
155
+ .with(Document.last.id)
156
+ end
157
+
158
+ it 'changes entry after saving' do
159
+ handler.process
160
+
161
+ expect(Document.last.reference)
162
+ .to eq('X-MAGIC-10')
163
+ end
164
+ end
165
+ end
166
+
167
+ context 'with after_save symbol option' do
168
+ it_behaves_like 'a request handler', status: :created do
169
+ let(:options_hash) do
170
+ {
171
+ after_save: :add_magic_reference_and_trigger
172
+ }
173
+ end
174
+
175
+ let(:extra_params) do
176
+ {
177
+ document: {
178
+ name: 'My Document'
179
+ }
180
+ }
181
+ end
182
+
183
+ let(:expected_json) do
184
+ {
185
+ 'name' => 'My Document',
186
+ 'reference' => 'X-MAGIC-15'
187
+ }
188
+ end
189
+
190
+ before do
191
+ allow(Worker).to receive(:perform)
192
+ end
193
+
194
+ it 'creates entry' do
195
+ expect { handler.process }
196
+ .to change(Document, :count)
197
+ .by(1)
198
+ end
199
+
200
+ it 'trigger workers after saving' do
201
+ handler.process
202
+
203
+ expect(Worker).to have_received(:perform)
204
+ .with(Document.last.id)
205
+ end
206
+
207
+ it 'changes entry after saving' do
208
+ handler.process
209
+
210
+ expect(Document.last.reference)
211
+ .to eq('X-MAGIC-15')
212
+ end
213
+ end
214
+ end
109
215
  end
110
216
 
111
217
  context 'with build_with as symbol' do
@@ -8,5 +8,48 @@ describe Azeroth::RequestHandler::Index do
8
8
  let(:documents_count) { 3 }
9
9
  let(:expected_resource) { Document.all }
10
10
  end
11
+
12
+ context 'when pagination is active' do
13
+ it_behaves_like 'a request handler' do
14
+ let(:documents_count) { Random.rand(21..30) }
15
+ let(:expected_resource) { Document.all.limit(20) }
16
+ let(:options_hash) { { paginated: true } }
17
+ end
18
+
19
+ context 'when page is given' do
20
+ it_behaves_like 'a request handler' do
21
+ let(:documents_count) { Random.rand(41..50) }
22
+ let(:expected_resource) { Document.all.offset(20).limit(20) }
23
+ let(:options_hash) { { paginated: true } }
24
+ let(:extra_params) { { page: '2' } }
25
+ end
26
+ end
27
+
28
+ context 'when third page is given' do
29
+ it_behaves_like 'a request handler' do
30
+ let(:documents_count) { Random.rand(41..50) }
31
+ let(:expected_resource) { Document.all.offset(40) }
32
+ let(:options_hash) { { paginated: true } }
33
+ let(:extra_params) { { page: '3' } }
34
+ end
35
+ end
36
+
37
+ context 'when per_page is not default' do
38
+ it_behaves_like 'a request handler' do
39
+ let(:documents_count) { Random.rand(21..30) }
40
+ let(:expected_resource) { Document.all.limit(10) }
41
+ let(:options_hash) { { paginated: true, per_page: 10 } }
42
+ end
43
+ end
44
+
45
+ context 'when per page is given in params' do
46
+ it_behaves_like 'a request handler' do
47
+ let(:documents_count) { Random.rand(41..50) }
48
+ let(:expected_resource) { Document.all.offset(15).limit(15) }
49
+ let(:options_hash) { { paginated: true, per_page: 10 } }
50
+ let(:extra_params) { { page: '2', per_page: '15' } }
51
+ end
52
+ end
53
+ end
11
54
  end
12
55
  end
@@ -34,7 +34,7 @@ describe Azeroth::RequestHandler do
34
34
  end
35
35
 
36
36
  before do
37
- documents_count.times { create(:document) }
37
+ create_list(:document, documents_count)
38
38
 
39
39
  allow(controller).to receive(:params)
40
40
  .and_return(params)
data/spec/spec_helper.rb CHANGED
@@ -18,6 +18,8 @@ require File.expand_path('spec/dummy/db/schema.rb')
18
18
  require 'rspec/rails'
19
19
  require 'active_support/railtie'
20
20
  require 'sinclair/matchers'
21
+ require 'shoulda-matchers'
22
+ require 'rspec/collection_matchers'
21
23
 
22
24
  support_files = File.expand_path('spec/support/**/*.rb')
23
25
  Dir[support_files].sort.each { |file| require file }
@@ -19,6 +19,11 @@ class RequestHandlerController < ActionController::Base
19
19
  document.reference = 'X-MAGIC-15'
20
20
  end
21
21
 
22
+ def add_magic_reference_and_trigger
23
+ document.update(reference: 'X-MAGIC-15')
24
+ Worker.perform(document.id)
25
+ end
26
+
22
27
  def build_magic_document
23
28
  documents.where(reference: 'X-MAGIC-15')
24
29
  .build(document_params)
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Worker
4
+ def self.perform(*args); end
5
+ end
@@ -25,7 +25,7 @@ shared_examples 'a request handler' do |status: :ok|
25
25
  end
26
26
 
27
27
  before do
28
- documents_count.times { create(:document) }
28
+ create_list(:document, documents_count)
29
29
 
30
30
  allow(controller).to receive(:params)
31
31
  .and_return(params)
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.7.1
4
+ version: 0.8.0
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-19 00:00:00.000000000 Z
11
+ date: 2021-08-11 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.4.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.4.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
@@ -58,42 +58,42 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 1.6.5
61
+ version: 1.6.7
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 1.6.5
68
+ version: 1.6.7
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: actionpack
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '='
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 5.2.4.2
75
+ version: 5.2.x
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '='
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 5.2.4.2
82
+ version: 5.2.x
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: activerecord
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '='
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 5.2.4.2
89
+ version: 5.2.x
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '='
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 5.2.4.2
96
+ version: 5.2.x
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 1.10.9
131
+ version: 1.11.4
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 1.10.9
138
+ version: 1.11.4
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: pry
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -168,16 +168,16 @@ dependencies:
168
168
  name: rails
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - '='
171
+ - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 5.2.4.2
173
+ version: 5.2.x
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - '='
178
+ - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 5.2.4.2
180
+ version: 5.2.x
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rails-controller-testing
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -198,28 +198,28 @@ dependencies:
198
198
  requirements:
199
199
  - - '='
200
200
  - !ruby/object:Gem::Version
201
- version: 13.0.1
201
+ version: 13.0.3
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - '='
207
207
  - !ruby/object:Gem::Version
208
- version: 13.0.1
208
+ version: 13.0.3
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: reek
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - '='
214
214
  - !ruby/object:Gem::Version
215
- version: 5.6.0
215
+ version: 6.0.3
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - '='
221
221
  - !ruby/object:Gem::Version
222
- version: 5.6.0
222
+ version: 6.0.3
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: rspec
225
225
  requirement: !ruby/object:Gem::Requirement
@@ -234,34 +234,48 @@ dependencies:
234
234
  - - '='
235
235
  - !ruby/object:Gem::Version
236
236
  version: 3.9.0
237
+ - !ruby/object:Gem::Dependency
238
+ name: rspec-collection_matchers
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '='
242
+ - !ruby/object:Gem::Version
243
+ version: 1.2.0
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '='
249
+ - !ruby/object:Gem::Version
250
+ version: 1.2.0
237
251
  - !ruby/object:Gem::Dependency
238
252
  name: rspec-core
239
253
  requirement: !ruby/object:Gem::Requirement
240
254
  requirements:
241
255
  - - '='
242
256
  - !ruby/object:Gem::Version
243
- version: 3.9.1
257
+ version: 3.9.3
244
258
  type: :development
245
259
  prerelease: false
246
260
  version_requirements: !ruby/object:Gem::Requirement
247
261
  requirements:
248
262
  - - '='
249
263
  - !ruby/object:Gem::Version
250
- version: 3.9.1
264
+ version: 3.9.3
251
265
  - !ruby/object:Gem::Dependency
252
266
  name: rspec-expectations
253
267
  requirement: !ruby/object:Gem::Requirement
254
268
  requirements:
255
269
  - - '='
256
270
  - !ruby/object:Gem::Version
257
- version: 3.9.1
271
+ version: 3.9.4
258
272
  type: :development
259
273
  prerelease: false
260
274
  version_requirements: !ruby/object:Gem::Requirement
261
275
  requirements:
262
276
  - - '='
263
277
  - !ruby/object:Gem::Version
264
- version: 3.9.1
278
+ version: 3.9.4
265
279
  - !ruby/object:Gem::Dependency
266
280
  name: rspec-mocks
267
281
  requirement: !ruby/object:Gem::Requirement
@@ -296,14 +310,14 @@ dependencies:
296
310
  requirements:
297
311
  - - '='
298
312
  - !ruby/object:Gem::Version
299
- version: 3.9.2
313
+ version: 3.9.4
300
314
  type: :development
301
315
  prerelease: false
302
316
  version_requirements: !ruby/object:Gem::Requirement
303
317
  requirements:
304
318
  - - '='
305
319
  - !ruby/object:Gem::Version
306
- version: 3.9.2
320
+ version: 3.9.4
307
321
  - !ruby/object:Gem::Dependency
308
322
  name: rubocop
309
323
  requirement: !ruby/object:Gem::Requirement
@@ -338,14 +352,28 @@ dependencies:
338
352
  requirements:
339
353
  - - '='
340
354
  - !ruby/object:Gem::Version
341
- version: 4.4.1
355
+ version: 4.6.1
356
+ type: :development
357
+ prerelease: false
358
+ version_requirements: !ruby/object:Gem::Requirement
359
+ requirements:
360
+ - - '='
361
+ - !ruby/object:Gem::Version
362
+ version: 4.6.1
363
+ - !ruby/object:Gem::Dependency
364
+ name: shoulda-matchers
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - '='
368
+ - !ruby/object:Gem::Version
369
+ version: 4.3.0
342
370
  type: :development
343
371
  prerelease: false
344
372
  version_requirements: !ruby/object:Gem::Requirement
345
373
  requirements:
346
374
  - - '='
347
375
  - !ruby/object:Gem::Version
348
- version: 4.4.1
376
+ version: 4.3.0
349
377
  - !ruby/object:Gem::Dependency
350
378
  name: simplecov
351
379
  requirement: !ruby/object:Gem::Requirement
@@ -380,14 +408,14 @@ dependencies:
380
408
  requirements:
381
409
  - - '='
382
410
  - !ruby/object:Gem::Version
383
- version: 0.9.24
411
+ version: 0.9.26
384
412
  type: :development
385
413
  prerelease: false
386
414
  version_requirements: !ruby/object:Gem::Requirement
387
415
  requirements:
388
416
  - - '='
389
417
  - !ruby/object:Gem::Version
390
- version: 0.9.24
418
+ version: 0.9.26
391
419
  - !ruby/object:Gem::Dependency
392
420
  name: yardstick
393
421
  requirement: !ruby/object:Gem::Requirement
@@ -431,6 +459,7 @@ files:
431
459
  - lib/azeroth/decorator.rb
432
460
  - lib/azeroth/decorator/hash_builder.rb
433
461
  - lib/azeroth/decorator/key_value_extractor.rb
462
+ - lib/azeroth/decorator/method_builder.rb
434
463
  - lib/azeroth/decorator/options.rb
435
464
  - lib/azeroth/dummy_decorator.rb
436
465
  - lib/azeroth/model.rb
@@ -452,6 +481,7 @@ files:
452
481
  - spec/controllers/documents_controller_spec.rb
453
482
  - spec/controllers/documents_with_error_controller_spec.rb
454
483
  - spec/controllers/index_documents_controller_spec.rb
484
+ - spec/controllers/paginated_documents_controller_spec.rb
455
485
  - spec/controllers/pokemon_masters_controller_spec.rb
456
486
  - spec/controllers/pokemons_controller_spec.rb
457
487
  - spec/dummy/.ruby-version
@@ -470,6 +500,7 @@ files:
470
500
  - spec/dummy/app/controllers/documents_with_error_controller.rb
471
501
  - spec/dummy/app/controllers/games_controller.rb
472
502
  - spec/dummy/app/controllers/index_documents_controller.rb
503
+ - spec/dummy/app/controllers/paginated_documents_controller.rb
473
504
  - spec/dummy/app/controllers/pokemon_masters_controller.rb
474
505
  - spec/dummy/app/controllers/pokemons_controller.rb
475
506
  - spec/dummy/app/controllers/publishers_controller.rb
@@ -554,6 +585,7 @@ files:
554
585
  - spec/integration/yard/controllers/games_controller_spec.rb
555
586
  - spec/lib/azeroth/decorator/hash_builder_spec.rb
556
587
  - spec/lib/azeroth/decorator/key_value_extractor_spec.rb
588
+ - spec/lib/azeroth/decorator/method_builder_spec.rb
557
589
  - spec/lib/azeroth/decorator_spec.rb
558
590
  - spec/lib/azeroth/dummy_decorator_spec.rb
559
591
  - spec/lib/azeroth/model_spec.rb
@@ -574,6 +606,7 @@ files:
574
606
  - spec/support/app/controllers/request_handler_controller.rb
575
607
  - spec/support/app/controllers/resource_builder_controller.rb
576
608
  - spec/support/app/controllers/resource_route_builder_controller.rb
609
+ - spec/support/app/workers/worker.rb
577
610
  - spec/support/factories/document.rb
578
611
  - spec/support/factories/dummy_model.rb
579
612
  - spec/support/factories/factory.rb
@@ -613,6 +646,7 @@ test_files:
613
646
  - spec/controllers/documents_controller_spec.rb
614
647
  - spec/controllers/documents_with_error_controller_spec.rb
615
648
  - spec/controllers/index_documents_controller_spec.rb
649
+ - spec/controllers/paginated_documents_controller_spec.rb
616
650
  - spec/controllers/pokemon_masters_controller_spec.rb
617
651
  - spec/controllers/pokemons_controller_spec.rb
618
652
  - spec/dummy/.ruby-version
@@ -631,6 +665,7 @@ test_files:
631
665
  - spec/dummy/app/controllers/documents_with_error_controller.rb
632
666
  - spec/dummy/app/controllers/games_controller.rb
633
667
  - spec/dummy/app/controllers/index_documents_controller.rb
668
+ - spec/dummy/app/controllers/paginated_documents_controller.rb
634
669
  - spec/dummy/app/controllers/pokemon_masters_controller.rb
635
670
  - spec/dummy/app/controllers/pokemons_controller.rb
636
671
  - spec/dummy/app/controllers/publishers_controller.rb
@@ -715,6 +750,7 @@ test_files:
715
750
  - spec/integration/yard/controllers/games_controller_spec.rb
716
751
  - spec/lib/azeroth/decorator/hash_builder_spec.rb
717
752
  - spec/lib/azeroth/decorator/key_value_extractor_spec.rb
753
+ - spec/lib/azeroth/decorator/method_builder_spec.rb
718
754
  - spec/lib/azeroth/decorator_spec.rb
719
755
  - spec/lib/azeroth/dummy_decorator_spec.rb
720
756
  - spec/lib/azeroth/model_spec.rb
@@ -735,6 +771,7 @@ test_files:
735
771
  - spec/support/app/controllers/request_handler_controller.rb
736
772
  - spec/support/app/controllers/resource_builder_controller.rb
737
773
  - spec/support/app/controllers/resource_route_builder_controller.rb
774
+ - spec/support/app/workers/worker.rb
738
775
  - spec/support/factories/document.rb
739
776
  - spec/support/factories/dummy_model.rb
740
777
  - spec/support/factories/factory.rb