apress-api 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/.drone.yml +30 -0
  3. data/.gitignore +15 -0
  4. data/.rspec +4 -0
  5. data/Appraisals +31 -0
  6. data/CHANGELOG.md +227 -0
  7. data/Gemfile +8 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +31 -0
  10. data/Rakefile +2 -0
  11. data/app/controllers/apress/api/deprecated_versions_controller.rb +15 -0
  12. data/app/controllers/apress/api/v1/callbacks_controller.rb +30 -0
  13. data/app/controllers/apress/api/v1/tokens_controller.rb +24 -0
  14. data/app/docs/schema/api/v1/types/apress/api/link.rb +29 -0
  15. data/app/docs/schema/api/v1/types/apress/api/links.rb +24 -0
  16. data/app/docs/swagger/v1/controllers/apress/api/tokens_controller.rb +64 -0
  17. data/app/docs/swagger/v1/default_responses/bad_request.rb +16 -0
  18. data/app/docs/swagger/v1/default_responses/not_found.rb +16 -0
  19. data/app/docs/swagger/v1/default_responses/unauthenticated.rb +16 -0
  20. data/app/docs/swagger/v1/default_responses/unauthorized.rb +16 -0
  21. data/app/docs/swagger/v1/default_responses/unprocessable.rb +16 -0
  22. data/app/docs/swagger/v1/default_responses/updates_locked.rb +13 -0
  23. data/app/docs/swagger/v1/models/apress/api/client.rb +53 -0
  24. data/app/docs/swagger/v1/models/apress/api/simple_error.rb +27 -0
  25. data/app/docs/swagger/v1/models/apress/api/unproccesable_error.rb +16 -0
  26. data/app/docs/swagger/v1/models/apress/api/unprocessable_error.rb +37 -0
  27. data/app/docs/swagger/v1/root.rb +28 -0
  28. data/app/interactors/apress/api/callbacks/base_callback.rb +42 -0
  29. data/app/interactors/apress/api/delayed_fire_callback.rb +25 -0
  30. data/app/jobs/apress/api/event_handler_enqueueing_job.rb +19 -0
  31. data/app/jobs/apress/api/fire_callback_job.rb +25 -0
  32. data/app/models/apress/api/client.rb +60 -0
  33. data/app/policies/apress/api/callback_policy.rb +15 -0
  34. data/app/services/apress/api/auth_service.rb +37 -0
  35. data/app/views/apress/api/shared/_exception.json.jbuilder +4 -0
  36. data/app/views/apress/api/shared/error.json.jbuilder +5 -0
  37. data/app/views/apress/api/shared/parameter_missing_errors.json.jbuilder +9 -0
  38. data/app/views/apress/api/shared/unprocessable_errors.json.jbuilder +9 -0
  39. data/app/views/apress/api/v1/clients/_client.json.jbuilder +2 -0
  40. data/app/views/apress/api/v1/tokens/create.json.jbuilder +4 -0
  41. data/apress-api.gemspec +46 -0
  42. data/config/routes.rb +17 -0
  43. data/db/migrate/20150716000000_create_api_clients.rb +38 -0
  44. data/dip.yml +48 -0
  45. data/docker-compose.development.yml +18 -0
  46. data/docker-compose.drone.yml +7 -0
  47. data/docker-compose.yml +20 -0
  48. data/lib/apress-api.rb +1 -0
  49. data/lib/apress/api.rb +25 -0
  50. data/lib/apress/api/api_controller/authentification.rb +33 -0
  51. data/lib/apress/api/api_controller/base.rb +63 -0
  52. data/lib/apress/api/api_controller/compatibility.rb +26 -0
  53. data/lib/apress/api/api_controller/pagination.rb +60 -0
  54. data/lib/apress/api/api_controller/pagination_helper.rb +55 -0
  55. data/lib/apress/api/api_controller/rescue.rb +89 -0
  56. data/lib/apress/api/api_controller/responds.rb +25 -0
  57. data/lib/apress/api/callbacks/config.rb +56 -0
  58. data/lib/apress/api/callbacks/fire_callback_error.rb +12 -0
  59. data/lib/apress/api/callbacks/integration.rb +28 -0
  60. data/lib/apress/api/callbacks/repeat_callback_error.rb +12 -0
  61. data/lib/apress/api/engine.rb +33 -0
  62. data/lib/apress/api/extensions/jbuilder/jbuilder_template.rb +41 -0
  63. data/lib/apress/api/rspec.rb +48 -0
  64. data/lib/apress/api/rspec/utils.rb +17 -0
  65. data/lib/apress/api/testing/json_matcher.rb +9 -0
  66. data/lib/apress/api/version.rb +5 -0
  67. data/lib/tasks/docs.rake +12 -0
  68. data/spec/controllers/api_controller/authentification_spec.rb +79 -0
  69. data/spec/controllers/api_controller/pagination_spec.rb +199 -0
  70. data/spec/controllers/api_controller/rescue_spec.rb +167 -0
  71. data/spec/controllers/deprecated_versions_controller_spec.rb +10 -0
  72. data/spec/controllers/v1/callbacks_controller_spec.rb +50 -0
  73. data/spec/controllers/v1/tokens_controller_spec.rb +53 -0
  74. data/spec/factories/client_factory.rb +4 -0
  75. data/spec/helpers/paginating_cache_spec.rb +72 -0
  76. data/spec/interactors/apress/api/delayed_fire_callback_spec.rb +43 -0
  77. data/spec/internal/app/integrations/error_client/fire_callback.rb +14 -0
  78. data/spec/internal/app/integrations/service_client/fire_callback.rb +7 -0
  79. data/spec/internal/app/jobs/handler_job.rb +5 -0
  80. data/spec/internal/app/jobs/second_handler_job.rb +5 -0
  81. data/spec/internal/app/models/dummy_model.rb +15 -0
  82. data/spec/internal/config/database.yml +5 -0
  83. data/spec/internal/config/environments/test.rb +5 -0
  84. data/spec/internal/config/initializers/api.rb +10 -0
  85. data/spec/internal/config/routes.rb +3 -0
  86. data/spec/internal/db/schema.rb +5 -0
  87. data/spec/internal/log/.gitignore +1 -0
  88. data/spec/jobs/apress/api/event_handler_equeueing_job_spec.rb +31 -0
  89. data/spec/jobs/apress/api/fire_callback_job_spec.rb +34 -0
  90. data/spec/lib/apress/api/callbacks/integration_spec.rb +24 -0
  91. data/spec/models/client_spec.rb +25 -0
  92. data/spec/services/auth_service_spec.rb +64 -0
  93. data/spec/spec_helper.rb +34 -0
  94. metadata +518 -0
