candy_check 0.1.0.pre → 0.3.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.
Files changed (76) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +23 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +7 -8
  5. data/Guardfile +42 -0
  6. data/MIGRATION_GUIDE_0_2_0.md +141 -0
  7. data/README.md +86 -26
  8. data/Rakefile +1 -1
  9. data/candy_check.gemspec +33 -25
  10. data/lib/candy_check/app_store/receipt_collection.rb +5 -3
  11. data/lib/candy_check/app_store/subscription_verification.rb +25 -1
  12. data/lib/candy_check/app_store/verification.rb +1 -1
  13. data/lib/candy_check/app_store/verifier.rb +11 -11
  14. data/lib/candy_check/cli/app.rb +16 -33
  15. data/lib/candy_check/cli/commands/play_store.rb +12 -13
  16. data/lib/candy_check/play_store.rb +20 -10
  17. data/lib/candy_check/play_store/acknowledger.rb +19 -0
  18. data/lib/candy_check/play_store/android_publisher_service.rb +6 -0
  19. data/lib/candy_check/play_store/product_acknowledgements/acknowledgement.rb +45 -0
  20. data/lib/candy_check/play_store/product_acknowledgements/response.rb +24 -0
  21. data/lib/candy_check/play_store/product_purchases/product_purchase.rb +90 -0
  22. data/lib/candy_check/play_store/product_purchases/product_verification.rb +53 -0
  23. data/lib/candy_check/play_store/subscription_purchases/subscription_purchase.rb +154 -0
  24. data/lib/candy_check/play_store/subscription_purchases/subscription_verification.rb +55 -0
  25. data/lib/candy_check/play_store/verification_failure.rb +8 -6
  26. data/lib/candy_check/play_store/verifier.rb +24 -49
  27. data/lib/candy_check/utils/config.rb +5 -3
  28. data/lib/candy_check/version.rb +1 -1
  29. data/spec/app_store/receipt_collection_spec.rb +33 -0
  30. data/spec/app_store/subscription_verification_spec.rb +35 -2
  31. data/spec/app_store/verifier_spec.rb +24 -5
  32. data/spec/candy_check_spec.rb +2 -2
  33. data/spec/cli/commands/play_store_spec.rb +10 -43
  34. data/spec/fixtures/play_store/random_dummy_key.json +12 -0
  35. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/acknowledged.yml +105 -0
  36. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/already_acknowledged.yml +124 -0
  37. data/spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/refunded.yml +122 -0
  38. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml +196 -0
  39. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml +183 -0
  40. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml +122 -0
  41. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml +196 -0
  42. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml +127 -0
  43. data/spec/play_store/acknowledger_spec.rb +48 -0
  44. data/spec/play_store/product_acknowledgements/acknowledgement_spec.rb +54 -0
  45. data/spec/play_store/product_acknowledgements/response_spec.rb +66 -0
  46. data/spec/play_store/product_purchases/product_purchase_spec.rb +110 -0
  47. data/spec/play_store/product_purchases/product_verification_spec.rb +49 -0
  48. data/spec/play_store/subscription_purchases/subscription_purchase_spec.rb +237 -0
  49. data/spec/play_store/subscription_purchases/subscription_verification_spec.rb +65 -0
  50. data/spec/play_store/verification_failure_spec.rb +18 -18
  51. data/spec/play_store/verifier_spec.rb +32 -96
  52. data/spec/spec_helper.rb +32 -10
  53. metadata +175 -75
  54. data/lib/candy_check/play_store/client.rb +0 -126
  55. data/lib/candy_check/play_store/config.rb +0 -51
  56. data/lib/candy_check/play_store/discovery_repository.rb +0 -33
  57. data/lib/candy_check/play_store/receipt.rb +0 -81
  58. data/lib/candy_check/play_store/subscription.rb +0 -138
  59. data/lib/candy_check/play_store/subscription_verification.rb +0 -30
  60. data/lib/candy_check/play_store/verification.rb +0 -48
  61. data/spec/fixtures/api_cache.dump +0 -1
  62. data/spec/fixtures/play_store/api_cache.dump +0 -1
  63. data/spec/fixtures/play_store/auth_failure.txt +0 -18
  64. data/spec/fixtures/play_store/auth_success.txt +0 -20
  65. data/spec/fixtures/play_store/discovery.txt +0 -2841
  66. data/spec/fixtures/play_store/dummy.p12 +0 -0
  67. data/spec/fixtures/play_store/empty.txt +0 -17
  68. data/spec/fixtures/play_store/products_failure.txt +0 -29
  69. data/spec/fixtures/play_store/products_success.txt +0 -22
  70. data/spec/play_store/client_spec.rb +0 -125
  71. data/spec/play_store/config_spec.rb +0 -96
  72. data/spec/play_store/discovery_respository_spec.rb +0 -31
  73. data/spec/play_store/receipt_spec.rb +0 -88
  74. data/spec/play_store/subscription_spec.rb +0 -138
  75. data/spec/play_store/subscription_verification_spec.rb +0 -98
  76. data/spec/play_store/verification_spec.rb +0 -82
