shipcloud 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +62 -0
  3. data/.rubocop.yml +310 -313
  4. data/.ruby-version +1 -1
  5. data/CHANGELOG.md +21 -4
  6. data/Gemfile +2 -1
  7. data/README.md +3 -1
  8. data/Rakefile +5 -4
  9. data/bin/setup +7 -0
  10. data/lib/shipcloud/address.rb +2 -0
  11. data/lib/shipcloud/base.rb +5 -5
  12. data/lib/shipcloud/carrier.rb +2 -0
  13. data/lib/shipcloud/operations/all.rb +2 -0
  14. data/lib/shipcloud/operations/create.rb +3 -1
  15. data/lib/shipcloud/operations/delete.rb +2 -0
  16. data/lib/shipcloud/operations/find.rb +3 -1
  17. data/lib/shipcloud/operations/update.rb +19 -13
  18. data/lib/shipcloud/order.rb +15 -0
  19. data/lib/shipcloud/pickup_request.rb +2 -0
  20. data/lib/shipcloud/request/base.rb +2 -0
  21. data/lib/shipcloud/request/connection.rb +11 -3
  22. data/lib/shipcloud/request/info.rb +6 -5
  23. data/lib/shipcloud/shipcloud_error.rb +7 -0
  24. data/lib/shipcloud/shipment.rb +5 -2
  25. data/lib/shipcloud/shipment_quote.rb +2 -0
  26. data/lib/shipcloud/tracker.rb +1 -0
  27. data/lib/shipcloud/version.rb +3 -1
  28. data/lib/shipcloud/webhook.rb +2 -0
  29. data/lib/shipcloud.rb +1 -0
  30. data/shipcloud.gemspec +7 -6
  31. data/spec/shipcloud/address_spec.rb +66 -42
  32. data/spec/shipcloud/carrier_spec.rb +53 -52
  33. data/spec/shipcloud/order_spec.rb +188 -0
  34. data/spec/shipcloud/pickup_request_spec.rb +14 -13
  35. data/spec/shipcloud/request/base_spec.rb +3 -2
  36. data/spec/shipcloud/request/connection_spec.rb +1 -0
  37. data/spec/shipcloud/shipcloud_error_spec.rb +8 -7
  38. data/spec/shipcloud/shipment_quote_spec.rb +5 -4
  39. data/spec/shipcloud/shipment_spec.rb +135 -78
  40. data/spec/shipcloud/webhooks_spec.rb +5 -4
  41. data/spec/shipcloud_spec.rb +5 -2
  42. data/spec/spec_helper.rb +3 -2
  43. metadata +22 -21
  44. data/.hound.yml +0 -12
  45. data/.travis.yml +0 -27
  46. data/install-cc-test-reporter.sh +0 -4
@@ -1,71 +1,21 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
2
3
 
3
4
  describe Shipcloud::Shipment do
4
- let(:valid_attributes) do
5
- {
6
- to: {
7
- company: 'shipcloud GmbH',
8
- first_name: 'Max',
9
- last_name: 'Mustermann',
10
- street: 'Musterallee',
11
- street_no: '43',
12
- city: 'Berlin',
13
- zip_code: '10000',
14
- },
15
- carrier: 'dhl',
16
- package: {
17
- weight: 2.5,
18
- length: 40,
19
- width: 20,
20
- height: 20
21
- },
22
- pickup: {
23
- pickup_time: {
24
- earliest: "2015-09-15T09:00:00+02:00",
25
- latest: "2015-09-15T18:00:00+02:00"
26
- },
27
- pickup_address: {
28
- company: "Sender Ltd.",
29
- first_name: "Jane",
30
- last_name: "Doe",
31
- street: "Musterstraße",
32
- street_no: "42",
33
- zip_code: "54321",
34
- city: "Musterstadt",
35
- country: "DE"
36
- },
37
- },
38
- metadata: {
39
- product: {
40
- name: "foo"
41
- },
42
- category: {
43
- id: "123456",
44
- name: "bar"
45
- }
46
- },
47
- customs_declaration: {
48
- id: "123456",
49
- contents_type: "commercial_goods",
50
- },
51
- }
52
- end
53
-
54
- let(:shipment) {
55
- Shipcloud::Shipment.new(valid_attributes)
56
- }
57
-
58
5
  describe "#initialize" do
59
6
  it "initializes all attributes correctly" do