@@ -0,0 +1,15 @@
1
+ class DummyModel < ActiveRecord::Base
2
+ include Apress::Api::Callbacks::Integration
3
+
4
+ notify_services event: 'some_event',
5
+ params: [:name],
6
+ at: [:after_save, if: :name_empty?]
7
+
8
+ notify_services event: 'dynamic_params_event',
9
+ params: ->(model) { {name: model.name + " stuff"} },
10
+ at: [:before_update]
11
+
12
+ def name_empty?
13
+ name.blank?
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ test:
2
+ adapter: postgresql
3
+ host: <%= ENV.fetch("TEST_DB_HOST", "localhost") %>
4
+ database: <%= ENV.fetch("TEST_DB_NAME", "docker") %>
5
+ username: <%= ENV.fetch("TEST_DB_USERNAME", "docker") %>
@@ -0,0 +1,5 @@
1
+ HOST = 'www.example.org'
2
+ ASSETS_HOST = 'www.example.org'
3
+
4
+ DO_NOT_REPLY = 'support@example.org'
5
+ DO_NOT_REPLY_RETURN_PATH = 'support@example.org'
@@ -0,0 +1,10 @@
1
+ Apress::Api::Callbacks::Config.add_client('service_access_id')
2
+
3
+ Apress::Api::Callbacks::Config.add_service(service: 'service', event: 'some_event')
4
+ Apress::Api::Callbacks::Config.add_service(service: 'error', event: 'some_error_event')
5
+ Apress::Api::Callbacks::Config.add_service(service: 'error', event: 'repeat_error')
6
+ Apress::Api::Callbacks::Config.add_service(service: 'service', event: 'dynamic_params_event')
7
+ Apress::Api::Callbacks::Config.add_handler(service: 'external_service', event: 'other_event', handler: 'handler_job')
8
+ Apress::Api::Callbacks::Config.add_handler(service: 'external_service',
9
+ event: 'other_event',
10
+ handler: 'second_handler_job')
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ #
3
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Schema.define do
2
+ create_table :dummy_models do |t|
3
+ t.string :name
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ *.log
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Apress::Api::EventHandlerEnqueueingJob, type: :job do
4
+ describe '#perform' do
5
+ let(:handler) { 'handler_job' }
6
+ let(:event_params) { {id: 100_500} }
7
+
8
+ it 'enqueues specified handler job' do
9
+ expect(Resque).to receive(:enqueue).with(HandlerJob, event_params)
10
+
11
+ described_class.perform(handler, event_params)
12
+ end
13
+
14
+ context 'with unknown handler job class' do
15
+ let(:handler) { 'unknown_handler_job' }
16
+
17
+ it do
18
+ expect { described_class.perform(handler, event_params) }.to raise_error(NameError)
19
+ end
20
+ end
21
+
22
+ context 'when handler job responds to enqueue method' do
23
+ it 'enqueues specified handler job' do
24
+ expect(HandlerJob).to receive(:enqueue).with(event_params)
25
+ expect(Resque).to_not receive(:enqueue).with(HandlerJob, event_params)
26
+
27
+ described_class.perform(handler, event_params)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Apress::Api::FireCallbackJob, type: :job do
4
+ let(:params) { {test: 1} }
5
+
6
+ describe '#perform' do
7
+ let(:event) { 'some_event' }
8
+ context 'when all goind well' do
9
+ it 'calls correct service' do
10
+ expect(ServiceClient::FireCallback).to receive(:call!).with(event: event, params: params)
11
+
12
+ described_class.perform("service", event, params)
13
+ end
14
+ end
15
+
16
+ context 'in case of retry error' do
17
+ let(:event) { 'some_error_event' }
18
+ it 'throws Callbacks::FireCallbackError' do
19
+ expect do
20
+ described_class.perform("error", event, params)
21
+ end.to raise_error(Apress::Api::Callbacks::FireCallbackError)
22
+ end
23
+ end
24
+
25
+ context 'in case of repeat error' do
26
+ let(:event) { 'repeat_error' }
27
+ it 'throws Callbacks::RepeatCallbackError' do
28
+ expect do
29
+ described_class.perform("error", event, params)
30
+ end.to raise_error(Apress::Api::Callbacks::RepeatCallbackError)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Apress::Api::Callbacks::Integration, type: :mixin do
4
+ describe '#notify_service' do
5
+ context 'when callback is set' do
6
+ let(:model) { DummyModel.new }
7
+ it 'calls delayed interactor' do
8
+ expect(Apress::Api::DelayedFireCallback).to receive(:call!).with(event: 'some_event', params: {name: nil})
9
+
10
+ model.save
11
+ end
12
+ end
13
+
14
+ context 'when params are lambda' do
15
+ let(:model) { DummyModel.create!(name: 'test') }
16
+ it 'calls delayed interactor' do
17
+ expect(Apress::Api::DelayedFireCallback).to \
18
+ receive(:call!).with(event: 'dynamic_params_event', params: {name: 'test_2 stuff'})
19
+
20
+ model.update_attributes(name: 'test_2')
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Apress::Api::Client do
4
+ let(:client) { create "api/client" }
5
+
6
+ describe "#regenerate_tokens" do
7
+ it "regenerates secret and refresh tokens" do
8
+ client.regenerate_tokens
9
+
10
+ expect(client.changed).
11
+ to match_array %w(secret_token secret_token_expire_at refresh_token refresh_token_expire_at)
12
+ end
13
+ end
14
+
15
+ describe "#regenerate_tokens!" do
16
+ it "regenerates secret and refresh tokens and save" do
17
+ attrs_names = %w(secret_token secret_token_expire_at refresh_token refresh_token_expire_at)
18
+ was_attrs = client.attributes.slice(*attrs_names).values
19
+ client.regenerate_tokens!
20
+
21
+ expect(client.attributes.slice(*attrs_names).values).to_not include(was_attrs)
22
+ expect(client.changed?).to be false
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+ require "rack/request"
3
+ require "rack/mock"
4
+
5
+ describe Apress::Api::AuthService do
6
+ let(:request) { Rack::Request.new(Rack::MockRequest.env_for("/", "HTTP_HOST" => "ex.com")) }
7
+ let(:service) { described_class.new(request) }
8
+ let(:client) { create "api/client" }
9
+ let(:params) { {} }
10
+
11
+ before do
12
+ allow(request).to receive(:query_parameters).and_return(params)
13
+ end
14
+
15
+ context "when client not found" do
16
+ it { expect(service.call).to be false }
17
+ end
18
+
19
+ context "when find client from headers" do
20
+ it do
21
+ ApiAuth.sign!(request, client.access_id, client.secret_token)
22
+ service.call
23
+ expect(service.client).to eq client
24
+ end
25
+ end
26
+
27
+ context "when find client from query params" do
28
+ let(:params) { {access_id: client.access_id} }
29
+
30
+ it do
31
+ service.call
32
+ expect(service.client).to eq client
33
+ end
34
+ end
35
+
36
+ context "when secret token expired" do
37
+ it do
38
+ client
39
+ Timecop.freeze(1.year.since)
40
+ ApiAuth.sign!(request, client.access_id, client.secret_token)
41
+
42
+ expect(service.call).to be false
43
+
44
+ Timecop.return
45
+ end
46
+ end
47
+
48
+ context "when not check signature" do
49
+ let(:params) { {access_id: client.access_id, check_signature: 0} }
50
+
51
+ context "when rails env production" do
52
+ it do
53
+ allow(Rails.env).to receive(:production?).and_return(true)
54
+ expect(service.call).to be false
55
+ end
56
+ end
57
+
58
+ context "when rails env not production" do
59
+ it do
60
+ expect(service.call).to be true
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,34 @@
1
+ require "bundler/setup"
2
+ require 'pry-byebug'
3
+
4
+ require "simplecov"
5
+ SimpleCov.start "rails" do
6
+ minimum_coverage 95
7
+ add_filter "/lib/apress/api/rspec"
8
+ add_filter "/lib/apress/api/testing/"
9
+ add_filter "/lib/apress/api/swagger/"
10
+ add_filter "/app/docs"
11
+ end
12
+
13
+ require "apress/api"
14
+
15
+ require 'mock_redis'
16
+ redis = MockRedis.new
17
+ Resque.redis = redis
18
+
19
+ require "factory_girl_rails"
20
+ require "timecop"
21
+ require "combustion"
22
+
23
+ Combustion.initialize! :all do
24
+ config.cache_store = :null_store if defined?(ActiveSupport::Cache::NullStore)
25
+ end
26
+
27
+ require "rails-controller-testing" if Rails::VERSION::MAJOR > 4
28
+ require "rspec/rails"
29
+
30
+ RSpec.configure do |config|
31
+ config.include FactoryGirl::Syntax::Methods
32
+
33
+ config.use_transactional_fixtures = true
34
+ end
metadata ADDED
@@ -0,0 +1,518 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: apress-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.22.0
5
+ platform: ruby
6
+ authors:
7
+ - merkushin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-08-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.1.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 6.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.1.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 6.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: pg
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: api-auth
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.3.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.3.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: oj
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 2.9.9
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2.9.9
75
+ - !ruby/object:Gem::Dependency
76
+ name: multi_json
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.11.2
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.11.2
89
+ - !ruby/object:Gem::Dependency
90
+ name: jbuilder
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 2.3.1
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 2.3.1
103
+ - !ruby/object:Gem::Dependency
104
+ name: attr_extras
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 4.4.0
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 4.4.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: swagger-core
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: 0.3.0
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 0.3.0
131
+ - !ruby/object:Gem::Dependency
132
+ name: interactor
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: pundit
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: resque-integration
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: apress-documentation
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 0.2.0
180
+ type: :runtime
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: 0.2.0
187
+ - !ruby/object:Gem::Dependency
188
+ name: bundler
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '1.7'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '1.7'
201
+ - !ruby/object:Gem::Dependency
202
+ name: rake
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '10.0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '10.0'
215
+ - !ruby/object:Gem::Dependency
216
+ name: rspec
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '3.2'
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '3.2'
229
+ - !ruby/object:Gem::Dependency
230
+ name: rspec-rails
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '3.2'
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '3.2'
243
+ - !ruby/object:Gem::Dependency
244
+ name: combustion
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: 0.5.4
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: 0.5.4
257
+ - !ruby/object:Gem::Dependency
258
+ name: appraisal
259
+ requirement: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ type: :development
265
+ prerelease: false
266
+ version_requirements: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ - !ruby/object:Gem::Dependency
272
+ name: timecop
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ">="
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">="
283
+ - !ruby/object:Gem::Version
284
+ version: '0'
285
+ - !ruby/object:Gem::Dependency
286
+ name: simplecov
287
+ requirement: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - ">="
290
+ - !ruby/object:Gem::Version
291
+ version: '0.9'
292
+ type: :development
293
+ prerelease: false
294
+ version_requirements: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - ">="
297
+ - !ruby/object:Gem::Version
298
+ version: '0.9'
299
+ - !ruby/object:Gem::Dependency
300
+ name: factory_girl_rails
301
+ requirement: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - ">="
304
+ - !ruby/object:Gem::Version
305
+ version: '4.5'
306
+ type: :development
307
+ prerelease: false
308
+ version_requirements: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - ">="
311
+ - !ruby/object:Gem::Version
312
+ version: '4.5'
313
+ - !ruby/object:Gem::Dependency
314
+ name: json-schema
315
+ requirement: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - ">="
318
+ - !ruby/object:Gem::Version
319
+ version: '0'
320
+ type: :development
321
+ prerelease: false
322
+ version_requirements: !ruby/object:Gem::Requirement
323
+ requirements:
324
+ - - ">="
325
+ - !ruby/object:Gem::Version
326
+ version: '0'
327
+ - !ruby/object:Gem::Dependency
328
+ name: test-unit
329
+ requirement: !ruby/object:Gem::Requirement
330
+ requirements:
331
+ - - ">="
332
+ - !ruby/object:Gem::Version
333
+ version: '0'
334
+ type: :development
335
+ prerelease: false
336
+ version_requirements: !ruby/object:Gem::Requirement
337
+ requirements:
338
+ - - ">="
339
+ - !ruby/object:Gem::Version
340
+ version: '0'
341
+ - !ruby/object:Gem::Dependency
342
+ name: mock_redis
343
+ requirement: !ruby/object:Gem::Requirement
344
+ requirements:
345
+ - - ">="
346
+ - !ruby/object:Gem::Version
347
+ version: '0'
348
+ type: :development
349
+ prerelease: false
350
+ version_requirements: !ruby/object:Gem::Requirement
351
+ requirements:
352
+ - - ">="
353
+ - !ruby/object:Gem::Version
354
+ version: '0'
355
+ - !ruby/object:Gem::Dependency
356
+ name: pry-byebug
357
+ requirement: !ruby/object:Gem::Requirement
358
+ requirements:
359
+ - - ">="
360
+ - !ruby/object:Gem::Version
361
+ version: '0'
362
+ type: :development
363
+ prerelease: false
364
+ version_requirements: !ruby/object:Gem::Requirement
365
+ requirements:
366
+ - - ">="
367
+ - !ruby/object:Gem::Version
368
+ version: '0'
369
+ description:
370
+ email:
371
+ - merkushin.m.s@gmail.com
372
+ executables: []
373
+ extensions: []
374
+ extra_rdoc_files: []
375
+ files:
376
+ - ".drone.yml"
377
+ - ".gitignore"
378
+ - ".rspec"
379
+ - Appraisals
380
+ - CHANGELOG.md
381
+ - Gemfile
382
+ - LICENSE.txt
383
+ - README.md
384
+ - Rakefile
385
+ - app/controllers/apress/api/deprecated_versions_controller.rb
386
+ - app/controllers/apress/api/v1/callbacks_controller.rb
387
+ - app/controllers/apress/api/v1/tokens_controller.rb
388
+ - app/docs/schema/api/v1/types/apress/api/link.rb
389
+ - app/docs/schema/api/v1/types/apress/api/links.rb
390
+ - app/docs/swagger/v1/controllers/apress/api/tokens_controller.rb
391
+ - app/docs/swagger/v1/default_responses/bad_request.rb
392
+ - app/docs/swagger/v1/default_responses/not_found.rb
393
+ - app/docs/swagger/v1/default_responses/unauthenticated.rb
394
+ - app/docs/swagger/v1/default_responses/unauthorized.rb
395
+ - app/docs/swagger/v1/default_responses/unprocessable.rb
396
+ - app/docs/swagger/v1/default_responses/updates_locked.rb
397
+ - app/docs/swagger/v1/models/apress/api/client.rb
398
+ - app/docs/swagger/v1/models/apress/api/simple_error.rb
399
+ - app/docs/swagger/v1/models/apress/api/unproccesable_error.rb
400
+ - app/docs/swagger/v1/models/apress/api/unprocessable_error.rb
401
+ - app/docs/swagger/v1/root.rb
402
+ - app/interactors/apress/api/callbacks/base_callback.rb
403
+ - app/interactors/apress/api/delayed_fire_callback.rb
404
+ - app/jobs/apress/api/event_handler_enqueueing_job.rb
405
+ - app/jobs/apress/api/fire_callback_job.rb
406
+ - app/models/apress/api/client.rb
407
+ - app/policies/apress/api/callback_policy.rb
408
+ - app/services/apress/api/auth_service.rb
409
+ - app/views/apress/api/shared/_exception.json.jbuilder
410
+ - app/views/apress/api/shared/error.json.jbuilder
411
+ - app/views/apress/api/shared/parameter_missing_errors.json.jbuilder
412
+ - app/views/apress/api/shared/unprocessable_errors.json.jbuilder
413
+ - app/views/apress/api/v1/clients/_client.json.jbuilder
414
+ - app/views/apress/api/v1/tokens/create.json.jbuilder
415
+ - apress-api.gemspec
416
+ - config/routes.rb
417
+ - db/migrate/20150716000000_create_api_clients.rb
418
+ - dip.yml
419
+ - docker-compose.development.yml
420
+ - docker-compose.drone.yml
421
+ - docker-compose.yml
422
+ - lib/apress-api.rb
423
+ - lib/apress/api.rb
424
+ - lib/apress/api/api_controller/authentification.rb
425
+ - lib/apress/api/api_controller/base.rb
426
+ - lib/apress/api/api_controller/compatibility.rb
427
+ - lib/apress/api/api_controller/pagination.rb
428
+ - lib/apress/api/api_controller/pagination_helper.rb
429
+ - lib/apress/api/api_controller/rescue.rb
430
+ - lib/apress/api/api_controller/responds.rb
431
+ - lib/apress/api/callbacks/config.rb
432
+ - lib/apress/api/callbacks/fire_callback_error.rb
433
+ - lib/apress/api/callbacks/integration.rb
434
+ - lib/apress/api/callbacks/repeat_callback_error.rb
435
+ - lib/apress/api/engine.rb
436
+ - lib/apress/api/extensions/jbuilder/jbuilder_template.rb
437
+ - lib/apress/api/rspec.rb
438
+ - lib/apress/api/rspec/utils.rb
439
+ - lib/apress/api/testing/json_matcher.rb
440
+ - lib/apress/api/version.rb
441
+ - lib/tasks/docs.rake
442
+ - spec/controllers/api_controller/authentification_spec.rb
443
+ - spec/controllers/api_controller/pagination_spec.rb
444
+ - spec/controllers/api_controller/rescue_spec.rb
445
+ - spec/controllers/deprecated_versions_controller_spec.rb
446
+ - spec/controllers/v1/callbacks_controller_spec.rb
447
+ - spec/controllers/v1/tokens_controller_spec.rb
448
+ - spec/factories/client_factory.rb
449
+ - spec/helpers/paginating_cache_spec.rb
450
+ - spec/interactors/apress/api/delayed_fire_callback_spec.rb
451
+ - spec/internal/app/integrations/error_client/fire_callback.rb
452
+ - spec/internal/app/integrations/service_client/fire_callback.rb
453
+ - spec/internal/app/jobs/handler_job.rb
454
+ - spec/internal/app/jobs/second_handler_job.rb
455
+ - spec/internal/app/models/dummy_model.rb
456
+ - spec/internal/config/database.yml
457
+ - spec/internal/config/environments/test.rb
458
+ - spec/internal/config/initializers/api.rb
459
+ - spec/internal/config/routes.rb
460
+ - spec/internal/db/schema.rb
461
+ - spec/internal/log/.gitignore
462
+ - spec/jobs/apress/api/event_handler_equeueing_job_spec.rb
463
+ - spec/jobs/apress/api/fire_callback_job_spec.rb
464
+ - spec/lib/apress/api/callbacks/integration_spec.rb
465
+ - spec/models/client_spec.rb
466
+ - spec/services/auth_service_spec.rb
467
+ - spec/spec_helper.rb
468
+ homepage: https://github.com/abak-press/apress-api
469
+ licenses:
470
+ - MIT
471
+ metadata: {}
472
+ post_install_message:
473
+ rdoc_options: []
474
+ require_paths:
475
+ - lib
476
+ required_ruby_version: !ruby/object:Gem::Requirement
477
+ requirements:
478
+ - - ">="
479
+ - !ruby/object:Gem::Version
480
+ version: '0'
481
+ required_rubygems_version: !ruby/object:Gem::Requirement
482
+ requirements:
483
+ - - ">="
484
+ - !ruby/object:Gem::Version
485
+ version: '0'
486
+ requirements: []
487
+ rubyforge_project:
488
+ rubygems_version: 2.6.1
489
+ signing_key:
490
+ specification_version: 4
491
+ summary: Apress-Api
492
+ test_files:
493
+ - spec/controllers/api_controller/authentification_spec.rb
494
+ - spec/controllers/api_controller/pagination_spec.rb
495
+ - spec/controllers/api_controller/rescue_spec.rb
496
+ - spec/controllers/deprecated_versions_controller_spec.rb
497
+ - spec/controllers/v1/callbacks_controller_spec.rb
498
+ - spec/controllers/v1/tokens_controller_spec.rb
499
+ - spec/factories/client_factory.rb
500
+ - spec/helpers/paginating_cache_spec.rb
501
+ - spec/interactors/apress/api/delayed_fire_callback_spec.rb
502
+ - spec/internal/app/integrations/error_client/fire_callback.rb
503
+ - spec/internal/app/integrations/service_client/fire_callback.rb
504
+ - spec/internal/app/jobs/handler_job.rb
505
+ - spec/internal/app/jobs/second_handler_job.rb
506
+ - spec/internal/app/models/dummy_model.rb
507
+ - spec/internal/config/database.yml
508
+ - spec/internal/config/environments/test.rb
509
+ - spec/internal/config/initializers/api.rb
510
+ - spec/internal/config/routes.rb
511
+ - spec/internal/db/schema.rb
512
+ - spec/internal/log/.gitignore
513
+ - spec/jobs/apress/api/event_handler_equeueing_job_spec.rb
514
+ - spec/jobs/apress/api/fire_callback_job_spec.rb
515
+ - spec/lib/apress/api/callbacks/integration_spec.rb
516
+ - spec/models/client_spec.rb
517
+ - spec/services/auth_service_spec.rb
518
+ - spec/spec_helper.rb