@@ -1,35 +1,35 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::PlayStore::VerificationFailure do
4
- subject { CandyCheck::PlayStore::VerificationFailure.new(attributes) }
5
-
6
- describe 'denied' do
7
- let(:attributes) do
8
- {
9
- 'errors' => [],
10
- 'code' => 401,
11
- 'message' => 'The current user has insufficient permissions'
12
- }
4
+ subject { CandyCheck::PlayStore::VerificationFailure.new(fake_error) }
5
+
6
+ describe "denied" do
7
+ let(:fake_error) do
8
+ FakeError.new("401", "The current user has insufficient permissions")
13
9
  end
14
10
 
15
- it 'returns the code' do
11
+ it "returns the code" do
16
12
  subject.code.must_equal 401
17
13
  end
18
14
 
19
- it 'returns the message' do
20
- subject.message.must_equal 'The current user has insufficient permissions'
15
+ it "returns the message" do
16
+ subject.message.must_equal "The current user has insufficient permissions"
21
17
  end
22
18
  end
23
19
 
24
- describe 'empty' do
25
- let(:attributes) { nil }
20
+ describe "empty" do
21
+ let(:fake_error) do
22
+ FakeError.new(nil, nil)
23
+ end
26
24
 
27
- it 'returns an unknown code' do
25
+ it "returns an unknown code" do
28
26
  subject.code.must_equal(-1)
29
27
  end
30
28
 
31
- it 'returns an unknown message' do
32
- subject.message.must_equal 'Unknown error'
29
+ it "returns an unknown message" do
30
+ subject.message.must_equal "Unknown error"
33
31
  end
34
32
  end
33
+
34
+ FakeError = Struct.new(:status_code, :message)
35
35
  end
