candy_check 0.1.2 → 0.2.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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -12
  3. data/Guardfile +42 -0
  4. data/MIGRATION_GUIDE_0_2_0.md +141 -0
  5. data/README.md +49 -26
  6. data/candy_check.gemspec +32 -26
  7. data/lib/candy_check/cli/app.rb +16 -33
  8. data/lib/candy_check/cli/commands/play_store.rb +12 -13
  9. data/lib/candy_check/play_store.rb +17 -10
  10. data/lib/candy_check/play_store/android_publisher_service.rb +6 -0
  11. data/lib/candy_check/play_store/product_purchases/product_purchase.rb +90 -0
  12. data/lib/candy_check/play_store/product_purchases/product_verification.rb +53 -0
  13. data/lib/candy_check/play_store/subscription_purchases/subscription_purchase.rb +141 -0
  14. data/lib/candy_check/play_store/subscription_purchases/subscription_verification.rb +55 -0
  15. data/lib/candy_check/play_store/verification_failure.rb +8 -6
  16. data/lib/candy_check/play_store/verifier.rb +24 -49
  17. data/lib/candy_check/version.rb +1 -1
  18. data/spec/candy_check_spec.rb +2 -2
  19. data/spec/cli/commands/play_store_spec.rb +10 -43
  20. data/spec/fixtures/play_store/random_dummy_key.json +12 -0
  21. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/permission_denied.yml +196 -0
  22. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/response_with_empty_body.yml +183 -0
  23. data/spec/fixtures/vcr_cassettes/play_store/product_purchases/valid_but_not_consumed.yml +122 -0
  24. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/permission_denied.yml +196 -0
  25. data/spec/fixtures/vcr_cassettes/play_store/subscription_purchases/valid_but_expired.yml +127 -0
  26. data/spec/play_store/product_purchases/product_purchase_spec.rb +110 -0
  27. data/spec/play_store/product_purchases/product_verification_spec.rb +49 -0
  28. data/spec/play_store/subscription_purchases/subscription_purchase_spec.rb +181 -0
  29. data/spec/play_store/subscription_purchases/subscription_verification_spec.rb +65 -0
  30. data/spec/play_store/verification_failure_spec.rb +18 -18
  31. data/spec/play_store/verifier_spec.rb +32 -96
  32. data/spec/spec_helper.rb +24 -11
  33. metadata +120 -47
  34. data/lib/candy_check/play_store/client.rb +0 -139
  35. data/lib/candy_check/play_store/config.rb +0 -51
  36. data/lib/candy_check/play_store/discovery_repository.rb +0 -33
  37. data/lib/candy_check/play_store/receipt.rb +0 -81
  38. data/lib/candy_check/play_store/subscription.rb +0 -139
  39. data/lib/candy_check/play_store/subscription_verification.rb +0 -30
  40. data/lib/candy_check/play_store/verification.rb +0 -48
  41. data/spec/fixtures/api_cache.dump +0 -1
  42. data/spec/fixtures/play_store/api_cache.dump +0 -1
  43. data/spec/fixtures/play_store/auth_failure.txt +0 -18
  44. data/spec/fixtures/play_store/auth_success.txt +0 -20
  45. data/spec/fixtures/play_store/discovery.txt +0 -2841
  46. data/spec/fixtures/play_store/dummy.p12 +0 -0
  47. data/spec/fixtures/play_store/empty.txt +0 -17
  48. data/spec/fixtures/play_store/products_failure.txt +0 -29
  49. data/spec/fixtures/play_store/products_success.txt +0 -22
  50. data/spec/play_store/client_spec.rb +0 -125
  51. data/spec/play_store/config_spec.rb +0 -96
  52. data/spec/play_store/discovery_respository_spec.rb +0 -31
  53. data/spec/play_store/receipt_spec.rb +0 -88
  54. data/spec/play_store/subscription_spec.rb +0 -138
  55. data/spec/play_store/subscription_verification_spec.rb +0 -97
  56. data/spec/play_store/verification_spec.rb +0 -81
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c40745adb3f17e7ad7d4d6b936f0435219aadb38717f9cc798c4f1442ee1a2c
4
- data.tar.gz: 70776189d498d75e83783423f3cdde25eb3db1b2a1b98cf39157c53e8d281c7a
3
+ metadata.gz: f276e0409f0b3ee54bd5543e939d7635c95059dfc5ae77d9b071d5715d1e291f
4
+ data.tar.gz: 56858af56be773214faae7e848e4aa9ae5a30b8cba2da782aca8554da7895c94
5
5
  SHA512:
6
- metadata.gz: 76e17fdedbd3ea65c210a1238f74b50e3ad24cf5bb31d3f0a84208e6c1bc0700b20445d91dd2c0204b5c99f4b7a3241a075e5e2e743ed868ae29a7d3ed810f98
7
- data.tar.gz: d6d6054b8521d2425ea24354c5ac6a2e385bb4e32c793a4a6f005c0644fdb25cbe992ac3d8b02141117871d70abd3d0770c1e0bede750c46673e139f955879c2
6
+ metadata.gz: 6eb5506e96216125602b47994b99f8038aa20aecf17cf2515ba5ab7578f06415735301f793aa64786bddad59a4c0296bdf5f6f3545151ee0b1f104b7a5eef262
7
+ data.tar.gz: a6084226820a90997d852976659841930fbeaf5d79507fe392d8551447f0000a3016636f317f79f1af50cb9501f355905a96203751162153ac210ac97bcca519
@@ -2,19 +2,12 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.5.1
6
- - 2.4.4
7
- - 2.4.1
8
- - 2.3.7
9
- - 2.2
10
- - 2.1
11
- - 2.0
5
+ - 2.6.5
6
+ - 2.5.7
7
+ - 2.4.9
8
+ - jruby-9.2.9.0
12
9
  - ruby-head
13
- - jruby-1.7.26
14
10
  - jruby-head
15
- env:
16
- global:
17
- - JRUBY_OPTS="--2.0"
18
11
  matrix:
19
12
  allow_failures:
20
13
  - rvm: ruby-head
@@ -22,4 +15,4 @@ matrix:
22
15
  fast_finish: true
23
16
  before_install:
24
17
  - gem update --system
