wcc-api 0.1.0 → 0.5.0

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.
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FixturesHelper
4
+ def load_fixture(file_name)
5
+ file = "#{File.dirname(__FILE__)}/../fixtures/#{file_name}"
6
+ return File.read(file) if File.exist?(file)
7
+ end
8
+ end
@@ -0,0 +1,296 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'wcc/api/rest_client'
5
+
6
+ RSpec.describe WCC::API::RestClient do
7
+ describe 'initialize' do
8
+ after do
9
+ described_class::ADAPTERS = {
10
+ typhoeus: ['typhoeus', '~> 1.0'],
11
+ http: ['http', '> 1.0', '< 3.0']
12
+ }.freeze
13
+ end
14
+
15
+ it 'fails to load when no adapter gem found' do
16
+ expect do
17
+ described_class::ADAPTERS = {
18
+ asdf: ['asdf', '~> 1.0']
19
+ }.freeze
20
+
21
+ described_class.new(
22
+ api_url: 'https://cdn.contentful.com'
23
+ )
24
+ end.to raise_error(ArgumentError)
25
+ end
26
+
27
+ it 'fails to load when gem is wrong version' do
28
+ expect do
29
+ described_class::ADAPTERS = {
30
+ http: ['http', '< 1.0']
31
+ }.freeze
32
+
33
+ described_class.new(
34
+ api_url: 'https://cdn.contentful.com'
35
+ )
36
+ end.to raise_error(ArgumentError)
37
+ end
38
+
39
+ it 'fails to load when adapter is not invokeable' do
40
+ described_class::ADAPTERS = {}.freeze
41
+
42
+ expect do
43
+ described_class::ADAPTERS = {
44
+ http: ['http', '< 1.0']
45
+ }.freeze
46
+
47
+ described_class.new(
48
+ api_url: 'https://cdn.contentful.com',
49
+ adapter: :whoopsie
50
+ )
51
+ end.to raise_error(ArgumentError)
52
+ end
53
+ end
54
+
55
+ described_class::ADAPTERS.keys.each do |adapter|
56
+ context "with #{adapter} adapter" do
57
+ subject(:client) do
58
+ described_class.new(
59
+ api_url: 'https://cdn.contentful.com/spaces/1234',
60
+ adapter: adapter
61
+ )
62
+ end
63
+
64
+ let(:entries) do
65
+ ::JSON.parse(load_fixture('contentful/entries.json'))
66
+ end
67
+
68
+ describe 'get' do
69
+ it 'gets entries with query params' do
70
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries?limit=2')
71
+ .to_return(body: load_fixture('contentful/entries.json'))
72
+
73
+ # act
74
+ resp = client.get('entries', limit: 2)
75
+
76
+ # assert
77
+ resp.assert_ok!
78
+ expect(resp.code).to eq(200)
79
+ expect(resp.to_json['items'].map { |i| i.dig('sys', 'id') }).to eq(
80
+ %w[6xJzDTX2HCo0u4QKIuGCOu 5yozzvgItUSYu4eI8yQ0ee]
81
+ )
82
+ end
83
+
84
+ it 'can query entries with query param' do
85
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
86
+ .with(query: {
87
+ 'content_type' => 'menuButton',
88
+ 'fields.text' => 'Ministries'
89
+ })
90
+ .to_return(body: load_fixture('contentful/entries.json'))
91
+
92
+ # act
93
+ resp = client.get('entries',
94
+ content_type: 'menuButton',
95
+ 'fields.text' => 'Ministries')
96
+
97
+ # assert
98
+ resp.assert_ok!
99
+ expect(resp.code).to eq(200)
100
+ expect(resp.to_json['items'].map { |i| i.dig('sys', 'id') }).to eq(
101
+ %w[6xJzDTX2HCo0u4QKIuGCOu 5yozzvgItUSYu4eI8yQ0ee]
102
+ )
103
+ end
104
+
105
+ it 'follows redirects' do
106
+ stub_request(:get, 'http://jtj.watermark.org/api')
107
+ .to_return(status: 301, headers: { 'Location' => 'https://jtj.watermark.org/api' })
108
+ stub_request(:get, 'https://jtj.watermark.org/api')
109
+ .to_return(body: '{ "links": { "entries": "/entries" } }')
110
+
111
+ client = described_class.new(
112
+ api_url: 'http://jtj.watermark.org/'
113
+ )
114
+
115
+ # act
116
+ resp = client.get('/api')
117
+
118
+ # assert
119
+ resp.assert_ok!
120
+ expect(resp.to_json['links']).to_not be_nil
121
+ end
122
+
123
+ it 'paginates directly when block given' do
124
+ page1 = entries.merge('total' => 7)
125
+ page2 = entries.merge('total' => 7, 'skip' => 2)
126
+ page3 = entries.merge('total' => 7, 'skip' => 4)
127
+ page4 = entries.merge('total' => 7, 'skip' => 6)
128
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
129
+ .with(query: { 'limit' => 2 })
130
+ .to_return(body: page1.to_json)
131
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
132
+ .with(query: { 'limit' => 2, 'skip' => 2 })
133
+ .to_return(body: page2.to_json)
134
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
135
+ .with(query: { 'limit' => 2, 'skip' => 4 })
136
+ .to_return(body: page3.to_json)
137
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
138
+ .with(query: { 'limit' => 2, 'skip' => 6 })
139
+ .to_return(body: page4.to_json)
140
+
141
+ # act
142
+ resp = client.get('entries', limit: 2)
143
+
144
+ # assert
145
+ resp.assert_ok!
146
+ num_pages = 0
147
+ resp.each_page do |page|
148
+ expect(page.to_json['items'].length).to be <= 2
149
+ num_pages += 1
150
+ end
151
+ expect(num_pages).to eq(4)
152
+ end
153
+
154
+ it 'does lazy pagination' do
155
+ page1 = entries.merge('total' => 7)
156
+ page2 = entries.merge('total' => 7, 'skip' => 2)
157
+ page3 = entries.merge('total' => 7, 'skip' => 4)
158
+ page4 = entries.merge('total' => 7, 'skip' => 6, 'items' => [entries['items'][0]])
159
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
160
+ .with(query: { 'limit' => 2 })
161
+ .to_return(body: page1.to_json)
162
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
163
+ .with(query: { 'limit' => 2, 'skip' => 2 })
164
+ .to_return(body: page2.to_json)
165
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
166
+ .with(query: { 'limit' => 2, 'skip' => 4 })
167
+ .to_return(body: page3.to_json)
168
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
169
+ .with(query: { 'limit' => 2, 'skip' => 6 })
170
+ .to_return(body: page4.to_json)
171
+
172
+ # act
173
+ resp = client.get('entries', limit: 2)
174
+
175
+ # assert
176
+ resp.assert_ok!
177
+ pages = resp.each_page
178
+ expect(pages).to be_a(Enumerator::Lazy)
179
+ pages =
180
+ pages.map do |page|
181
+ expect(page.to_json['items'].length).to be <= 2
182
+ page.to_json['items']
183
+ end
184
+ pages = pages.force
185
+ expect(pages.length).to eq(4)
186
+ expect(pages.flatten.map { |c| c.dig('sys', 'id') })
187
+ .to eq(%w[
188
+ 6xJzDTX2HCo0u4QKIuGCOu
189
+ 5yozzvgItUSYu4eI8yQ0ee
190
+ 6xJzDTX2HCo0u4QKIuGCOu
191
+ 5yozzvgItUSYu4eI8yQ0ee
192
+ 6xJzDTX2HCo0u4QKIuGCOu
193
+ 5yozzvgItUSYu4eI8yQ0ee
194
+ 6xJzDTX2HCo0u4QKIuGCOu
195
+ ])
196
+ end
197
+
198
+ it 'does not paginate if only the first page is taken' do
199
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
200
+ .with(query: { 'limit' => 2 })
201
+ .to_return(body: load_fixture('contentful/entries.json'))
202
+
203
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
204
+ .with(query: { 'limit' => 2, 'skip' => 2 })
205
+ .to_raise(StandardError.new('Should not execute request for second page'))
206
+
207
+ # act
208
+ resp = client.get('entries', limit: 2)
209
+
210
+ # assert
211
+ resp.assert_ok!
212
+ items = resp.items.take(2)
213
+ expect(items.map { |c| c.dig('sys', 'id') }.force)
214
+ .to eq(%w[
215
+ 6xJzDTX2HCo0u4QKIuGCOu
216
+ 5yozzvgItUSYu4eI8yQ0ee
217
+ ])
218
+ end
219
+
220
+ it 'memoizes pages' do
221
+ page1 = entries.merge('total' => 4)
222
+ page2 = entries.merge('total' => 4, 'skip' => 2)
223
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
224
+ .with(query: { 'limit' => 2 })
225
+ .to_return(body: page1.to_json)
226
+ .times(1)
227
+ stub_request(:get, 'https://cdn.contentful.com/spaces/1234/entries')
228
+ .with(query: { 'limit' => 2, 'skip' => 2 })
229
+ .to_return(body: page2.to_json)
230
+ .times(1)
231
+
232
+ # act
233
+ resp = client.get('entries', limit: 2)
234
+
235
+ # assert
236
+ resp.assert_ok!
237
+ # first pagination
238
+ expect(resp.items.count).to eq(4)
239
+ # should be memoized
240
+ expect(resp.items.map { |c| c.dig('sys', 'id') }.force)
241
+ .to eq(%w[
242
+ 6xJzDTX2HCo0u4QKIuGCOu
243
+ 5yozzvgItUSYu4eI8yQ0ee
244
+ 6xJzDTX2HCo0u4QKIuGCOu
245
+ 5yozzvgItUSYu4eI8yQ0ee
246
+ ])
247
+ end
248
+ end
249
+
250
+ describe 'post' do
251
+ it 'performs a post with body' do
252
+ stub_request(:post, 'https://cdn.contentful.com/spaces/1234/entries')
253
+ .with(body: '{"test":"data"}')
254
+ .to_return(status: 204)
255
+
256
+ # act
257
+ resp = client.post('entries', { 'test' => 'data' })
258
+
259
+ # assert
260
+ resp.assert_ok!
261
+ expect(resp.status).to eq(204)
262
+ end
263
+ end
264
+
265
+ describe 'put' do
266
+ it 'performs a put with body' do
267
+ stub_request(:put, 'https://cdn.contentful.com/spaces/1234/entries/123')
268
+ .with(body: '{"test":"data"}')
269
+ .to_return(body: '{"test":"data"}')
270
+
271
+ # act
272
+ resp = client.put('entries/123', { 'test' => 'data' })
273
+
274
+ # assert
275
+ resp.assert_ok!
276
+ expect(resp.status).to eq(200)
277
+ expect(resp.body).to eq({ 'test' => 'data' })
278
+ end
279
+ end
280
+
281
+ describe 'delete' do
282
+ it 'performs a delete' do
283
+ stub_request(:delete, 'https://cdn.contentful.com/spaces/1234/entries/123')
284
+ .to_return(status: 204)
285
+
286
+ # act
287
+ resp = client.delete('entries/123')
288
+
289
+ # assert
290
+ resp.assert_ok!
291
+ expect(resp.status).to eq(204)
292
+ end
293
+ end
294
+ end
295
+ end
296
+ end
@@ -1,25 +1,38 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'wcc/api/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "wcc-api"
8
+ spec.name = 'wcc-api'
8
9
  spec.version = WCC::API::VERSION