60
- expect(shipment.to[:company]).to eq 'shipcloud GmbH'
61
- expect(shipment.to[:first_name]).to eq 'Max'
62
- expect(shipment.to[:last_name]).to eq 'Mustermann'
63
- expect(shipment.to[:street]).to eq 'Musterallee'
64
- expect(shipment.to[:street_no]).to eq '43'
65
- expect(shipment.to[:city]).to eq 'Berlin'
66
- expect(shipment.to[:zip_code]).to eq '10000'
7
+ shipment = Shipcloud::Shipment.new(valid_attributes)
8
+
9
+ expect(shipment.to[:company]).to eq "shipcloud GmbH"
10
+ expect(shipment.to[:first_name]).to eq "Max"
11
+ expect(shipment.to[:last_name]).to eq "Mustermann"
12
+ expect(shipment.to[:street]).to eq "Musterallee"
13
+ expect(shipment.to[:street_no]).to eq "43"
14
+ expect(shipment.to[:city]).to eq "Berlin"
15
+ expect(shipment.to[:zip_code]).to eq "10000"
67
16
 
68
- expect(shipment.carrier).to eq 'dhl'
17
+ expect(shipment.carrier).to eq "dhl"
18
+ expect(shipment.service).to eq "standard"
69
19
 
70
20
  expect(shipment.package[:weight]).to eq 2.5
71
21
  expect(shipment.package[:length]).to eq 40
@@ -85,17 +35,33 @@ describe Shipcloud::Shipment do
85
35
 
86
36
  expect(shipment.customs_declaration[:id]).to eq "123456"
87
37
  expect(shipment.customs_declaration[:contents_type]).to eq "commercial_goods"
38
+ expect(shipment.additional_services.first[:name]).to eq "cash_on_delivery"
39
+ expect(shipment.additional_services.first[:properties][:amount]).to eq 123.45
40
+ expect(shipment.additional_services.first[:properties][:currency]).to eq "EUR"
41
+ expect(
42
+ shipment.additional_services.first[:properties][:bank_account_holder],
43
+ ).to eq "Max Mustermann"
44
+ expect(shipment.additional_services.first[:properties][:bank_name]).to eq "Musterbank"
45
+ expect(
46
+ shipment.additional_services.first[:properties][:bank_account_number],
47
+ ).to eq "DE12500105170648489890"
48
+ expect(shipment.additional_services.first[:properties][:bank_code]).to eq "BENEDEPPYYY"
49
+ expect(
50
+ shipment.additional_services.first[:properties][:reference1],
51
+ ).to eq "reason for transfer"
88
52
  end
89
53
 
90
54
  it "initializes the metadata correctly" do
55
+ shipment = Shipcloud::Shipment.new(valid_attributes)
56
+
91
57
  metadata = {
92
58
  category: {
93
59
  id: "123456",
94
- name: "bar"
60
+ name: "bar",
95
61
  },
96
62
  product: {
97
- name: "foo"
98
- }
63
+ name: "foo",
64
+ },
99
65
  }
100
66
 
101
67
  expect(shipment.metadata).to eq metadata
@@ -124,7 +90,8 @@ describe Shipcloud::Shipment do
124
90
  end
125
91
 
126
92
  describe ".find" do
127
- it "makes a new GET request using the correct API endpoint to receive a specific subscription" do
93
+ it "makes a new GET request using the correct API endpoint " \
94
+ "to receive a specific subscription" do
128
95
  expect(Shipcloud).to receive(:request).
129
96
  with(:get, "shipments/123", {}, api_key: nil, affiliate_id: nil).
130
97
  and_return("id" => "123")
@@ -226,6 +193,29 @@ describe Shipcloud::Shipment do
226
193
  end
227
194
  end
228
195
 
196
+ describe "#update" do
197
+ it "makes a new PUT request using the correct API endpoint" do
198
+ expect(Shipcloud).to receive(:request).
199
+ with(:put, "shipments/123", { carrier: "ups" }, api_key: nil, affiliate_id: nil).
200
+ and_return("data" => {})
201
+
202
+ shipment = Shipcloud::Shipment.new(id: "123")
203
+
204
+ shipment.update(carrier: "ups")
205
+ end
206
+
207
+ it "uses the affiliate ID provided for the request" do
208
+ expect(Shipcloud).to receive(:request).
209
+ with(
210
+ :put, "shipments/123", { carrier: "ups" }, api_key: nil, affiliate_id: "affiliate_id"
211
+ ).and_return("data" => {})
212
+
213
+ shipment = Shipcloud::Shipment.new(id: "123")
214
+
215
+ shipment.update({ carrier: "ups" }, affiliate_id: "affiliate_id")
216
+ end
217
+ end
218
+
229
219
  def stub_shipments_requests(affiliate_id: nil)
