peatio-thought 2.4.0 → 2.6.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1add76b96637690473fdf4854d17c6b2d32f2c6f6687f9388969ba52d10c68b4
4
- data.tar.gz: 7879b55634d80b26f28dbed9d0a5afd44e1f73b939b423da2f53b1f2288d9c24
3
+ metadata.gz: 3863bcba08ebff661b9bcd89a85b17dc3af9ed90ea3dafe80ae8fa57edf97e4f
4
+ data.tar.gz: 0a7f7d64cdd64c8aae0b9dc296685305335b12f763f04af5c6fa248cdc3c7ec7
5
5
  SHA512:
6
- metadata.gz: 9c1ae5f26117fe38958458570c23e11fb2ea75b8268f22f7dd4da2af90f5ebbf389e34a8b8fcffd5a96e4690f34cf5ab2248539f04bfbd2d71e3de6aa2835685
7
- data.tar.gz: f6f01b1940b719f450bfd634cf4dbcc87f777872c38c006f23b599cf371f3f4480b3ca450560d2d1c50706eca23da1803edbc77d662235956d0a9e8c5be5ecf3
6
+ metadata.gz: b1a1f9a61d6ef4e994a9ee80d571382e8988f3777f527d7132e2ba4152a1a4a47ab80d935cf120b5e107e99d1ea9ce938c9b6c3e3fc6e103c6fb243f0ca2f9d5
7
+ data.tar.gz: 589c25150d4d1673855f196570a6f3cb761fa4aade4d30bcb57a7873e91f1e1ec975edc34349d563b34abf64930501616229f9a1735f215a70fa99f2ced5d5cb
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- peatio-thought (2.4.0)
4
+ peatio-thought (2.6.7.1)
5
5
  activesupport (~> 5.2.3)
6
6
  better-faraday (~> 1.0.5)
7
- faraday (~> 0.15.4)
7
+ faraday (~> 0.17)
8
8
  memoist (~> 0.16.0)
9
9
  net-http-persistent (~> 3.0.1)
10
10
  peatio (>= 0.6.3)
@@ -12,134 +12,179 @@ PATH
12
12
  GEM
13
13
  remote: https://rubygems.org/
14
14
  specs:
15
- activemodel (5.2.3)
16
- activesupport (= 5.2.3)
17
- activesupport (5.2.3)
15
+ activemodel (5.2.4.4)
16
+ activesupport (= 5.2.4.4)
17
+ activesupport (5.2.4.4)
18
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
19
  i18n (>= 0.7, < 2)
20
20
  minitest (~> 5.1)
21
21
  tzinfo (~> 1.1)
22
22
  addressable (2.7.0)
23
23
  public_suffix (>= 2.0.2, < 5.0)
24
- amq-protocol (2.3.0)
24
+ amq-protocol (2.3.2)
25
25
  amqp (1.8.0)
26
26
  amq-protocol (>= 2.2.0)
27
27
  eventmachine
28
- ast (2.4.0)
28
+ ast (2.4.1)
29
29
  better-faraday (1.0.8)
30
30
  activesupport (>= 4.0, < 6.0)
31
31
  faraday (~> 0.12)
32
- bunny (2.14.3)
33
- amq-protocol (~> 2.3, >= 2.3.0)
34
- byebug (11.0.1)
35
- clamp (1.3.1)
36
- coderay (1.1.2)
37
- concurrent-ruby (1.1.5)
38
- connection_pool (2.2.2)
39
- crack (0.4.3)
40
- safe_yaml (~> 1.0.0)
41
- diff-lcs (1.3)
32
+ bunny (2.17.0)
33
+ amq-protocol (~> 2.3, >= 2.3.1)
34
+ byebug (11.1.3)
35
+ clamp (1.3.2)
36
+ coderay (1.1.3)
37
+ concurrent-ruby (1.1.7)
38
+ connection_pool (2.2.3)
39
+ cookiejar (0.3.3)
40
+ crack (0.4.4)
41
+ daemons (1.3.1)
42
+ diff-lcs (1.4.4)
42
43
  docile (1.3.2)
43
- em-websocket (0.5.1)
44
+ em-http-request (1.1.7)
45
+ addressable (>= 2.3.4)
46
+ cookiejar (!= 0.3.1)
47
+ em-socksify (>= 0.3)
48
+ eventmachine (>= 1.0.3)
49
+ http_parser.rb (>= 0.6.0)
50
+ em-socksify (0.3.2)
51
+ eventmachine (>= 1.0.0.beta.4)
52
+ em-synchrony (1.0.6)
53
+ eventmachine (>= 1.0.0.beta.1)
54
+ em-websocket (0.5.2)
44
55
  eventmachine (>= 0.12.9)