@@ -1,111 +1,47 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe CandyCheck::PlayStore::Verifier do
4
- subject { CandyCheck::PlayStore::Verifier.new(config) }
5
- let(:config) do
6
- CandyCheck::PlayStore::Config
7
- .new(
8
- application_name: 'YourApplication',
9
- application_version: '1.0',
10
- issuer: 'abcdefg@developer.gserviceaccount.com',
11
- key_file: 'local/google.p12',
12
- key_secret: 'notasecret'
13
- )
14
- end
15
- let(:package) { 'the_package' }
16
- let(:product_id) { 'the_product' }
17
- let(:token) { 'the_token' }
18
-
19
- it 'holds the config' do
20
- subject.config.must_be_same_as config
21
- end
22
-
23
- it 'requires a boot before verification' do
24
- proc do
25
- subject.verify(package, product_id, token)
26
- end.must_raise CandyCheck::PlayStore::Verifier::BootRequiredError
27
- end
28
-
29
- it 'it configures and boots a client but raises on second boot!' do
30
- with_mocked_client do
31
- subject.boot!
32
- @client.config.must_be_same_as config
33
- @client.booted.must_be_true
34
- end
35
-
36
- proc do
37
- subject.boot!
38
- end.must_raise CandyCheck::PlayStore::Verifier::BootRequiredError
39
- end
40
-
41
- it 'uses a verifier when booted' do
42
- result = :stubbed
43
- with_mocked_client do
44
- subject.boot!
45
- end
46
- with_mocked_verifier(result) do
47
- subject.verify(package, product_id, token).must_be_same_as result
48
-
49
- assert_recorded(
50
- [@client, package, product_id, token]
51
- )
52
- end
53
- end
54
-
55
- it 'uses a subscription verifier when booted' do
56
- result = :stubbed
57
- with_mocked_client do
58
- subject.boot!
59
- end
60
- with_mocked_verifier(result) do
61
- subject.verify_subscription(
62
- package, product_id, token
63
- ).must_be_same_as result
4
+ subject { CandyCheck::PlayStore::Verifier.new(authorization: authorization) }
64
5
 
65
- assert_recorded(
66
- [@client, package, product_id, token]
67
- )
68
- end
69
- end
6
+ let(:package_name) { "my_package_name" }
7
+ let(:product_id) { "my_product_id" }
8
+ let(:subscription_id) { "my_subscription_id" }
9
+ let(:token) { "my_token" }
70
10
 
71
- private
11
+ let(:json_key_file) { File.expand_path("../fixtures/play_store/random_dummy_key.json", __dir__) }
12
+ let(:authorization) { CandyCheck::PlayStore.authorization(json_key_file) }
72
13
 
73
- def with_mocked_verifier(*results)
74
- @recorded ||= []
75
- stub = proc do |*args|
76
- @recorded << args
77
- DummyPlayStoreVerification.new(*args).tap { |v| v.results = results }
14
+ describe "product purchases" do
15
+ it "verifies a product purchase" do
16
+ VCR.use_cassette("play_store/product_purchases/valid_but_not_consumed") do
17
+ result = subject.verify_product_purchase(package_name: package_name, product_id: product_id, token: token)
18
+ result.must_be_instance_of CandyCheck::PlayStore::ProductPurchases::ProductPurchase
19
+ result.valid?.must_be_true
20
+ result.consumed?.must_be_false
21
+ end
78
22
  end
79
- CandyCheck::PlayStore::Verification.stub :new, stub do
80
- yield
81
- end
82
- end
83
23
 
84
- def with_mocked_client
85
- stub = proc do |*args|
86
- @client = DummyPlayStoreClient.new(*args)
87
- end
88
- CandyCheck::PlayStore::Client.stub :new, stub do
89
- yield
24
+ it "can return a product purchase verification failure" do
25
+ VCR.use_cassette("play_store/product_purchases/permission_denied") do
26
+ result = subject.verify_product_purchase(package_name: package_name, product_id: product_id, token: token)
27
+ result.must_be_instance_of CandyCheck::PlayStore::VerificationFailure
28
+ end
90
29
  end
91
30
  end
92
31
 
93
- def assert_recorded(*calls)
94
- @recorded.must_equal calls
95
- end
96
-
97
- DummyPlayStoreVerification = Struct.new(:client, :package,
98
- :product_id, :token) do
99
- attr_accessor :results
100
- def call!
101
- results.shift
32
+ describe "subscription purchases" do
33
+ it "verifies a subscription purchase" do
34
+ VCR.use_cassette("play_store/subscription_purchases/valid_but_expired") do
35
+ result = subject.verify_subscription_purchase(package_name: package_name, subscription_id: subscription_id, token: token)
36
+ result.must_be_instance_of CandyCheck::PlayStore::SubscriptionPurchases::SubscriptionPurchase
37
+ end
102
38
  end
103
- end
104
39
 