9
- spec.authors = ["Watermark Dev Team"]
10
- spec.email = ["dev@watermark.org"]
11
- spec.summary = %q{Holds common code used in our applications that host APIs.}
12
- spec.description = %q{holds common code used in our applications that host APIs.}
13
- spec.homepage = "https://github.com/watermarkchurch/wcc-api"
14
- spec.license = "MIT"
10
+ spec.authors = ['Watermark Dev']
11
+ spec.email = ['dev@watermark.org']
12
+ spec.summary =
13
+ spec.description = 'Holds common code used in our applications that host ' \
14
+ 'APIs and those that consume them.'
15
+ spec.homepage = 'https://github.com/watermarkchurch/wcc-api'
16
+ spec.license = 'MIT'
15
17
 
16
18
  spec.files = `git ls-files -z`.split("\x0")
17
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
20
22
 
21
- spec.add_dependency "wcc-base"
23
+ spec.add_dependency 'wcc-base'
22
24
 
23
- spec.add_development_dependency "bundler", "~> 1.6"
24
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency 'bundler', '~> 1.6'
26
+ spec.add_development_dependency 'dotenv', '~> 0.10.0'
27
+ spec.add_development_dependency 'faraday', '~> 0.9'
28
+ spec.add_development_dependency 'guard', '~> 2.15'
29
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
30
+ spec.add_development_dependency 'guard-rubocop', '~> 1.3'
31
+ spec.add_development_dependency 'httplog', '~> 1.0'
32
+ spec.add_development_dependency 'rake', '~> 12.3'
33
+ spec.add_development_dependency 'rspec', '~> 3.3'
34
+ spec.add_development_dependency 'rspec_junit_formatter', '~> 0.3.0'
35
+ spec.add_development_dependency 'rubocop', '0.69.0'
36
+ spec.add_development_dependency 'typhoeus', '~> 1.3'
37
+ spec.add_development_dependency 'webmock', '~> 3.0'
25
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wcc-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
- - Watermark Dev Team
8
- autorequire:
7
+ - Watermark Dev
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-12 00:00:00.000000000 Z
11
+ date: 2020-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: wcc-base
@@ -38,48 +38,224 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dotenv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.10.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.15'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.15'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '4.7'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '4.7'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.3'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: httplog
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
41
125
  - !ruby/object:Gem::Dependency