230
220
  allow(Shipcloud).to receive(:request).
231
221
  with(:get, "shipments", {}, api_key: nil, affiliate_id: affiliate_id).
@@ -234,7 +224,8 @@ describe Shipcloud::Shipment do
234
224
 
235
225
  def shipments_array
236
226
  [
237
- { "id" => "86afb143f9c9c0cfd4eb7a7c26a5c616585a6271",
227
+ {
228
+ "id" => "86afb143f9c9c0cfd4eb7a7c26a5c616585a6271",
238
229
  "carrier_tracking_no" => "43128000105",
239
230
  "carrier" => "hermes",
240
231
  "service" => "standard",
@@ -248,7 +239,7 @@ describe Shipcloud::Shipment do
248
239
  "street_no" => "1",
249
240
  "zip_code" => "12345",
250
241
  "city" => "Hamburg",
251
- "country" => "DE"
242
+ "country" => "DE",
252
243
  },
253
244
  "from" => {
254
245
  "company" => "webionate GmbH",
@@ -257,17 +248,18 @@ describe Shipcloud::Shipment do
257
248
  "street_no" => "35a",
258
249
  "zip_code" => "22175",
259
250
  "city" => "Hamburg",
260
- "country" => "DE"
251
+ "country" => "DE",
261
252
  },
262
253
  "packages" => {
263
254
  "id" => "be81573799958587ae891b983aabf9c4089fc462",
264
255
  "length" => 10.0,
265
256
  "width" => 10.0,
266
257
  "height" => 10.0,
267
- "weight" => 1.5
268
- }
258
+ "weight" => 1.5,
259
+ },
269
260
  },
270
- { "id" => "be81573799958587ae891b983aabf9c4089fc462",
261
+ {
262
+ "id" => "be81573799958587ae891b983aabf9c4089fc462",
271
263
  "carrier_tracking_no" => "1Z12345E1305277940",
272
264
  "carrier" => "ups",
273
265
  "service" => "standard",
@@ -281,7 +273,7 @@ describe Shipcloud::Shipment do
281
273
  "street_no" => "57",
282
274
  "zip_code" => "22081",
283
275
  "city" => "Hamburg",
284
- "country" => "DE"
276
+ "country" => "DE",
285
277
  },
286
278
  "from" => {
287
279
  "company" => "webionate GmbH",
@@ -290,16 +282,81 @@ describe Shipcloud::Shipment do
290
282
  "street_no" => "35a",
291
283
  "zip_code" => "22175",
292
284
  "city" => "Hamburg",
293
- "country" => "DE"
285
+ "country" => "DE",
294
286
  },
295
287
  "packages" => {
296
288
  "id" => "74d4f1fc193d8a7ca542d1ee4e2021f3ddb82242",
297
289
  "length" => 15.0,
298
290
  "width" => 20.0,
299
291
  "height" => 10.0,
300
- "weight" => 2.0
301
- }
302
- }
292
+ "weight" => 2.0,
293
+ },
294
+ },
303
295
  ]
304
296
  end