105
- DummyPlayStoreClient = Struct.new(:config) do
106
- attr_reader :booted
107
- def boot!
108
- @booted = true
40
+ it "can return a subscription purchase verification failure" do
41
+ VCR.use_cassette("play_store/subscription_purchases/permission_denied") do
42
+ result = subject.verify_subscription_purchase(package_name: package_name, subscription_id: subscription_id, token: token)
43
+ result.must_be_instance_of CandyCheck::PlayStore::VerificationFailure
44
+ end
109
45
  end
110
46
  end
111
47
  end
@@ -1,19 +1,36 @@
1
- require 'coveralls'
1
+ require "coveralls"
2
2
  Coveralls.wear!
3
3
 
4
- require 'candy_check'
5
- require 'candy_check/cli'
4
+ require "candy_check"
5
+ require "candy_check/cli"
6
6
 
7
- require 'minitest/autorun'
8
- require 'minitest/around/spec'
7
+ def in_continuous_integration_environment?
8
+ ENV["CI"] || ENV["TRAVIS"] || ENV["CONTINUOUS_INTEGRATION"]
9
+ end
10
+
11
+ require "minitest/autorun"
12
+ require "minitest/around/spec"
13
+ require "minitest/focus" unless in_continuous_integration_environment?
14
+
15
+ require "webmock/minitest"
16
+ require "vcr"
17
+
18
+ require "timecop"
19
+
20
+ require "pry"
9
21
 
10
- require 'webmock/minitest'
22
+ require_relative "support/with_fixtures"
23
+ require_relative "support/with_temp_file"
24
+ require_relative "support/with_command"
11
25
 
12
- require_relative 'support/with_fixtures'
13
- require_relative 'support/with_temp_file'
14
- require_relative 'support/with_command'
26
+ ENV["DEBUG"] && Google::APIClient.logger.level = Logger::DEBUG
27
+
28
+ class MiniTest::Spec
29
+ class << self
30
+ alias :context :describe
31
+ end
32
+ end
15
33
 
16
- ENV['DEBUG'] && Google::APIClient.logger.level = Logger::DEBUG
17
34
 
18
35
  module MiniTest
19
36
  module Assertions
@@ -35,3 +52,8 @@ module MiniTest
35
52
  infect_an_assertion :assert_false, :must_be_false, :unary
36
53
  end
37
54
  end
55
+
56
+ VCR.configure do |config|
57
+ config.cassette_library_dir = "spec/fixtures/vcr_cassettes"
58
+ config.hook_into :webmock
59
+ end
metadata CHANGED
@@ -1,43 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: candy_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Thiel
8
+ - Christoph Weegen
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-10-25 00:00:00.000000000 Z
12
+ date: 2020-10-07 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: multi_json
15
+ name: google-api-client
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '1.10'
20
+ version: 0.43.0
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '1.10'
27
+ version: 0.43.0
27
28
  - !ruby/object:Gem::Dependency
28
- name: google-api-client
29
+ name: multi_json
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: 0.8.6
34
+ version: '1.10'
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: 0.8.6
41
+ version: '1.10'
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: thor
43
44
  requirement: !ruby/object:Gem::Requirement
@@ -53,117 +54,215 @@ dependencies:
53
54
  - !ruby/object:Gem::Version
54
55
  version: '0.19'
55
56
  - !ruby/object:Gem::Dependency
56
- name: rubocop
57
+ name: bundler
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - "~>"
60
61
  - !ruby/object:Gem::Version
61
- version: '0.39'
62
+ version: '2.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: coveralls
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.8'
62
77
  type: :development
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
81
  - - "~>"
67
82
  - !ruby/object:Gem::Version
68
- version: '0.39'
83
+ version: '0.8'
69
84
  - !ruby/object:Gem::Dependency
70
85
  name: inch
71
86
  requirement: !ruby/object:Gem::Requirement
72
87
  requirements:
73
88
  - - "~>"
74
89
  - !ruby/object:Gem::Version