42
126
  name: rake
43
127
  requirement: !ruby/object:Gem::Requirement
44
128
  requirements:
45
129
  - - "~>"
46
130
  - !ruby/object:Gem::Version
47
- version: '10.0'
131
+ version: '12.3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '12.3'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.3'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rspec_junit_formatter
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.3.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.3.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 0.69.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 0.69.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: typhoeus
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.3'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.3'
195
+ - !ruby/object:Gem::Dependency
196
+ name: webmock
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '3.0'
48
202
  type: :development
49
203
  prerelease: false
50
204
  version_requirements: !ruby/object:Gem::Requirement
51
205
  requirements:
52
206
  - - "~>"
53
207
  - !ruby/object:Gem::Version
54
- version: '10.0'
55
- description: holds common code used in our applications that host APIs.
208
+ version: '3.0'
209
+ description: Holds common code used in our applications that host APIs and those that
210
+ consume them.
56
211
  email:
57
212
  - dev@watermark.org
58
- executables: []
213
+ executables:
214
+ - rspec
59
215
  extensions: []
60
216
  extra_rdoc_files: []
61
217
  files:
218
+ - ".circleci/config.yml"
219
+ - ".env.example"
62
220
  - ".gitignore"
221
+ - ".rspec"
222
+ - ".rubocop.yml"
223
+ - ".rubocop_todo.yml"
63
224
  - Gemfile