297
+
298
+ def valid_attributes
299
+ {
300
+ to: {
301
+ company: "shipcloud GmbH",
302
+ first_name: "Max",
303
+ last_name: "Mustermann",
304
+ street: "Musterallee",
305
+ street_no: "43",
306
+ city: "Berlin",
307
+ zip_code: "10000",
308
+ },
309
+ carrier: "dhl",
310
+ service: "standard",
311
+ package: {
312
+ weight: 2.5,
313
+ length: 40,
314
+ width: 20,
315
+ height: 20,
316
+ },
317
+ pickup: {
318
+ pickup_time: {
319
+ earliest: "2015-09-15T09:00:00+02:00",
320
+ latest: "2015-09-15T18:00:00+02:00",
321
+ },
322
+ pickup_address: {
323
+ company: "Sender Ltd.",
324
+ first_name: "Jane",
325
+ last_name: "Doe",
326
+ street: "Musterstraße",
327
+ street_no: "42",
328
+ zip_code: "54321",
329
+ city: "Musterstadt",
330
+ country: "DE",
331
+ },
332
+ },
333
+ metadata: {
334
+ product: {
335
+ name: "foo",
336
+ },
337
+ category: {
338
+ id: "123456",
339
+ name: "bar",
340
+ },
341
+ },
342
+ customs_declaration: {
343
+ id: "123456",
344
+ contents_type: "commercial_goods",
345
+ },
346
+ additional_services: [
347
+ {
348
+ name: "cash_on_delivery",
349
+ properties: {
350
+ amount: 123.45,
351
+ currency: "EUR",
352
+ bank_account_holder: "Max Mustermann",
353
+ bank_name: "Musterbank",
354
+ bank_account_number: "DE12500105170648489890",
355
+ bank_code: "BENEDEPPYYY",
356
+ reference1: "reason for transfer",
357
+ },
358
+ },
359
+ ],
360
+ }
361
+ end
305
362
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  require "spec_helper"
2
3
 
3
4
  describe Shipcloud::Webhook do
4
5
  valid_attributes = {
5
6
  id: "583cfd8b-77c7-4447-a3a0-1568bb9cc553",
6
7
  url: "https://example.com/webhook",
7
- event_types: ["shipment.tracking.delayed", "shipment.tracking.delivered"]
8
+ event_types: ["shipment.tracking.delayed", "shipment.tracking.delivered"],
8
9
  }
9
10
 
10
11
  describe "#initialize" do
@@ -126,14 +127,14 @@ describe Shipcloud::Webhook do
126
127
  "id" => "583cfd8b-77c7-4447-a3a0-1568bb9cc553",
127
128
  "url" => "https://example.com/webhook",
128
129
  "event_types" => ["shipment.tracking.delayed", "shipment.tracking.delivered"],
129
- "deactivated" => false
130
+ "deactivated" => false,
130
131
  },
131
132
  {
132
133
  "id" => "e0ff4250-6c8e-494d-a069-afd9d566e372",
133
134
  "url" => "https://example.com/webhook",
134
135
  "event_types" => ["shipment.tracking.delayed", "shipment.tracking.delivered"],
135
- "deactivated" => false
136
- }
136
+ "deactivated" => false,
137
+ },
137
138
  ]
138
139
  end
139
140
  end
@@ -1,16 +1,19 @@
1
+ # frozen_string_literal: true
1
2
  require "spec_helper"
2
3
 
3
4
  describe Shipcloud do
4
5
  describe ".request" do
5
6
  context "given no api key exists" do
6
7
  it "raises an authentication error" do
7
- expect { Shipcloud.request(:get, "clients", {}) }.to raise_error(Shipcloud::AuthenticationError)
8
+ expect do
9
+ Shipcloud.request(:get, "clients", {})
10
+ end.to raise_error(Shipcloud::AuthenticationError)
8
11
  end
9
12
  end
10
13
 
11
14
  context "with an invalid api key" do
12
15
  before(:each) do
13
- WebMock.stub_request(:any, /#{Shipcloud.configuration.api_base}/).to_return(:body => "{}")
16
+ WebMock.stub_request(:any, /#{Shipcloud.configuration.api_base}/).to_return(body: "{}")
14
17
  Shipcloud.api_key = "your-api-key"
15
18
  end
16
19
 
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  require "simplecov"
2
3
  SimpleCov.start
3
4
 
4
5
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
6
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
6
- require 'shipcloud'
7
- require 'rspec'
7
+ require "shipcloud"
8
+ require "rspec"
8
9
  require "webmock/rspec"
9
10
  require "pry"
10
11
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shipcloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sthollmann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-28 00:00:00.000000000 Z
11
+ date: 2023-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '12.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '12.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,42 +72,42 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.71.0
75
+ version: 1.10.0
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: 0.71.0
82
+ version: 1.10.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rubocop-performance
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 1.7.0
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: '0'
96
+ version: 1.7.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: simplecov
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 0.21.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: 0.21.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: webmock
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -125,25 +125,23 @@ dependencies:
125
125
  description: A wrapper for the shipcloud API. Fore more details visit https://developers.shipcloud.io/
126
126
  email:
127
127
  - stefan@shipcloud.io
128
- executables:
129
- - rubocop
128
+ executables: []
130
129
  extensions: []
131
130
  extra_rdoc_files: []
132
131
  files:
132
+ - ".circleci/config.yml"
133
133
  - ".codeclimate.yml"
134
134
  - ".gitignore"
135
- - ".hound.yml"
136
135
  - ".rspec"
137
136
  - ".rubocop.yml"
138
137
  - ".ruby-version"
139
- - ".travis.yml"
140
138
  - CHANGELOG.md
141
139
  - Gemfile
142
140
  - LICENSE.txt
143
141
  - README.md
144
142
  - Rakefile
145
143
  - bin/rubocop
146
- - install-cc-test-reporter.sh
144
+ - bin/setup
147
145
  - lib/shipcloud.rb
148
146
  - lib/shipcloud/address.rb
149
147
  - lib/shipcloud/base.rb
@@ -153,6 +151,7 @@ files:
153
151
  - lib/shipcloud/operations/delete.rb
154
152
  - lib/shipcloud/operations/find.rb
155
153
  - lib/shipcloud/operations/update.rb
154
+ - lib/shipcloud/order.rb
156
155
  - lib/shipcloud/pickup_request.rb
157
156
  - lib/shipcloud/request/base.rb
158
157
  - lib/shipcloud/request/connection.rb
@@ -166,6 +165,7 @@ files:
166
165
  - shipcloud.gemspec
167
166
  - spec/shipcloud/address_spec.rb
168
167
  - spec/shipcloud/carrier_spec.rb
168
+ - spec/shipcloud/order_spec.rb
169
169
  - spec/shipcloud/pickup_request_spec.rb
170
170
  - spec/shipcloud/request/base_spec.rb
171
171
  - spec/shipcloud/request/connection_spec.rb
@@ -189,20 +189,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
189
  requirements:
190
190
  - - ">="
191
191
  - !ruby/object:Gem::Version
192
- version: '2.3'
192
+ version: '2.6'
193
193
  required_rubygems_version: !ruby/object:Gem::Requirement
194
194
  requirements:
195
195
  - - ">="
196
196
  - !ruby/object:Gem::Version
197
197
  version: '0'
198
198
  requirements: []
199
- rubygems_version: 3.0.3
199
+ rubygems_version: 3.3.7
200
200
  signing_key:
201
201
  specification_version: 4
202
202
  summary: A wrapper for the shipcloud API
203
203
  test_files:
204
204
  - spec/shipcloud/address_spec.rb
205
205
  - spec/shipcloud/carrier_spec.rb
206
+ - spec/shipcloud/order_spec.rb
206
207
  - spec/shipcloud/pickup_request_spec.rb
207
208
  - spec/shipcloud/request/base_spec.rb
208
209
  - spec/shipcloud/request/connection_spec.rb
data/.hound.yml DELETED
@@ -1,12 +0,0 @@
1
- ruby:
2
- config_file: .rubocop.yml
3
- scss:
4
- enabled: false
5
- coffeescript:
6
- enabled: false
7
- javascript:
8
- enabled: false
9
- scss:
10
- enabled: false
11
- haml:
12
- enabled: false
data/.travis.yml DELETED
@@ -1,27 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.3
6
- - 2.4
7
- - 2.5
8
- - 2.6
9
- - ruby-head
10
- - jruby
11
- - rbx
12
- matrix:
13
- allow_failures:
14
- - rvm: ruby-head
15
- - rvm: rbx
16
- - rvm: jruby
17
- notifications:
18
- flowdock:
19
- secure: fSZxX5z3bHWT8aCFKBFrDDt5o3Jb6EFWcm+pAcMabpfDHc4iktWuCUlSM405798TRdKdws1A2RncQGYiQyLbqNvtLz48dvj4BxgYW7P/vg0koN+I/H2MjpZeuIQ7BRSEJIq2sAYNVya+hSil+SPEBMTngJiP6VYG0dm6fFnRkyk=
20
- addons:
21
- code_climate:
22
- repo_token: 704eb62133d951ce460a6047a15a58e0a521aa20ec6a533fa7a37585f8a75602
23
- before_script:
24
- - ./install-cc-test-reporter.sh
25
- - ./cc-test-reporter before-build
26
- after_script:
27
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env sh
2
-
3
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
4
- chmod +x ./cc-test-reporter