Class: Zold::WTS
- Inherits:
-
Object
- Object
- Zold::WTS
- Defined in:
- lib/zold/wts.rb
Overview
WTS
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: STDOUT) ⇒ WTS
constructor
Makes a new object of the class.
-
#pay(keygap, bnf, amount, details) ⇒ Object
Initiate PAY request.
-
#pull ⇒ Object
Initiate PULL request.
-
#wait(job, time: 5 * 60) ⇒ Object
Wait for the job to complete.
Constructor Details
#initialize(key, log: STDOUT) ⇒ 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.
43 44 45 46 47 48 |
# File 'lib/zold/wts.rb', line 43 def initialize(key, log: STDOUT) 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.
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/zold/wts.rb', line 71 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) debug("Wallet 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.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/zold/wts.rb', line 129 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) } debug("#{txns.count} transactions found in #{Zold::Age.new(start)}") txns end |
#id ⇒ Object
Get wallet ID.
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/zold/wts.rb', line 85 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) 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().
106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/zold/wts.rb', line 106 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 } ) ) ) 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().
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/zold/wts.rb', line 56 def pull start = Time.now job = job_of( clean( Typhoeus::Request.get( 'https://wts.zold.io/pull', headers: headers ) ) ) debug("PULL job #{job} started in #{Zold::Age.new(start)}") job 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.
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/zold/wts.rb', line 147 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 next if http.body == 'Running' raise http.body unless http.body == 'OK' debug("Job #{job} completed, in #{Zold::Age.new(start)}") return http.body end end |