45
56
  http_parser.rb (~> 0.6.0)
46
57
  eventmachine (1.2.7)
47
- faraday (0.15.4)
58
+ faraday (0.17.3)
48
59
  multipart-post (>= 1.2, < 3)
49
- hashdiff (1.0.0)
60
+ faraday_middleware (0.13.1)
61
+ faraday (>= 0.7.4, < 1.0)
62
+ faye (1.4.0)
63
+ cookiejar (>= 0.3.0)
64
+ em-http-request (>= 1.1.6)
65
+ eventmachine (>= 0.12.0)
66
+ faye-websocket (>= 0.11.0)
67
+ multi_json (>= 1.0.0)
68
+ rack (>= 1.0.0)
69
+ websocket-driver (>= 0.5.1)
70
+ faye-websocket (0.11.0)
71
+ eventmachine (>= 0.12.0)
72
+ websocket-driver (>= 0.5.1)
73
+ hashdiff (1.0.1)
50
74
  http_parser.rb (0.6.0)
51
- i18n (1.7.0)
75
+ i18n (1.8.5)
52
76
  concurrent-ruby (~> 1.0)
53
- irb (1.0.0)
77
+ io-console (0.5.6)
78
+ irb (1.2.7)
79
+ reline (>= 0.1.5)
54
80
  jaro_winkler (1.5.4)
55
- json (2.2.0)
56
- jwt (2.2.1)
57
- memoist (0.16.1)
58
- metaclass (0.0.4)
59
- method_source (0.9.2)
60
- minitest (5.13.0)
61
- mocha (1.9.0)
62
- metaclass (~> 0.0.1)
81
+ jwt (2.2.2)
82
+ memoist (0.16.2)
83
+ method_source (1.0.0)
84
+ minitest (5.14.2)
85
+ mocha (1.11.2)
86
+ multi_json (1.15.0)
63
87
  multipart-post (2.1.1)
64
- mysql2 (0.5.2)
88
+ mysql2 (0.5.3)
65
89
  net-http-persistent (3.0.1)
66
90
  connection_pool (~> 2.2)
67
- parallel (1.19.0)
68
- parser (2.6.5.0)
69
- ast (~> 2.4.0)
70
- peatio (0.6.3)
91
+ parallel (1.20.0)
92
+ parser (2.7.2.0)
93
+ ast (~> 2.4.1)
94
+ peatio (2.6.2)
71
95
  activemodel (> 5.2, <= 6.0.0)
72
96
  amqp
73
97
  bunny
74
98
  clamp
99
+ em-synchrony (~> 1.0)
75
100
  em-websocket
76
101
  eventmachine
102
+ faraday_middleware (~> 0.13.1)
103
+ faye (~> 1.2)
77
104
  jwt
78
105
  mysql2
79
- pry (0.12.2)
80
- coderay (~> 1.1.0)
81
- method_source (~> 0.9.0)
82
- pry-byebug (3.7.0)
106
+ prometheus-client
107
+ thin
108
+ prometheus-client (2.1.0)
109
+ pry (0.13.1)
110
+ coderay (~> 1.1)
111
+ method_source (~> 1.0)
112
+ pry-byebug (3.9.0)
83
113
  byebug (~> 11.0)
84
- pry (~> 0.10)
85
- public_suffix (4.0.1)
114
+ pry (~> 0.13.0)
115
+ public_suffix (4.0.6)
116
+ rack (2.2.3)
86
117
  rainbow (3.0.0)
87
- rake (10.5.0)
88
- rspec (3.9.0)
89
- rspec-core (~> 3.9.0)
90
- rspec-expectations (~> 3.9.0)
91
- rspec-mocks (~> 3.9.0)
92
- rspec-core (3.9.0)
93
- rspec-support (~> 3.9.0)
94
- rspec-expectations (3.9.0)
118
+ rake (13.0.1)
119
+ reline (0.1.8)
120
+ io-console (~> 0.5)
121
+ rexml (3.2.4)
122
+ rspec (3.10.0)
123
+ rspec-core (~> 3.10.0)
124
+ rspec-expectations (~> 3.10.0)
125
+ rspec-mocks (~> 3.10.0)
126
+ rspec-core (3.10.0)
127
+ rspec-support (~> 3.10.0)
128
+ rspec-expectations (3.10.0)
95
129
  diff-lcs (>= 1.2.0, < 2.0)
96
- rspec-support (~> 3.9.0)
97
- rspec-mocks (3.9.0)
130
+ rspec-support (~> 3.10.0)
131
+ rspec-mocks (3.10.0)
98
132
  diff-lcs (>= 1.2.0, < 2.0)
