Class: Zold::WTS
- Inherits:
-
Object
- Object
- Zold::WTS
- Defined in:
- lib/zold/wts.rb
Overview
WTS gateway.
- Author
-
Yegor Bugayenko ([email protected])
- Copyright
-
Copyright © 2018-2019 Yegor Bugayenko
- License
-
MIT
Defined Under Namespace
Classes: Fake
Instance Method Summary collapse
-
#balance ⇒ Object
Get wallet balance.
-
#find(query) ⇒ Object
Find transactions by the criteria.
-
#id ⇒ Object
Get wallet ID.
-
#initialize(key, log: Loog::NULL) ⇒ WTS
constructor
Makes a new object of the class.
-
#pay(keygap, bnf, amount, details) ⇒ Object
Initiate PAY request.
-
#pull ⇒ Object
Initiate PULL request.
-
#usd_rate ⇒ Object
Returns current USD rate of one ZLD.
-
#wait(job, time: 5 * 60) ⇒ Object
Wait for the job to complete.
Constructor Details
#initialize(key, log: Loog::NULL) ⇒ WTS
Makes a new object of the class. The key you are supposed to obtain at this page: wts.zold.io/api. You will have to login and confirm your account first. Keep this key secret, to avoid information lost. However, even knowing the secret no payments can be sent without they keygap.
70 71 72 73 74 75 |
# File 'lib/zold/wts.rb', line 70 def initialize(key, log: Loog::NULL) raise 'Key can\'t be nil' if key.nil? @key = key raise 'Log can\'t be nil' if log.nil? @log = log end |
Instance Method Details
#balance ⇒ Object
Get wallet balance.
98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/zold/wts.rb', line 98 def balance start = Time.now http = clean( Typhoeus::Request.get( 'https://wts.zold.io/balance', headers: headers ) ) balance = Zold::Amount.new(zents: http.body.to_i) @log.debug("The balance #{balance} retrieved in #{Zold::Age.new(start)}") balance end |
#find(query) ⇒ Object
Find transactions by the criteria. All criterias are regular expressions and their summary result is concatenated by OR. For example, this request will return all transactions that have “pizza” in details OR which are coming from the root wallet:
find(details: /pizza/, bnf: '0000000000000000')
The method returns an array of Zold::Txn objects.
161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/zold/wts.rb', line 161 def find(query) start = Time.now http = clean( Typhoeus::Request.get( 'https://wts.zold.io/find?' + query.map do |k, v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" end.join('&'), headers: headers ) ) txns = http.body.split("\n").map { |t| Zold::Txn.parse(t) } @log.debug("#{txns.count} transactions found in #{Zold::Age.new(start)}") txns end |
#id ⇒ Object
Get wallet ID.
112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/zold/wts.rb', line 112 def id start = Time.now http = clean( Typhoeus::Request.get( 'https://wts.zold.io/id', headers: headers ) ) id = Zold::Id.new(http.body.to_s) @log.debug("Wallet ID #{id} retrieved in #{Zold::Age.new(start)}") id end |
#pay(keygap, bnf, amount, details) ⇒ Object
Initiate PAY request. The keygap is a string you get when you confirm the account. The bnf is the name of the GitHub account, the wallet ID or the invoice (up to you). The amount is the amount in ZLD, e.g. “19.99”. The details is the text to add to the transaction.
The method returns the job ID, which you should wait for completion using the method wait().
133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/zold/wts.rb', line 133 def pay(keygap, bnf, amount, details) start = Time.now job = job_of( clean( Typhoeus::Request.post( 'https://wts.zold.io/do-pay', headers: headers, body: { keygap: keygap, bnf: bnf, amount: amount, details: details } ) ) ) @log.debug("PAY job #{job} started in #{Zold::Age.new(start)}") job end |
#pull ⇒ Object
Initiate PULL request. The server will pull your wallet form the network, and make it ready for future requests. Without this operation you won’t be able to perform find() or balance() requests.
The method returns the job ID, which you should wait for completion using the method wait().
83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/zold/wts.rb', line 83 def pull start = Time.now job = job_of( clean( Typhoeus::Request.get( 'https://wts.zold.io/pull', headers: headers ) ) ) @log.debug("PULL job #{job} started in #{Zold::Age.new(start)}") job end |
#usd_rate ⇒ Object
Returns current USD rate of one ZLD.
149 150 151 |
# File 'lib/zold/wts.rb', line 149 def usd_rate clean(Typhoeus::Request.get('https://wts.zold.io/usd_rate')).body.to_f end |
#wait(job, time: 5 * 60) ⇒ Object
Wait for the job to complete. If the job completes successfully, the method returns ‘OK’ in a few seconds (up to a few minutes). If the is some error, the exception will be raised.
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/zold/wts.rb', line 179 def wait(job, time: 5 * 60) start = Time.now loop do if Time.now - start > time raise "Can't wait any longer for the job #{job} to complete" end http = Typhoeus::Request.get( 'https://wts.zold.io/job?id=' + job, headers: headers ) raise "Job #{job} not found on the server" if http.code == 404 raise "Unpredictable response code #{http.code}" unless http.code == 200 if http.body == 'Running' @log.debug("Job #{job} is still running, \ #{Zold::Age.new(start)} already...") sleep 1 next end raise http.body unless http.body == 'OK' @log.debug("Job #{job} completed, in #{Zold::Age.new(start)}") return http.body end end |