225
+ - Guardfile
64
226
  - LICENSE.txt
65
227
  - README.md
66
228
  - Rakefile
229
+ - bin/rspec
67
230
  - lib/wcc/api.rb
231
+ - lib/wcc/api/active_record_shim.rb
68
232
  - lib/wcc/api/base_query.rb
233
+ - lib/wcc/api/controller_helpers.rb
69
234
  - lib/wcc/api/json.rb
70
235
  - lib/wcc/api/json/pagination.rb
71
236
  - lib/wcc/api/railtie.rb
237
+ - lib/wcc/api/rest_client.rb
238
+ - lib/wcc/api/rest_client/api_error.rb
239
+ - lib/wcc/api/rest_client/builder.rb
240
+ - lib/wcc/api/rest_client/http_adapter.rb
241
+ - lib/wcc/api/rest_client/response.rb
242
+ - lib/wcc/api/rest_client/typhoeus_adapter.rb
72
243
  - lib/wcc/api/rspec.rb
244
+ - lib/wcc/api/rspec/cache_header_examples.rb
73
245
  - lib/wcc/api/rspec/collection_matchers.rb
74
246
  - lib/wcc/api/rspec/pagination_examples.rb
75
247
  - lib/wcc/api/version.rb
76
248
  - lib/wcc/api/view_helpers.rb
249
+ - spec/fixtures/contentful/entries.json
250
+ - spec/spec_helper.rb
251
+ - spec/support/fixtures_helper.rb
252
+ - spec/wcc/api/rest_client_spec.rb
77
253
  - wcc-api.gemspec
78
254
  homepage: https://github.com/watermarkchurch/wcc-api
79
255
  licenses:
80
256
  - MIT
81
257
  metadata: {}
82
- post_install_message:
258
+ post_install_message:
83
259
  rdoc_options: []
84
260
  require_paths:
85
261
  - lib
@@ -94,9 +270,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
270
  - !ruby/object:Gem::Version
95
271
  version: '0'
96
272
  requirements: []
97
- rubyforge_project:
98
- rubygems_version: 2.4.2
99
- signing_key:
273
+ rubyforge_project:
274
+ rubygems_version: 2.5.2.3
275
+ signing_key:
100
276
  specification_version: 4
101
- summary: Holds common code used in our applications that host APIs.
102
- test_files: []
277
+ summary: Holds common code used in our applications that host APIs and those that
278
+ consume them.
279
+ test_files:
280
+ - spec/fixtures/contentful/entries.json
281
+ - spec/spec_helper.rb
282
+ - spec/support/fixtures_helper.rb
283
+ - spec/wcc/api/rest_client_spec.rb