99
- rspec-support (~> 3.9.0)
100
- rspec-support (3.9.0)
101
- rubocop (0.76.0)
133
+ rspec-support (~> 3.10.0)
134
+ rspec-support (3.10.0)
135
+ rubocop (0.82.0)
102
136
  jaro_winkler (~> 1.5.1)
103
137
  parallel (~> 1.10)
104
- parser (>= 2.6)
138
+ parser (>= 2.7.0.1)
105
139
  rainbow (>= 2.2.2, < 4.0)
140
+ rexml
106
141
  ruby-progressbar (~> 1.7)
107
- unicode-display_width (>= 1.4.0, < 1.7)
108
- rubocop-github (0.13.0)
109
- rubocop (~> 0.70)
110
- rubocop-performance (~> 1.3.0)
111
- rubocop-performance (1.3.0)
112
- rubocop (>= 0.68.0)
142
+ unicode-display_width (>= 1.4.0, < 2.0)
143
+ rubocop-github (0.16.0)
144
+ rubocop (<= 0.82.0)
145
+ rubocop-performance (~> 1.0)
146
+ rubocop-rails (~> 2.0)
147
+ rubocop-performance (1.7.1)
148
+ rubocop (>= 0.82.0)
149
+ rubocop-rails (2.6.0)
150
+ activesupport (>= 4.2.0)
151
+ rack (>= 1.1)
152
+ rubocop (>= 0.82.0)
113
153
  ruby-progressbar (1.10.1)
114
- safe_yaml (1.0.5)
115
- simplecov (0.17.1)
154
+ simplecov (0.19.1)
116
155
  docile (~> 1.1)
117
- json (>= 1.8, < 3)
118
- simplecov-html (~> 0.10.0)
119
- simplecov-html (0.10.2)
156
+ simplecov-html (~> 0.11)
157
+ simplecov-html (0.12.3)
158
+ thin (1.8.0)
159
+ daemons (~> 1.0, >= 1.0.9)
160
+ eventmachine (~> 1.0, >= 1.0.4)
161
+ rack (>= 1, < 3)
120
162
  thread_safe (0.3.6)
121
- tzinfo (1.2.5)
163
+ tzinfo (1.2.8)
122
164
  thread_safe (~> 0.1)
123
- unicode-display_width (1.6.0)
124
- webmock (3.7.6)
165
+ unicode-display_width (1.7.0)
166
+ webmock (3.10.0)
125
167
  addressable (>= 2.3.6)
126
168
  crack (>= 0.3.2)
127
169
  hashdiff (>= 0.4.0, < 2.0.0)
170
+ websocket-driver (0.7.3)
171
+ websocket-extensions (>= 0.1.0)
172
+ websocket-extensions (0.1.5)
128
173
 
129
174
  PLATFORMS
130
175
  ruby
131
176
 
132
177
  DEPENDENCIES
133
- bundler (~> 1.17)
178
+ bundler (~> 2.1.3)
134
179
  irb
135
180
  mocha (~> 1.8)
136
181
  peatio-thought!
137
182
  pry-byebug
138
- rake (~> 10.0)
183
+ rake (~> 13.0)
139
184
  rspec (~> 3.0)
140
185
  rubocop-github
141
186
  simplecov
142
187
  webmock (~> 3.5)
143
188
 
144
189
  BUNDLED WITH
145
- 1.17.3
190
+ 2.1.4
@@ -28,10 +28,11 @@ module Peatio
28
28
  txs_array.append(*txs)
29
29
  end
30
30
 
31
- Peatio::Block.new(block_number, block_txs)
32
- rescue Client::Error => e
33
- raise Peatio::Blockchain::ClientError, e
34
- end
31
+ Peatio::Block.new(block_number, txs_array)
32
+ rescue Client::Error => e
33
+ raise Peatio::Blockchain::ClientError, e
34
+ end
35
+
35
36
 
36
37
  def latest_block_number
37
38
  client.json_rpc(:getblockcount)
@@ -44,42 +45,42 @@ module Peatio
44
45
  .flatten(1)
45
46
  .find {|addr| addr[0] == address }
46
47
 
