two_captcha 1.6.0 → 1.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85dec926f62d43f6629fea1232276b55950cac27c107e64d064f6374f571c6b6
4
- data.tar.gz: 9e962be8d8d1dd76f6cfe7644003a042b3bcccf216aa5d820fd057c95d930c22
3
+ metadata.gz: c6657c4e05fd2c0a00072c9070954b73b1a5573ab9a6896301b2836098aeea66
4
+ data.tar.gz: ea035f063342b484e83272b2a75838fa4ce1b4b02b2c25a3a49e53b666ecb0d4
5
5
  SHA512:
6
- metadata.gz: 11dc25d38866f051f13963f460c9b8d5b813d0960b4f1ce8fa3b0c589555d368021cae3994cd1e9d0e6f730940a6921fa91173a70e48a29ec25b7a3903ac814e
7
- data.tar.gz: 762fd992e1b9fa35cfc91baf729d280d123298a46f92b75a6dc03e3b42294184d3a4c84cfc449b5d6d44615f54434c5a1d9c0b565ce1ab7d310cf907996b0d50
6
+ metadata.gz: ab1e833fbf80a57058f7e78a4b6399473fd56606247c34081212cbd9205ba7f9d6ab6a091a415a9db48d7b55ffe736ec2267c48a76adfa02764d3a4373c5d6f5
7
+ data.tar.gz: 525b2cd2321e4e2ac9f35ec56a5f05c3ebc0d95ab7d0564e7c31d0c0a38f9a656e6fb7536224452174d3be10c33d5922d2b4d099e76ee78a678f22a1dfb5d6b1
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
- Developed by [Infosimples](https://infosimples.com).
2
-
3
1
  # TwoCaptcha
4
2
 
5
- TwoCaptcha is a Ruby API for 2Captcha - [2Captcha.com](http://2captcha.com/?from=1025109).
3
+ TwoCaptcha is a Ruby API for 2Captcha - [2Captcha.com](http://2captcha.com/?from=1025109)
4
+
5
+ > We suggest you to also check the recommended CAPTCHA provider DeathByCaptcha.
6
+ > The gem for this provider is available at https://github.com/infosimples/deathbycaptcha.
6
7
 
7
8
  ## Installation
8
9
 
@@ -14,249 +15,197 @@ gem 'two_captcha'
14
15
 
15
16
  And then execute:
16
17
 
17
- $ bundle
18
+ ```bash
19
+ $ bundle
20
+ ````
18
21
 
19
22
  Or install it yourself as:
20
23
 
21
- $ gem install two_captcha
24
+ ```bash
25
+ $ gem install two_captcha
26
+ ````
22
27
 
23
28
  ## Usage
24
29
 
25
- 1. **Create a client**
26
-
27
- ```ruby
28
- # Create a client
29
- client = TwoCaptcha.new('my_captcha_key')
30
- ```
31
-
32
- 2. **Solve a captcha**
33
-
34
- There are two methods available: **decode** and **decode!**
35
- * **decode** doesn't raise exceptions.
36
- * **decode!** may raise a *TwoCaptcha::Error* if something goes wrong.
37
-
38
- If the solution is not available, an empty captcha object will be returned.
39
-
40
- ```ruby
41
- captcha = client.decode!(url: 'http://bit.ly/1xXZcKo')
42
- captcha.text # Solution of the captcha
43
- captcha.id # Numeric ID of the captcha solved by TwoCaptcha
44
- ```
45
-
46
- You can also specify *path*, *file*, *raw* and *raw64* when decoding an image.
47
-
48
- ```ruby
49
- client.decode(path: 'path/to/my/captcha/file')
50
-
51
- client.decode(file: File.open('path/to/my/captcha/file', 'rb'))
52
-
53
- client.decode(raw: File.open('path/to/my/captcha/file', 'rb').read)
54
-
55
- client.decode(raw64: Base64.encode64(File.open('path/to/my/captcha/file', 'rb').read))
56
- ```
57
-
58
- > Internally, the gem will always convert the image to raw64 (binary base64 encoded).
59
-
60
- You may also specify any POST parameters specified at
61
- https://2captcha.com/setting.
30
+ ### 1. Create a client
62
31
 
63
- 3. **Retrieve a previously solved captcha**
64
-
65
- ```ruby
66
- captcha = client.captcha('130920620') # with 130920620 as the captcha id
67
- ```
68
-
69
- 4. **Report incorrectly (for refund) or correctly (useful for reCAPTCHA v3) solved captcha**
70
-
71
- ```ruby
72
- client.report!('130920620', 'reportbad') # with 130920620 as the captcha id
73
- # return true if successfully reported
74
-
75
- client.report!('256892751', 'reportgood') # with 256892751 as the captcha id
76
- # return true if successfully reported
77
- ```
78
-
79
- > ***Warning:*** *do not abuse on this method, otherwise you may get banned*
80
-
81
- 5. **Get your balance on 2Captcha**
82
-
83
- ```ruby
84
- client.balance
85
- # return a Float balance in USD.
86
- ```
32
+ ```ruby
33
+ client = TwoCaptcha.new('my_key')
34
+ ```
87
35
 
88
- 6. **Get usage statistics for a specific date**
36
+ ### 2. Solve a CAPTCHA
89
37
 
90
- ```ruby
91
- client.stats('2015-08-05')
92
- # return an XML string with your usage statistics.
93
- ```
38
+ There are two types of methods available: `decode` and `decode!`:
94
39
 
95
- 7. **Get current 2Captcha load**
40
+ - `decode` does not raise exceptions.
41
+ - `decode!` may raise a `TwoCaptcha::Error` if something goes wrong.
96
42
 
97
- ```ruby
98
- client.load
99
- # return an XML string with the current service load.
100
- ```
43
+ If the solution is not available, an empty solution object will be returned.
101
44
 
102
- ## reCAPTCHA v2 (e.g. "No CAPTCHA reCAPTCHA")
45
+ ```ruby
46
+ captcha = client.decode_image!(url: 'http://bit.ly/1xXZcKo')
47
+ captcha.text # CAPTCHA solution
48
+ captcha.id # CAPTCHA numeric id
49
+ ```
103
50
 
104
- There are two ways of solving captchas similar to
105
- [reCAPTCHA v2](https://support.google.com/recaptcha/?hl=en#6262736).
51
+ #### Image CAPTCHA
106
52
 
107
- ### (Prefered) Sending the `googlekey` and `pageurl` parameters
53
+ You can specify `file`, `path`, `raw`, `raw64` and `url` when decoding an image.
108
54
 
109
- This method requires no browser emulation. You can send two parameters that
110
- identify the website in which the captcha is found.
55
+ ```ruby
56
+ client.decode_image!(file: File.open('path/to/my/captcha/file', 'rb'))
57
+ client.decode_image!(path: 'path/to/my/captcha/file')
58
+ client.decode_image!(raw: File.open('path/to/my/captcha/file', 'rb').read)
59
+ client.decode_image!(raw64: Base64.encode64(File.open('path/to/my/captcha/file', 'rb').read))
60
+ client.decode_image!(url: 'http://bit.ly/1xXZcKo')
61
+ ```
111
62
 
112
- Please read the [oficial documentation](https://2captcha.com/newapi-recaptcha-en)
113
- for more information.
63
+ You may also specify any POST parameters specified at https://2captcha.com/setting.
114
64
 
115
- ```ruby
116
- options = {
117
- googlekey: 'xyz',
118
- pageurl: 'http://example.com/example=1'
119
- }
65
+ #### reCAPTCHA v2
120
66
 
121
- captcha = client.decode_recaptcha_v2(options)
122
- captcha.text # Solution of the captcha
123
- captcha.id # Numeric ID of the captcha solved by TwoCaptcha
124
- ```
67
+ ```ruby
68
+ captcha = client.decode_recaptcha_v2!(
69
+ googlekey: 'xyz',
70
+ pageurl: 'http://example.com/example=1',
71
+ )
125
72
 
126
- The solution (`captcha.text`) will be a code that validates the form, like the
127
- following:
73
+ # The response will be a text (token), which you can access with the `text` method.
128
74
 
129
- ```ruby
130
- "1JJHJ_VuuHAqJKxcaasbTsqw-L1Sm4gD57PTeaEr9-MaETG1vfu2H5zlcwkjsRoZoHxx6V9yUDw8Ig-hYD8kakmSnnjNQd50w_Y_tI3aDLp-s_7ZmhH6pcaoWWsid5hdtMXyvrP9DscDuCLBf7etLle8caPWSaYCpAq9DOTtj5NpSg6-OeCJdGdkjsakFUMeGeqmje87wSajcjmdjl_w4XZBY2zy8fUH6XoAGZ6AeCTulIljBQDObQynKDd-rutPvKNxZasDk-LbhTfw508g1lu9io6jnvm3kbAdnkfZ0x0PkGiUMHU7hnuoW6bXo2Yn_Zt5tDWL7N7wFtY6B0k7cTy73f8er508zReOuoyz2NqL8smDCmcJu05ajkPGt20qzpURMwHaw"
131
- ```
75
+ captcha.text
76
+ "03AOPBWq_RPO2vLzyk0h8gH0cA2X4v3tpYCPZR6Y4yxKy1s3Eo7CHZRQntxrd..."
77
+ ```
132
78
 
133
- ### Sending the challenge image
79
+ *Parameters:*
134
80
 
135
- You can add the param `coordinatescaptcha: 1` to your request.
81
+ - `googlekey`: the Google key for the reCAPTCHA.
82
+ - `pageurl`: the URL of the page with the reCAPTCHA challenge.
136
83
 
137
- Please read the oficial documentation at https://2captcha.com/en-api-recaptcha for
138
- more information.
139
84
 
140
- ```ruby
141
- client.decode(url: 'http://bit.ly/clickcaptcha', coordinatescaptcha: 1)
142
- ```
85
+ #### reCAPTCHA v3
143
86
 
144
- **Captcha (screenshot)**
87
+ ```ruby
88
+ captcha = client.decode_recaptcha_v3!(
89
+ googlekey: 'xyz',
90
+ pageurl: 'http://example.com/example=1',
91
+ action: 'verify',
92
+ min_score: 0.3, # OPTIONAL
93
+ )
145
94
 
146
- > the argument is passed as *url*, *path*, *file*, *raw* or *raw64*
95
+ # The response will be a text (token), which you can access with the `text` method.
147
96
 
148
- ![Example of a captcha based on image clicks](captchas/2.jpg)
97
+ captcha.text
98
+ "03AOPBWq_RPO2vLzyk0h8gH0cA2X4v3tpYCPZR6Y4yxKy1s3Eo7CHZRQntxrd..."
99
+ ```
149
100
 
150
- The response will be an array containing coordinates where the captcha should be
151
- clicked. For the captcha above it should look something like:
101
+ *Parameters:*
152
102
 
153
- ```ruby
154
- # captcha.text
155
- "coordinates:x=50.66999816894531,y=130.3300018310547;x=236.66998291015625,y=328.3299865722656"
156
- ```
103
+ - `googlekey`: the Google key for the reCAPTCHA.
104
+ - `pageurl`: the URL of the page with the reCAPTCHA challenge.
105
+ - `action`: the action name used by the CAPTCHA.
106
+ - `min_score`: optional parameter. The minimal score needed for the CAPTCHA resolution. Defaults to `0.3`.
157
107
 
158
- ## Audio reCAPTCHA v2
108
+ > About the `action` parameter: in order to find out what this is, you need to inspect the JavaScript
109
+ > code of the website looking for a call to the `grecaptcha.execute` function.
110
+ >
111
+ > ```javascript
112
+ > // Example
113
+ > grecaptcha.execute('6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f', { action: "examples/v3scores" })
114
+ > ````
159
115
 
160
- ```ruby
161
- client.decode(url: 'http://bit.ly/audiorecaptchav2', recaptchavoice: 1)
162
- ```
116
+ > About the `min_score` parameter: it's strongly recommended to use a minimum score of `0.3` as higher
117
+ > scores are rare.
163
118
 
164
- The response will be a simple text:
119
+ #### hCaptcha
165
120
 
166
121
  ```ruby
167
- # captcha.text
168
- '61267'
122
+ captcha = client.decode_hcaptcha!(
123
+ sitekey: 'xyz',
124
+ pageurl: 'http://example.com/example=1',
125
+ )
126
+
127
+ captcha.text
128
+ "P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V5IjoiNnpWV..."
169
129
  ```
170
130
 
171
- ## reCAPTCHA v3
131
+ *Parameters:*
172
132
 
173
- This method requires no browser emulation. You can send four parameters that
174
- identify the website in which the CAPTCHA is found and the minimum score
175
- (0.3, 0.5 or 0.7) you desire.
133
+ - `website_key`: the site key for the hCatpcha.
134
+ - `website_url`: the URL of the page with the hCaptcha challenge.
176
135
 
177
- **It's strongly recommended to use a minimum score of 0.3 as higher scores are extremely rare.**
136
+ ### 3. Using proxy or other custom options
178
137
 
179
- Please read the [oficial documentation](https://2captcha.com/2captcha-api#solving_recaptchav3)
180
- for more information.
138
+ You are allowed to use custom options like `proxy`, `proxytype` or `userAgent` whenever the
139
+ 2Captcha API supports it. Example:
181
140
 
182
141
  ```ruby
183
142
  options = {
184
- googlekey: 'xyz',
143
+ sitekey: 'xyz',
185
144
  pageurl: 'http://example.com/example=1',
186
- action: 'verify',
187
- min_score: 0.3
145
+ proxy: 'login:password@123.123.123.123:3128',
146
+ userAgent: 'user agent',
188
147
  }
189
148
 
190
- captcha = client.decode_recaptcha_v3(options)
191
- captcha.text # Solution of the captcha
192
- captcha.id # Numeric ID of the captcha solved by TwoCaptcha
149
+ captcha = client.decode_hcaptcha!(options)
193
150
  ```
194
151
 
195
- The solution (`captcha.text`) will be a code that validates the form, like the
196
- following:
152
+ ### 4. Retrieve a previously solved CAPTCHA
197
153
 
198
- ```ruby
199
- "1JJHJ_VuuHAqJKxcaasbTsqw-L1Sm4gD57PTeaEr9-MaETG1vfu2H5zlcwkjsRoZoHxx6V9yUDw8Ig-hYD8kakmSnnjNQd50w_Y_tI3aDLp-s_7ZmhH6pcaoWWsid5hdtMXyvrP9DscDuCLBf7etLle8caPWSaYCpAq9DOTtj5NpSg6-OeCJdGdkjsakFUMeGeqmje87wSajcjmdjl_w4XZBY2zy8fUH6XoAGZ6AeCTulIljBQDObQynKDd-rutPvKNxZasDk-LbhTfw508g1lu9io6jnvm3kbAdnkfZ0x0PkGiUMHU7hnuoW6bXo2Yn_Zt5tDWL7N7wFtY6B0k7cTy73f8er508zReOuoyz2NqL8smDCmcJu05ajkPGt20qzpURMwHaw"
200
- ```
154
+ ```ruby
155
+ captcha = client.captcha('130920620') # with 130920620 being the CAPTCHA id
156
+ ```
201
157
 
202
- ## hCaptcha
158
+ ### 5. Report an incorrectly solved CAPTCHA for a refund
203
159
 
204
- This method allows you to solve hCaptcha.
160
+ ```ruby
161
+ client.report!('130920620', 'reportbad') # with 130920620 being the CAPTCHA id
162
+ # returns `true` if successfully reported
205
163
 
206
- There are two methods available:
164
+ client.report!('256892751', 'reportgood') # with 256892751 being the CAPTCHA id
165
+ # returns `true` if successfully reported
166
+ ```
207
167
 
208
- - `decode_hcaptcha`: solves hCaptcha CAPTCHAs. It doesn't raise exceptions.
209
- - `decode_hcaptcha!`: solves hCaptcha CAPTCHAs. It may raise an error if something goes wrong.
168
+ ### 6. Get your account balance
210
169
 
211
- **Send the `sitekey` and `pageurl` parameters**
170
+ ```ruby
171
+ client.balance
172
+ # returns a Float balance in USD.
173
+ ```
212
174
 
213
- This method requires no browser emulation. You can send two parameters that
214
- identify the website in which the CAPTCHA is found.
175
+ ### 7. Get usage statistics for a specific date
215
176
 
216
- ```ruby
217
- options = {
218
- sitekey: 'xyz',
219
- pageurl: 'http://example.com/example=1'
220
- }
221
-
222
- captcha = client.decode_hcaptcha!(options)
223
- captcha.text # Solution of the captcha
224
- ```
177
+ ```ruby
178
+ client.stats(Date.new(2022, 10, 7))
179
+ # returns an XML string with your usage statistics.
180
+ ```
225
181
 
226
182
  ## Notes
227
183
 
228
- #### Thread-safety
184
+ ### Thread-safety
229
185
 
230
186
  The API is thread-safe, which means it is perfectly fine to share a client
231
187
  instance between multiple threads.
232
188
 
233
- #### Ruby dependencies
189
+ ### Ruby dependencies
234
190
 
235
191
  TwoCaptcha don't require specific dependencies. That saves you memory and
236
192
  avoid conflicts with other gems.
237
193
 
238
- #### Input image format
194
+ ### Input image format
239
195
 
240
- Any format you use in the decode method (url, file, path, raw, raw64) will
241
- always be converted to a raw64, which is a binary base64 encoded string. So, if
242
- you already have this format available on your side, there's no need to do
243
- convertions before calling the API.
196
+ Any format you use in the `decode_image!` method (`url`, `file`, `path`, `raw` or `raw64`)
197
+ will always be converted to a `raw64`, which is a base64-encoded binary string.
198
+ So, if you already have this format on your end, there is no need for convertions
199
+ before calling the API.
244
200
 
245
201
  > Our recomendation is to never convert your image format, unless needed. Let
246
202
  > the gem convert internally. It may save you resources (CPU, memory and IO).
247
203
 
248
- #### Versioning
204
+ ### Versioning
249
205
 
250
206
  TwoCaptcha gem uses [Semantic Versioning](http://semver.org/).
251
207
 
252
- #### Tested Ruby versions
253
-
254
- * MRI 2.2.2
255
- * MRI 2.2.0
256
- * MRI 2.1.4
257
- * MRI 2.0.0
258
-
259
- ## Contributing
208
+ ### Contributing
260
209
 
261
210
  1. Fork it ( https://github.com/infosimples/two_captcha/fork )
262
211
  2. Create your feature branch (`git checkout -b my-new-feature`)
@@ -272,4 +221,4 @@ https://github.com/infosimples/two_captcha/graphs/contributors
272
221
 
273
222
  # License
274
223
 
275
- MIT License. Copyright (C) 2011-2015 Infosimples. https://infosimples.com/
224
+ MIT License. Copyright (C) 2011-2022 Infosimples. https://infosimples.com/
@@ -18,9 +18,9 @@ module TwoCaptcha
18
18
  # @return [TwoCaptcha::Client] A Client instance.
19
19
  #
20
20
  def initialize(key, options = {})
21
- self.key = key
22
- self.timeout = options[:timeout] || 60
23
- self.polling = options[:polling] || 5
21
+ self.key = key
22
+ self.timeout = options[:timeout] || 60
23
+ self.polling = options[:polling] || 5
24
24
  end
25
25
 
26
26
  # Decode the text from an image (i.e. solve a captcha).
@@ -30,11 +30,12 @@ module TwoCaptcha
30
30
  # @return [TwoCaptcha::Captcha] The captcha (with solution) or an empty
31
31
  # captcha instance if something goes wrong.
32
32
  #
33
- def decode(options = {})
34
- decode!(options)
33
+ def decode_image(options = {})
34
+ decode_image!(options)
35
35
  rescue TwoCaptcha::Error => ex
36
36
  TwoCaptcha::Captcha.new
37
37
  end
38
+ alias :decode :decode_image
38
39
 
39
40
  # Decode the text from an image (i.e. solve a captcha).
40
41
  #
@@ -60,7 +61,7 @@ module TwoCaptcha
60
61
  # @return [TwoCaptcha::Captcha] The captcha (with solution) if an error is
61
62
  # not raised.
62
63
  #
63
- def decode!(options = {})
64
+ def decode_image!(options = {})
64
65
  started_at = Time.now
65
66
 
66
67
  raw64 = load_captcha(options)
@@ -77,6 +78,7 @@ module TwoCaptcha
77
78
 
78
79
  decoded_captcha
79
80
  end
81
+ alias :decode! :decode_image!
80
82
 
81
83
  #
82
84
  # Solve reCAPTCHA v2.
@@ -105,11 +107,7 @@ module TwoCaptcha
105
107
 
106
108
  fail(TwoCaptcha::GoogleKey) if options[:googlekey].empty?
107
109
 
108
- upload_options = {
109
- method: 'userrecaptcha',
110
- googlekey: options[:googlekey],
111
- pageurl: options[:pageurl]
112
- }
110
+ upload_options = { method: 'userrecaptcha' }.merge(options)
113
111
  decoded_captcha = upload(upload_options)
114
112
 
115
113
  # pool untill the answer is ready
@@ -152,13 +150,9 @@ module TwoCaptcha
152
150
  fail(TwoCaptcha::GoogleKey) if options[:googlekey].empty?
153
151
 
154
152
  upload_options = {
155
- method: 'userrecaptcha',
156
- version: 'v3',
157
- googlekey: options[:googlekey],
158
- pageurl: options[:pageurl],
159
- action: options[:action],
160
- min_score: options[:min_score]
161
- }
153
+ method: 'userrecaptcha',
154
+ version: 'v3',
155
+ }.merge(options)
162
156
  decoded_captcha = upload(upload_options)
163
157
 
164
158
  # pool untill the answer is ready
@@ -196,13 +190,9 @@ module TwoCaptcha
196
190
  def decode_hcaptcha!(options = {})
197
191
  started_at = Time.now
198
192
 
199
- fail(TwoCaptcha::GoogleKey) if options[:sitekey].empty?
193
+ fail(TwoCaptcha::SiteKey) if options[:sitekey].empty?
200
194
 
201
- upload_options = {
202
- method: 'hcaptcha',
203
- sitekey: options[:sitekey],
204
- pageurl: options[:pageurl]
205
- }
195
+ upload_options = { method: 'hcaptcha' }.merge(options)
206
196
  decoded_captcha = upload(upload_options)
207
197
 
208
198
  # pool untill the answer is ready
@@ -1,4 +1,4 @@
1
1
  module TwoCaptcha
2
- VERSION = '1.6.0'
2
+ VERSION = '1.8.0'
3
3
  USER_AGENT = "TwoCaptcha/Ruby v#{VERSION}"
4
4
  end
data/two_captcha.gemspec CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.8"
26
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "bundler", ">= 2.2.33"
26
+ spec.add_development_dependency "rake", ">= 12.3.3"
27
27
  spec.add_development_dependency "rspec", "~> 3.1"
28
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: two_captcha
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Barbolo
@@ -9,36 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-26 00:00:00.000000000 Z
12
+ date: 2022-10-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '1.8'
20
+ version: 2.2.33
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '1.8'
27
+ version: 2.2.33
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '10.0'
34
+ version: 12.3.3
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '10.0'
41
+ version: 12.3.3
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubygems_version: 3.0.6
106
+ rubygems_version: 3.1.4
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: Ruby API for 2Captcha (Captcha Solver as a Service)