75
- version: '0.5'
90
+ version: '0.7'
76
91
  type: :development
77
92
  prerelease: false
78
93
  version_requirements: !ruby/object:Gem::Requirement
79
94
  requirements:
80
95
  - - "~>"
81
96
  - !ruby/object:Gem::Version
82
- version: '0.5'
97
+ version: '0.7'
83
98
  - !ruby/object:Gem::Dependency
84
- name: bundler
99
+ name: minitest
85
100
  requirement: !ruby/object:Gem::Requirement
86
101
  requirements:
87
102
  - - "~>"
88
103
  - !ruby/object:Gem::Version
89
- version: '1.7'
104
+ version: '5.10'
90
105
  type: :development
91
106
  prerelease: false
92
107
  version_requirements: !ruby/object:Gem::Requirement
93
108
  requirements:
94
109
  - - "~>"
95
110
  - !ruby/object:Gem::Version
96
- version: '1.7'
111
+ version: '5.10'
97
112
  - !ruby/object:Gem::Dependency
98
- name: rake
113
+ name: minitest-around
99
114
  requirement: !ruby/object:Gem::Requirement
100
115
  requirements:
101
116
  - - "~>"
102
117
  - !ruby/object:Gem::Version
103
- version: '11.1'
118
+ version: '0.4'
104
119
  type: :development
105
120
  prerelease: false
106
121
  version_requirements: !ruby/object:Gem::Requirement
107
122
  requirements:
108
123
  - - "~>"
109
124
  - !ruby/object:Gem::Version
110
- version: '11.1'
125
+ version: '0.4'
111
126
  - !ruby/object:Gem::Dependency
112
- name: coveralls
127
+ name: minitest-focus
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rake
113
142
  requirement: !ruby/object:Gem::Requirement
114
143
  requirements:
115
144
  - - "~>"
116
145
  - !ruby/object:Gem::Version
117
- version: '0.8'
146
+ version: '12.0'
118
147
  type: :development
119
148
  prerelease: false
120
149
  version_requirements: !ruby/object:Gem::Requirement
121
150
  requirements:
122
151
  - - "~>"
123
152
  - !ruby/object:Gem::Version
124
- version: '0.8'
153
+ version: '12.0'
125
154
  - !ruby/object:Gem::Dependency
126
- name: minitest
155
+ name: rubocop
127
156
  requirement: !ruby/object:Gem::Requirement
128
157
  requirements:
129
158
  - - "~>"
130
159
  - !ruby/object:Gem::Version
131
- version: '5.9'
160
+ version: '0.48'
132
161
  type: :development
133
162
  prerelease: false
134
163
  version_requirements: !ruby/object:Gem::Requirement
135
164
  requirements:
136
165
  - - "~>"
137
166
  - !ruby/object:Gem::Version
138
- version: '5.9'
167
+ version: '0.48'
139
168
  - !ruby/object:Gem::Dependency
140
- name: minitest-around
169
+ name: timecop
141
170
  requirement: !ruby/object:Gem::Requirement
142
171
  requirements:
143
172
  - - "~>"
144
173
  - !ruby/object:Gem::Version
145
- version: '0.3'
174
+ version: '0.8'
146
175
  type: :development
147
176
  prerelease: false
148
177
  version_requirements: !ruby/object:Gem::Requirement
149
178
  requirements:
150
179
  - - "~>"
151
180
  - !ruby/object:Gem::Version
152
- version: '0.3'
181
+ version: '0.8'
153
182
  - !ruby/object:Gem::Dependency
154
183
  name: webmock
155
184
  requirement: !ruby/object:Gem::Requirement
156
185
  requirements:
157
186
  - - "~>"
158
187
  - !ruby/object:Gem::Version
159
- version: '2.1'
188
+ version: '3.0'
160
189
  type: :development
161
190
  prerelease: false
162
191
  version_requirements: !ruby/object:Gem::Requirement
163
192
  requirements:
164
193
  - - "~>"
165
194
  - !ruby/object:Gem::Version
166
- version: '2.1'
195
+ version: '3.0'
196
+ - !ruby/object:Gem::Dependency
197
+ name: vcr
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ - !ruby/object:Gem::Dependency
211
+ name: pry
212
+ requirement: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ type: :development
218
+ prerelease: false
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ">="
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ - !ruby/object:Gem::Dependency
225
+ name: awesome_print
226
+ requirement: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ type: :development
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: guard
240
+ requirement: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ type: :development
246
+ prerelease: false
247
+ version_requirements: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ - !ruby/object:Gem::Dependency
253
+ name: guard-minitest
254
+ requirement: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: '0'
259
+ type: :development
260
+ prerelease: false
261
+ version_requirements: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - ">="
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
167
266
  description:
168
267
  email:
169
268
  - jonas@thiel.io
@@ -177,7 +276,9 @@ files:
177
276
  - ".ruby-version"
178
277
  - ".travis.yml"
179
278
  - Gemfile
279
+ - Guardfile
180
280
  - LICENSE.txt
281
+ - MIGRATION_GUIDE_0_2_0.md
181
282
  - README.md
182
283
  - Rakefile
183
284
  - bin/candy_check
@@ -201,13 +302,14 @@ files:
201
302
  - lib/candy_check/cli/commands/version.rb
202
303
  - lib/candy_check/cli/out.rb
203
304
  - lib/candy_check/play_store.rb
204
- - lib/candy_check/play_store/client.rb
205
- - lib/candy_check/play_store/config.rb
206
- - lib/candy_check/play_store/discovery_repository.rb
207
- - lib/candy_check/play_store/receipt.rb
208
- - lib/candy_check/play_store/subscription.rb
209
- - lib/candy_check/play_store/subscription_verification.rb
210
- - lib/candy_check/play_store/verification.rb
305
+ - lib/candy_check/play_store/acknowledger.rb
306
+ - lib/candy_check/play_store/android_publisher_service.rb
307
+ - lib/candy_check/play_store/product_acknowledgements/acknowledgement.rb
308
+ - lib/candy_check/play_store/product_acknowledgements/response.rb
309
+ - lib/candy_check/play_store/product_purchases/product_purchase.rb
310
+ - lib/candy_check/play_store/product_purchases/product_verification.rb
311
+ - lib/candy_check/play_store/subscription_purchases/subscription_purchase.rb
312
+ - lib/candy_check/play_store/subscription_purchases/subscription_verification.rb
211
313
  - lib/candy_check/play_store/verification_failure.rb
212
314
  - lib/candy_check/play_store/verifier.rb
213
315
  - lib/candy_check/utils.rb
@@ -228,23 +330,23 @@ files:
228
330
  - spec/cli/commands/play_store_spec.rb
229
331
  - spec/cli/commands/version_spec.rb
230
332
  - spec/cli/out_spec.rb
231
- - spec/fixtures/api_cache.dump
232
- - spec/fixtures/play_store/api_cache.dump
233
- - spec/fixtures/play_store/auth_failure.txt
234
- - spec/fixtures/play_store/auth_success.txt
235
- - spec/fixtures/play_store/discovery.txt
236
- - spec/fixtures/play_store/dummy.p12
237
- - spec/fixtures/play_store/empty.txt
238
- - spec/fixtures/play_store/products_failure.txt
239
- - spec/fixtures/play_store/products_success.txt
240
- - spec/play_store/client_spec.rb
241
- - spec/play_store/config_spec.rb
242
- - spec/play_store/discovery_respository_spec.rb
243
- - spec/play_store/receipt_spec.rb
244
- - spec/play_store/subscription_spec.rb
245
- - spec/play_store/subscription_verification_spec.rb
333
+ - spec/fixtures/play_store/random_dummy_key.json
334
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/acknowledged.yml
335
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/already_acknowledged.yml
336
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/refunded.yml
337
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml
338
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml
339
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml
340
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml
341
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml
342
+ - spec/play_store/acknowledger_spec.rb
343
+ - spec/play_store/product_acknowledgements/acknowledgement_spec.rb
344
+ - spec/play_store/product_acknowledgements/response_spec.rb
345
+ - spec/play_store/product_purchases/product_purchase_spec.rb
346
+ - spec/play_store/product_purchases/product_verification_spec.rb
347
+ - spec/play_store/subscription_purchases/subscription_purchase_spec.rb
348
+ - spec/play_store/subscription_purchases/subscription_verification_spec.rb
246
349
  - spec/play_store/verification_failure_spec.rb