47
- raise Peatio::Blockchain::UnavailableAddressBalanceError, address if address_with_balance.blank?
48
-
49
- address_with_balance[1].to_d
50
- rescue Client::Error => e
51
- raise Peatio::Blockchain::ClientError, e
52
- end
53
-
54
- private
55
-
56
- def filter_vout(tx_hash)
57
- tx_hash.fetch("vout").select do |entry|
58
- entry.fetch("value").to_d.positive? && entry["scriptPubKey"].has_key?("addresses")
59
- end
60
- end
61
-
62
- def build_transaction(tx_hash)
63
- filter_vout(tx_hash).each_with_object([]) do |entry, formatted_txs|
64
- no_currency_tx = {hash: tx_hash["txid"], txout: entry["n"],
65
- to_address: entry["scriptPubKey"]["addresses"][0],
66
- amount: entry.fetch("value").to_d,
67
- status: "success"}
68
-
69
- # Build transaction for each currency belonging to blockchain.
70
- settings_fetch(:currencies).pluck(:id).each do |currency_id|
71
- formatted_txs << no_currency_tx.merge(currency_id: currency_id)
72
- end
73
- end
74
- end
75
-
76
- def client
77
- @client ||= Client.new(settings_fetch(:server))
78
- end
79
-
80
- def settings_fetch(key)
81
- @settings.fetch(key) { raise Peatio::Blockchain::MissingSettingError, key.to_s }
82
- end
83
- end
84
- end
85
- end
48
+ raise Peatio::Blockchain::UnavailableAddressBalanceError, address if address_with_balance.blank?
49
+
50
+ address_with_balance[1].to_d
51
+ rescue Client::Error => e
52
+ raise Peatio::Blockchain::ClientError, e
53
+ end
54
+
55
+ private
56
+
57
+ def filter_vout(tx_hash)
58
+ tx_hash.fetch("vout").select do |entry|
59
+ entry.fetch("value").to_d.positive? && entry["scriptPubKey"].has_key?("addresses")
60
+ end
61
+ end
62
+
63
+ def build_transaction(tx_hash)
64
+ filter_vout(tx_hash).each_with_object([]) do |entry, formatted_txs|
65
+ no_currency_tx = {hash: tx_hash["txid"], txout: entry["n"],
66
+ to_address: entry["scriptPubKey"]["addresses"][0],
67
+ amount: entry.fetch("value").to_d,
68
+ status: "success"}
69
+
70
+ # Build transaction for each currency belonging to blockchain.
71
+ settings_fetch(:currencies).pluck(:id).each do |currency_id|
72
+ formatted_txs << no_currency_tx.merge(currency_id: currency_id)
73
+ end
74
+ end
75
+ end
76
+
77
+ def client
78
+ @client ||= Client.new(settings_fetch(:server))
79
+ end
80
+
81
+ def settings_fetch(key)
82
+ @settings.fetch(key) { raise Peatio::Blockchain::MissingSettingError, key.to_s }
83
+ end
84
+ end
85
+ end
86
+ end
@@ -1,71 +1,56 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "memoist"
4
- require "faraday"
5
- require "better-faraday"
3
+ require 'memoist'
4
+ require 'faraday'
5
+ require 'better-faraday'
6
6
 
7
7
  module Peatio
8
8
  module Thought
9
9
  class Client
10
- Error = Class.new(StandardError)
11
- class ConnectionError < Error; end
10
+ Error = Class.new(StandardError)
12
11
 
13
- class ResponseError < Error
14
- def initialize(code, msg)
15
- @code = code
16
- @msg = msg
17
- end
18
-
19
- def message
20
- "#{@msg} (#{@code})"
21
- end
22
- end
12
+ class ConnectionError < Error; end
23
13
 
24
- extend Memoist
25
-
26
- def initialize(endpoint)
27
- @json_rpc_endpoint = URI.parse(endpoint)
14
+ class ResponseError < Error
15
+ def initialize(code, msg)
16
+ super "#{msg} (#{code})"
28
17
  end
18
+ end
29
19
 
30
- def json_rpc(method, params=[])
31
- response = post(method, params)
32
-
33
- response.assert_2xx!
34
- response = JSON.parse(response.body)
20
+ extend Memoist
35
21
 
36
- response["error"].tap do |e|
37
- raise ResponseError.new(e["code"], e["message"]) if e
38
- end
39
-
40
- response.fetch("result")
41
- rescue StandardError => e
42
- case e
43
- when Faraday::Error
44
- raise ConnectionError, e
45
- when Error
46
- raise e
47
- else
48
- raise Error, e
49
- end
50
- end
22
+ def initialize(endpoint, idle_timeout: 5)
23
+ @json_rpc_endpoint = URI.parse(endpoint)
24
+ @idle_timeout = idle_timeout
25
+ end
51
26
 
52
- private
27
+ def json_rpc(method, params = [])
28
+ response = connection.post \
29
+ '/',
30
+ {jsonrpc: '1.0', method: method, params: params}.to_json,
31
+ {'Accept' => 'application/json',
32
+ 'Content-Type' => 'application/json'}
33
+ response.assert_success!
34
+ response = JSON.parse(response.body)
35
+ response['error'].tap { |error| raise ResponseError.new(error['code'], error['message']) if error }
36
+ response.fetch('result')
37
+ rescue Faraday::Error => e
38
+ raise ConnectionError, e
39
+ rescue StandardError => e
40
+ raise Error, e
41
+ end
53
42
 
54
- def post(method, params)
55
- connection.post("/", {jsonrpc: "1.0", method: method, params: params}.to_json,
56
- "Accept" => "application/json", "Content-Type" => "application/json")
57
- end
43
+ private
58
44
 
59
- def connection
60
- @connection ||= Faraday.new(@json_rpc_endpoint) do |f|
61
- f.adapter :net_http_persistent, pool_size: 5
62
- end.tap do |connection|
63
- unless @json_rpc_endpoint.user.blank?
64
- connection.basic_auth(@json_rpc_endpoint.user,
65
- @json_rpc_endpoint.password)
66
- end
45
+ def connection
46
+ @connection ||= Faraday.new(@json_rpc_endpoint) do |f|
47
+ f.adapter :net_http_persistent, pool_size: 5, idle_timeout: @idle_timeout
48
+ end.tap do |connection|
49
+ unless @json_rpc_endpoint.user.blank?
50
+ connection.basic_auth(@json_rpc_endpoint.user, @json_rpc_endpoint.password)
67
51
  end
68
52
  end
69
53
  end
70
54
  end
71
55
  end
56
+ end
@@ -28,8 +28,8 @@ module Peatio
28
28
  end
29
29
 
30
30
  def register
31
- Peatio::Blockchain.registry[:thought] = Thought::Blockchain.new
32
- Peatio::Wallet.registry[:thoughtd] = Thought::Wallet.new
31
+ Peatio::Blockchain.registry[:thought] = Thought::Blockchain
32
+ Peatio::Wallet.registry[:thoughtd] = Thought::Wallet
33
33
  end
34
34
  end
35
35
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Peatio
4
4
  module Thought
5
- VERSION = "2.4.0"
5
+ VERSION = "2.6.7.1"
6
6
  end
7
7
  end
@@ -3,8 +3,11 @@
3
3
  module Peatio
4
4
  module Thought
5
5
  class Wallet < Peatio::Wallet::Abstract
6
- def initialize(settings={})
7
- @settings = settings
6
+ DEFAULT_FEATURES = { skip_deposit_collection: false }.freeze
7
+
8
+ def initialize(custom_features = {})
9
+ @features = DEFAULT_FEATURES.merge(custom_features).slice(*SUPPORTED_FEATURES)
10
+ @settings = {}
8
11
  end
9
12
 
10
13
  def configure(settings={})
@@ -38,16 +38,16 @@ Gem::Specification.new do |spec|
38
38
 
39
39
  spec.add_dependency "activesupport", "~> 5.2.3"
40
40
  spec.add_dependency "better-faraday", "~> 1.0.5"
41
- spec.add_dependency "faraday", "~> 0.15.4"
41
+ spec.add_dependency "faraday", "~> 0.17"
42
42
  spec.add_dependency "memoist", "~> 0.16.0"
43
43
  spec.add_dependency "peatio", ">= 0.6.3"
44
44
  spec.add_dependency 'net-http-persistent', '~> 3.0.1'
45
45
 
46
- spec.add_development_dependency "bundler", "~> 1.17"
46
+ spec.add_development_dependency "bundler", "~> 2.1.3"
47
47
  spec.add_development_dependency "irb"
48
48
  spec.add_development_dependency "mocha", "~> 1.8"
49
49
  spec.add_development_dependency "pry-byebug"
50
- spec.add_development_dependency "rake", "~> 10.0"
50
+ spec.add_development_dependency "rake", "~> 13.0"
51
51
  spec.add_development_dependency "rspec", "~> 3.0"
52
52
  spec.add_development_dependency "rubocop-github"
53
53
  spec.add_development_dependency "simplecov"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peatio-thought
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.6.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew@Thought
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-06 00:00:00.000000000 Z
11
+ date: 2020-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.15.4
47
+ version: '0.17'
48
48
  type: :runtime
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: 0.15.4
54
+ version: '0.17'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: memoist
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.17'
103
+ version: 2.1.3
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: '1.17'
110
+ version: 2.1.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: irb
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '10.0'
159
+ version: '13.0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '10.0'
166
+ version: '13.0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: rspec
169
169
  requirement: !ruby/object:Gem::Requirement