25
- - gem install bundler -v 1.16.2
18
+ - gem install bundler -v 2.0.2
@@ -0,0 +1,42 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ directories %w(lib spec) \
6
+ .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ guard :minitest do
19
+ # with Minitest::Unit
20
+ # watch(%r{^test/(.*)\/?test_(.*)\.rb$})
21
+ # watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
22
+ # watch(%r{^test/test_helper\.rb$}) { 'test' }
23
+
24
+ # with Minitest::Spec
25
+ watch(%r{^spec/(.*)_spec\.rb$})
26
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
27
+ watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
28
+
29
+ # Rails 4
30
+ # watch(%r{^app/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
31
+ # watch(%r{^app/controllers/application_controller\.rb$}) { 'test/controllers' }
32
+ # watch(%r{^app/controllers/(.+)_controller\.rb$}) { |m| "test/integration/#{m[1]}_test.rb" }
33
+ # watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
34
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
35
+ # watch(%r{^test/.+_test\.rb$})
36
+ # watch(%r{^test/test_helper\.rb$}) { 'test' }
37
+
38
+ # Rails < 4
39
+ # watch(%r{^app/controllers/(.*)\.rb$}) { |m| "test/functional/#{m[1]}_test.rb" }
40
+ # watch(%r{^app/helpers/(.*)\.rb$}) { |m| "test/helpers/#{m[1]}_test.rb" }
41
+ # watch(%r{^app/models/(.*)\.rb$}) { |m| "test/unit/#{m[1]}_test.rb" }
42
+ end
@@ -0,0 +1,141 @@
1
+ # Migration Guide from v0.1.x to v0.2.0
2
+
3
+ Due to changes in the PlayStore API, Candy Check needed to introduce some breaking changes in version `0.2.0`.
4
+
5
+ To adapt your old implementation to these changes, follow the steps below:
6
+
7
+ ## Authorization
8
+
9
+ First we have to change, how our verifier authenticates against the Google API.
10
+
11
+ Change code like this
12
+
13
+ ```ruby
14
+ # < v0.2.0
15
+ config = CandyCheck::PlayStore::Config.new(
16
+ application_name: 'YourApplication',
17
+ application_version: '1.0',
18
+ issuer: 'abcdefg@developer.gserviceaccount.com',
19
+ key_file: 'local/google.p12',
20
+ key_secret: 'notasecret',
21
+ cache_file: 'tmp/candy_check_play_store_cache'
22
+ )
23
+ verifier = CandyCheck::PlayStore::Verifier.new(config)
24
+ verifier.boot!
25
+ ```
26
+
27
+ to
28
+
29
+ ```ruby
30
+ # v0.2.0
31
+ authorization = CandyCheck::PlayStore.authorization("/path/to/key.json")
32
+ verifier = CandyCheck::PlayStore::Verifier.new(authorization: authorization)
33
+ ```
34
+
35
+ If you're not sure how to get a `.json` key file, follow this part of the [`README`](/README.md#getting-the-json-key-file).
36
+
37
+ If you need other means of authentication follow this part of the [`README`](/README.md#building-an-authorization-object).
38
+
39
+ ## Verifying Purchases
40
+
41
+ To be more descriptive and consistent with the PlayStore API, the verifier got a new signature and return values have been adapted accordingly.
42
+
43
+ ### Verifying Product Purchases
44
+
45
+ Change all occurences of
46
+
47
+ ```ruby
48
+ # < v0.2.0
49
+ verifier.verify("my-package-name", "my product id", "my token")
50
+ # => Receipt or VerificationFailure
51
+ ```
52
+
53
+ to
54
+
55
+ ```ruby
56
+ # v0.2.0
57
+ verifier.verify_product_purchase(
58
+ package_name: "my-package-name",
59
+ product_id: "my product id",
60
+ token: "my token"
61
+ )
62
+ # => ProductPurchase or VerificationFailure
63
+ ```
64
+
65
+ *NOTE:* Take a closer look at the possible return values: `CandyCheck::PlayStore::Receipt` was moved to `CandyCheck::PlayStore::ProductPurchases::ProductPurchase`. In case you're matching at the class name of the result, please adapt your code accordingly.
66
+
67
+ #### Accessing Raw ProductPurchase Attributes
68
+
69
+ CandyCheck `< 0.2.0` provided the raw `ProductPurchase` attributes given by the PlayStore API like this:
70
+
71
+ ```ruby
72
+ # < v0.2.0
73
+ result = verifier.verify("my-package-name", "my product id", "my token")
74
+ result.attributes
75
+ # => Hash
76
+ ```
77
+
78
+ To get the same behaviour in CandyCheck `0.2.0`, change the code above to:
79
+
80
+ ```ruby
81
+ # v0.2.0
82
+ result = verifier.verify_product_purchase(
83
+ package_name: "my-package-name",
84
+ product_id: "my product id",
85
+ token: "my token"
86
+ )
87
+ result.product_purchase.to_h
88
+ # => Hash
89
+ ```
90
+
91
+ The hash key access must be changed from strings in `camelCase` to symbols in `snake_case`:
92
+
93
+ ```ruby
94
+ # < 0.2.0
95
+ result.attributes["purchaseState"]
96
+
97
+ # 0.2.0
98
+ result.product_purchase.to_h[:purchase_state]
99
+ ```
100
+
101
+ ## Verifying Subscription Purchases
102
+
103
+ Change all occurences of
104
+
105
+ ```ruby
106
+ # < v0.2.0
107
+ verifier.verify_subscription("my-package-name", "my-subscription-id", "my-token")
108
+ # => Subscription or VerificationFailure
109
+ ```
110
+
111
+ to
112
+
113
+ ```ruby
114
+ # v0.2.0
115
+ verifier.verify_subscription_purchase(
116
+ package_name: "my-package-name",
117
+ subscription_id: "my-subscription-id",
118
+ token: "my-token"
119
+ )
120
+ # => SubscriptionPurchase or VerificationFailure
121
+ ```
122
+
123
+ *NOTE:* Again take a closer look at the possible return values: `CandyCheck::PlayStore::Subscription` was moved to `CandyCheck::PlayStore::SubscriptionPurchases::SubscriptionPurchase`. In case you're matching at the class name of the result, please adapt your code accordingly.
124
+
125
+ ## Using the CLI
126
+
127
+ The way the CandyCheck CLI gets used, needed to be changed too.
128
+
129
+ The old PlayStore command:
130
+
131
+ ```bash
132
+ # < v0.2.0
133
+ $ candy_check play_store PACKAGE PRODUCT_ID TOKEN --issuer=ISSUER --key-file=KEY_FILE
134
+ ```
135
+
136
+ was changed to
137
+
138
+ ```bash
139
+ # v0.2.0
140
+ $ candy_check play_store PACKAGE PRODUCT_ID TOKEN --json-key-file=/path/to/key.json
141
+ ```
data/README.md CHANGED
@@ -43,12 +43,7 @@ called "[service account](https://developers.google.com/accounts/docs/OAuth2Serv
43
43
  new account by yourself, export the generated certificate file and grant the correct permissions to the account for
44
44
  your app using the [Google Developer Console](https://console.developers.google.com).
45
45
 
46
- Further more this gem uses the [official Ruby SDK](https://github.com/google/google-api-ruby-client) for the API interactions
47
- which suggest to use a locally cached service discovery. If you don't omit the `cache_file` configuration this is done
48
- automatically.
49
-
50
- If you have set up the Android app correctly you should get a [`purchaseToken`](http://developer.android.com/google/play/billing/billing_reference.html#getBuyIntent) per purchased item. You should use this string in combination with `packageName` and `productId`
51
- to verify the purchase.
46
+ If you have set up the Android app correctly you should get a [`purchaseToken`](http://developer.android.com/google/play/billing/billing_reference.html#getBuyIntent) per purchased item. You should use this string in combination with `packageName` and `productId` to verify the purchase.
52
47
 
53
48
  ## Usage
54
49
 
@@ -85,40 +80,68 @@ Please see the class documentation for [`CandyCheck::AppStore::ReceiptCollection
85
80
 
86
81
  ### PlayStore
87
82
 
88
- First initialize and **boot** a verifier instance for your application. This loads the API discovery and
89
- fetches the needed OAuth access token. When configuring a `cache_file` the discovery is loaded (or dumped) to
90
- this file.
83
+ > :warning: Version `0.2.0` of `CandyCheck` introduced some breaking changes to the PlayStore functionality to adapt to changes in the Google API. If you're upgrading from a `CandyCheck` version `< 0.2.0` see the [migration guide](/MIGRATION_GUIDE_0_2_0.md) for more.
84
+
85
+ #### Authorization
86
+
87
+ ##### Getting the JSON Key File
88
+
89
+ First we have to get a `.json` key file, that gives access to the Google API.
90
+
91
+ This `.json` key file can be generated under the following URL (make sure to adapt the `project=my-project-name` parameter accordingly):
91
92
 
92
- > **Remarks:** Both `application_name` and `application_version` represent *your* application against Google's APIs. You may use any values here, but I suggest to refelect the name of the used service account here.
93
+ [https://console.developers.google.com/apis/credentials/serviceaccountkey?project=my-project-name](https://console.developers.google.com/apis/credentials/serviceaccountkey?project=my-project-name)
94
+
95
+ ##### Building an Authorization Object
96
+
97
+ With the `.json` key file downloaded, we can build an authorization object:
93
98
 
94
99
  ```ruby
95
- config = CandyCheck::PlayStore::Config.new(
96
- application_name: 'YourApplication',
97
- application_version: '1.0',
98
- issuer: 'abcdefg@developer.gserviceaccount.com',
99
- key_file: 'local/google.p12',
100
- key_secret: 'notasecret',
101
- cache_file: 'tmp/candy_check_play_store_cache'
102
- )
103
- verifier = CandyCheck::PlayStore::Verifier.new(config)
104
- verifier.boot!
100
+ authorization = CandyCheck::PlayStore.authorization("/path/to/key.json")
105
101
  ```
106
102
 
107
- For the PlayStore your client should deliver the purchases token, package name and product id:
103
+ > **Note:** `CandyCheck` provides the `CandyCheck::PlayStore.authorization` method as convenience to build an authorization object. In case you need more control over your authorization object, refer to the [`google-auth-library-ruby`](https://github.com/googleapis/google-auth-library-ruby) docs, which describes building authorization objects in detail.
104
+
105
+ ##### Building a verifier
106
+
107
+ With the `authorization` object in place, we can build a verifier:
108
108
 
109
109
  ```ruby
110
- verifier.verify(package, product_id, token) # => Receipt or VerificationFailure
110
+ verifier = CandyCheck::PlayStore::Verifier.new(authorization: authorization)
111
111
  ```
112
112
 
113
- Please see the class documenations [`CandyCheck::PlayStore::Receipt`](http://www.rubydoc.info/github/jnbt/candy_check/master/CandyCheck/PlayStore/Receipt) and [`CandyCheck::PlayStore::VerificationFailure`](http://www.rubydoc.info/github/jnbt/candy_check/master/CandyCheck/PlayStore/VerificationFailure) for further details about the responses.
113
+ > **Note:** If you need to verify against multiple Google Service Accounts, just instantiate a new verifier with another authorization object that got build with a different `.json` key file.
114
+
115
+ #### Verifying product purchases
116
+
117
+ This `verifier` can be used to verify product purchases in the PlayStore, all you need to do is to pass the `package_name`, `product_id` and `token` of the product purchase you want to verify:
118
+
119
+ ```ruby
120
+ result = verifier.verify_product_purchase(
121
+ package_name: "my-package-name",
122
+ product_id: "my product id",
123
+ token: "my token"
124
+ )
125
+ # => ProductPurchase or VerificationFailure
126
+ ```
127
+
128
+ On success this will return an instance of `CandyCheck::Playstore::ProductPurchases::ProductPurchase`, which is a wrapper for the raw [google-api-ruby-client](https://github.com/googleapis/google-api-ruby-client) data, but additionally provides some handy convenience methods.
129
+ Please see the class documentations [`CandyCheck::PlayStore::ProductPurchases::ProductPurchase`](http://www.rubydoc.info/github/jnbt/candy_check/master/CandyCheck/PlayStore/ProductPurchases/ProductPurchase) and [`CandyCheck::PlayStore::VerificationFailure`](http://www.rubydoc.info/github/jnbt/candy_check/master/CandyCheck/PlayStore/VerificationFailure) for further details about the responses.
130
+
131
+ #### Verifying subscriptions
114
132
 
115
133
  In order to **verify a subscription** from the Play Store, do the following:
116
134
 
117
135
  ```ruby
118
- verifier.verify_subscription(package, subscription_id, token) # => Subscription or VerificationFailure
136
+ result = verifier.verify_subscription_purchase(
137
+ package_name: "my-package-name",
138
+ subscription_id: "my-subscription-id",
139
+ token: "my-token"
140
+ )
141
+ # => SubscriptionPurchase or VerificationFailure
119
142
  ```
120
143
 
121
- Please see documenation for [`CandyCheck::PlayStore::Subscription`](http://www.rubydoc.info/github/jnbt/candy_check/master/CandyCheck/PlayStore/Subscription) for further details.
144
+ Please see documenation for [`CandyCheck::PlayStore::SubscriptionPurchases::SubscriptionPurchase`](http://www.rubydoc.info/github/jnbt/candy_check/master/CandyCheck/PlayStore/SubscriptionPurchases/SubscriptionPurchase) for further details.
122
145
 
123
146
  ## CLI
124
147
 
@@ -144,7 +167,7 @@ For the PlayStore you need to specify at least the issuer, the key file, your pa
144
167
  purchase token:
145
168
 
146
169
  ```bash
147
- $ candy_check play_store PACKAGE PRODUCT_ID TOKEN --issuer=ISSUER --key-file=KEY_FILE
170
+ $ candy_check play_store PACKAGE_NAME PRODUCT_ID TOKEN --json-key-file=/path/to/key.json
148
171
  ```
149
172
 
150
173
  See all options:
@@ -1,36 +1,42 @@
1
1
  # coding: utf-8
2
2
 
3
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path("../lib", __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'candy_check/version'
5
+ require "candy_check/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = 'candy_check'
9
- spec.version = CandyCheck::VERSION
10
- spec.authors = ['Jonas Thiel']
11
- spec.email = ['jonas@thiel.io']
12
- spec.summary = 'Check and verify in-app receipts'
13
- spec.homepage = 'https://github.com/jnbt/candy_check'
14
- spec.license = 'MIT'
8
+ spec.name = "candy_check"
9
+ spec.version = CandyCheck::VERSION
10
+ spec.authors = ["Jonas Thiel", "Christoph Weegen"]
11
+ spec.email = ["jonas@thiel.io"]
12
+ spec.summary = "Check and verify in-app receipts"
13
+ spec.homepage = "https://github.com/jnbt/candy_check"
14
+ spec.license = "MIT"
15
15
 
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ['lib']
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = Gem::Requirement.new('>= 2.0')
21
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.4")
22
22
 
23
- spec.add_dependency 'google-api-client', '~> 0.8.6'
24
- spec.add_dependency 'multi_json', '~> 1.10'
25
- spec.add_dependency 'thor', '~> 0.19'
23
+ spec.add_dependency "google-api-client", "~> 0.34.0"
24
+ spec.add_dependency "multi_json", "~> 1.10"
25
+ spec.add_dependency "thor", "~> 0.19"
26
26
 
27
- spec.add_development_dependency 'bundler', '~> 1.14'
28
- spec.add_development_dependency 'coveralls', '~> 0.8'
29
- spec.add_development_dependency 'inch', '~> 0.7'
30
- spec.add_development_dependency 'minitest', '~> 5.10'
31
- spec.add_development_dependency 'minitest-around', '~> 0.4'
32
- spec.add_development_dependency 'rake', '~> 12.0'
33
- spec.add_development_dependency 'rubocop', '~> 0.48'
34
- spec.add_development_dependency 'timecop', '~> 0.8'
35
- spec.add_development_dependency 'webmock', '~> 3.0'
27
+ spec.add_development_dependency "bundler", "~> 2.0"
28
+ spec.add_development_dependency "coveralls", "~> 0.8"
29
+ spec.add_development_dependency "inch", "~> 0.7"
30
+ spec.add_development_dependency "minitest", "~> 5.10"
31
+ spec.add_development_dependency "minitest-around", "~> 0.4"
32
+ spec.add_development_dependency "minitest-focus"
33
+ spec.add_development_dependency "rake", "~> 12.0"
34
+ spec.add_development_dependency "rubocop", "~> 0.48"
35
+ spec.add_development_dependency "timecop", "~> 0.8"
36
+ spec.add_development_dependency "webmock", "~> 3.0"
37
+ spec.add_development_dependency "vcr"
38
+ spec.add_development_dependency "pry"
39
+ spec.add_development_dependency "awesome_print"
40
+ spec.add_development_dependency "guard"
41
+ spec.add_development_dependency "guard-minitest"
36
42
  end
@@ -1,4 +1,4 @@
1
- require 'thor'
1
+ require "thor"
2
2
 
3
3
  module CandyCheck
4
4
  module CLI
@@ -6,54 +6,37 @@ module CandyCheck
6
6
  # @example
7
7
  # $> candy_check help
8
8
  class App < Thor
9
- package_name 'CandyCheck'
9
+ package_name "CandyCheck"
10
10
 
11
- desc 'app_store RECEIPT_DATA', 'Verify a base64 encoded AppStore receipt'
11
+ desc "app_store RECEIPT_DATA", "Verify a base64 encoded AppStore receipt"
12
12
  method_option :environment,
13
- default: 'production',
13
+ default: "production",
14
14
  type: :string,
15
15
  enum: %w(production sandbox),
16
- aliases: '-e',
17
- desc: 'The environment to use for verfication'
16
+ aliases: "-e",
17
+ desc: "The environment to use for verfication"
18
18
  method_option :secret,
19
- aliases: '-s',
19
+ aliases: "-s",
20
20
  type: :string,
21
- desc: 'The shared secret for auto-renewable subscriptions'
21
+ desc: "The shared secret for auto-renewable subscriptions"
22
+
22
23
  def app_store(receipt)
23
24
  Commands::AppStore.run(receipt, options)
24
25
  end
25
26
 
26
- desc 'play_store PACKAGE PRODUCT_ID TOKEN', 'Verify PlayStore purchase'
27
- method_option :issuer,
28
- required: true,
29
- type: :string,
30
- aliases: '-i',
31
- desc: 'The issuer\'s email address for the API call'
32
- method_option :key_file,
27
+ desc "play_store PACKAGE PRODUCT_ID TOKEN", "Verify PlayStore purchase"
28
+ method_option :json_key_file,
33
29
  required: true,
34
30
  type: :string,
35
- aliases: '-k',
36
- desc: 'The key file to use for API authentication'
37
- method_option :key_secret,
38
- default: 'notasecret',
39
- type: :string,
40
- aliases: '-s',
41
- desc: 'The secret to decrypt the key_file'
42
- method_option :application_name,
43
- default: 'CandyCheck',
44
- type: :string,
45
- aliases: '-a',
46
- desc: 'Your application\'s name'
47
- method_option :application_version,
48
- default: CandyCheck::VERSION,
49
- type: :string,
50
- aliases: '-v',
51
- desc: 'Your application\'s version'
31
+ aliases: "-k",
32
+ desc: "The json key file to use for API authentication"
33
+
52
34
  def play_store(package, product_id, token)
53
35
  Commands::PlayStore.run(package, product_id, token, options)
54
36
  end
55
37
 
56
- desc 'version', 'Print the gem\'s version'
38
+ desc "version", 'Print the gem\'s version'
39
+
57
40
  def version
58
41
  Commands::Version.run
59
42
  end