247
- - spec/play_store/verification_spec.rb
248
350
  - spec/play_store/verifier_spec.rb
249
351
  - spec/spec_helper.rb
250
352
  - spec/support/with_command.rb
@@ -262,15 +364,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
262
364
  requirements:
263
365
  - - ">="
264
366
  - !ruby/object:Gem::Version
265
- version: '2.0'
367
+ version: '2.4'
266
368
  required_rubygems_version: !ruby/object:Gem::Requirement
267
369
  requirements:
268
- - - ">"
370
+ - - ">="
269
371
  - !ruby/object:Gem::Version
270
- version: 1.3.1
372
+ version: '0'
271
373
  requirements: []
272
- rubyforge_project:
273
- rubygems_version: 2.5.1
374
+ rubygems_version: 3.1.2
274
375
  signing_key:
275
376
  specification_version: 4
276
377
  summary: Check and verify in-app receipts
@@ -289,26 +390,25 @@ test_files:
289
390
  - spec/cli/commands/play_store_spec.rb
290
391
  - spec/cli/commands/version_spec.rb
291
392
  - spec/cli/out_spec.rb
292
- - spec/fixtures/api_cache.dump
293
- - spec/fixtures/play_store/api_cache.dump
294
- - spec/fixtures/play_store/auth_failure.txt
295
- - spec/fixtures/play_store/auth_success.txt
296
- - spec/fixtures/play_store/discovery.txt
297
- - spec/fixtures/play_store/dummy.p12
298
- - spec/fixtures/play_store/empty.txt
299
- - spec/fixtures/play_store/products_failure.txt
300
- - spec/fixtures/play_store/products_success.txt
301
- - spec/play_store/client_spec.rb
302
- - spec/play_store/config_spec.rb
303
- - spec/play_store/discovery_respository_spec.rb
304
- - spec/play_store/receipt_spec.rb
305
- - spec/play_store/subscription_spec.rb
306
- - spec/play_store/subscription_verification_spec.rb
393
+ - spec/fixtures/play_store/random_dummy_key.json
394
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/acknowledged.yml
395
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/already_acknowledged.yml
396
+ - spec/fixtures/vcr_cassettes/play_store/product_acknowledgements/refunded.yml
397
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml
398
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml
399
+ - spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml
400
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml
401
+ - spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml
402
+ - spec/play_store/acknowledger_spec.rb
403
+ - spec/play_store/product_acknowledgements/acknowledgement_spec.rb
404
+ - spec/play_store/product_acknowledgements/response_spec.rb
405
+ - spec/play_store/product_purchases/product_purchase_spec.rb
406
+ - spec/play_store/product_purchases/product_verification_spec.rb
407
+ - spec/play_store/subscription_purchases/subscription_purchase_spec.rb
408
+ - spec/play_store/subscription_purchases/subscription_verification_spec.rb
307
409
  - spec/play_store/verification_failure_spec.rb
308
- - spec/play_store/verification_spec.rb
309
410
  - spec/play_store/verifier_spec.rb
310
411
  - spec/spec_helper.rb
311
412
  - spec/support/with_command.rb
312
413
  - spec/support/with_fixtures.rb
313
414
  - spec/support/with_temp_file.rb
314
- has_rdoc: