bitex 0.2.2 → 0.2.3

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
  SHA1:
3
- metadata.gz: 1227db3393d7ebd0e58012b2681595b4bcb503b6
4
- data.tar.gz: 34d7bfca10d7bc61f828ffa9fca9f16eda3bcac3
3
+ metadata.gz: c0f409f2edf134480559d42b2a79d57a09d4fefa
4
+ data.tar.gz: 198bf2f788ea24c148c947e5f01d2c17d96747e8
5
5
  SHA512:
6
- metadata.gz: f24e2d0d0780b94d252fdba0a5ea9ab8bf548d27d8a25bc716a83d652f4ca277d8a3614bde9bf97f10d81d0e902b1be6d7c2ae5519f07c88ea7c59083a54dc5d
7
- data.tar.gz: d06fee68bf940dc454973e54b98074866b6192b83fc361af27d29d6e4827a2ea06216dce75a09f65bb4a408e81caa472c9a03579f42c3a410c101747b8cab42e
6
+ metadata.gz: 85597c781f7eb8ef612dca37f546593ad453d8ebb507e3b2f7a6e63196c4cc9fdbf17eba2ac4cc76c3d400ba843956ff3e01557c9b869b24b052ae1ab4dd674c
7
+ data.tar.gz: 9fb13004f9956c6a4b449d3e844e43cd6c001d5e2a7c24c944186cbeb897689432814263c9fab0cda314da5dde75a85581e64d9fd232d1aad862860572a75a91
data/README.md CHANGED
@@ -40,6 +40,19 @@ fetching all public market data available.
40
40
  ruby > Bitex::BitcoinMarketData.transactions
41
41
  => [[1404501180, 1335, 632.0, 0.95], [1404501159, 1334, 632.0, 0.95], ...]
42
42
 
43
+ ## Exchange Rates
44
+
45
+ Learn more here: [https://sandbox.bitex.la/developers#rates](Rates docs)
46
+
47
+
48
+ From 1000 ARS in CASH to USD in my BITEX balance, via MORE_MT
49
+
50
+ ruby > Bitex::Rates.calculate_path(1000, [:ars, :cash, :usd, :bitex, :more_mt])
51
+
52
+ How many ARS in CASH should I deposit via MORE_MT to get 50 USD in BITEX?
53
+
54
+ ruby > Bitex::Rates.calculate_path_backwards([:ars, :cash, :usd, :bitex, :more_mt], 50)
55
+
43
56
  ## Use for Private Trading
44
57
 
45
58
  ### Authentication
@@ -71,6 +84,37 @@ on that page. Once done you can start using it as follows:
71
84
 
72
85
  ruby > Bitex::Transaction.all
73
86
 
87
+ # Payments
88
+
89
+ Check the [https://sandbox.bitex.la/developers#payments-overview](Payaments Developer Docs)
90
+ to learn more about payment processing with Bitex
91
+
92
+ ### Create a new payment for 4 USD in Bitcoin
93
+
94
+ ruby > Bitex::Payment.create!(
95
+ currency_id: 3,
96
+ amount: 4,
97
+ callback_url: "https://example.com/ipn",
98
+ keep: 25.0,
99
+ customer_reference: "An Alto latte, no sugar",
100
+ merchant_reference: "invoice#1234")
101
+
102
+ ### List all your payments
103
+
104
+ ruby > Bitex::Payment.all
105
+
106
+ ### Validate and deserialize payments from callbacks.
107
+
108
+ ruby > Bitex::Payment.from_callback(the_callback_json)
109
+
110
+ ### Setup your Web Point of Sale
111
+
112
+ ruby > Bitex::Payment.pos_setup!(
113
+ merchant_name: "Tierra Buena",
114
+ merchant_slug: "tierrabuena",
115
+ merchant_logo: "https://t.co/logo.png",
116
+ merchant_keep: 0)
117
+
74
118
  ## Sandbox
75
119
 
76
120
  Bitex.la has a sandbox environment available at https://sandbox.bitex.la, you
@@ -1,11 +1,71 @@
1
1
  module Bitex
2
- # Exchange rates for cash in and cash out
2
+ # Exchange Rates Tree.
3
+ # Example calculation for turning 1000 ARS in cash to USD credited
4
+ # to your bitex balance using more_mt as the funding option.
5
+ # Bitex::Rates.calculate(1000, [:ars, :cash, :usd, :bitex, :more_mt])
6
+ # Also available backwards: How many ARS should I deposit using more_mt
7
+ # to end up with 200 USD in my bitex balance?
8
+ # Bitex::Rates.calculate_back([:ars, :cash, :usd, :bitex, :more_mt], 200)
9
+ # @see https://bitex.la/developers#rates
3
10
  class Rates
4
- # The rates tree conveniently formatted as a ruby Hash with
5
- # symbolized keys.
6
- # @see https://bitex.la/developers#rates
7
- def self.all
8
- Api.private(:get, "/private/rates").deep_symbolize_keys
11
+
12
+ # Full exchange rates tree, gets cached locally for 60 seconds.
13
+ def self.tree
14
+ if @tree.nil? || @last_tree_fetch.to_i < (Time.now.to_i - 60)
15
+ @tree = Api.public("/rates/tree").deep_symbolize_keys
16
+ @last_tree_fetch = Time.now.to_i
17
+ end
18
+ @tree
19
+ end
20
+
21
+ def self.clear_tree_cache
22
+ @tree = nil
23
+ @last_tree_fetch = nil
24
+ end
25
+
26
+ def self.calculate_path(value, path)
27
+ value = value.to_d
28
+ path_to_calculator(path).each do |step|
29
+ case step[:type].to_sym
30
+ when :exchange
31
+ value *= step[:rate].to_d
32
+ when :percentual_fee
33
+ value *= 1 - (step[:percentage].to_d / 100.to_d)
34
+ when :fixed_fee
35
+ value -= step[:amount].to_d
36
+ when :minimum_fee
37
+ value -= [step[:minimum].to_d, value * step[:percentage].to_d / 100.to_d].max
38
+ end
39
+ end
40
+ value
41
+ end
42
+
43
+ def self.calculate_path_backwards(path, value)
44
+ value = value.to_d
45
+ path_to_calculator(path).each do |step|
46
+ case step[:type].to_sym
47
+ when :exchange
48
+ value /= step[:rate].to_d
49
+ when :percentual_fee
50
+ value /= 1 - (step[:percentage].to_d / 100.to_d)
51
+ when :fixed_fee
52
+ value += step[:amount].to_d
53
+ when :minimum_fee
54
+ value = [value + step[:minimum].to_d,
55
+ value / (1 - (step[:percentage].to_d / 100.to_d))].max
56
+ end
57
+ end
58
+ value
59
+ end
60
+
61
+ def self.path_to_calculator(path)
62
+ steps = tree
63
+ begin
64
+ path.each { |step| steps = steps[step] }
65
+ rescue StandardError => e
66
+ raise "InvalidPath: #{path}"
67
+ end
68
+ steps
9
69
  end
10
70
  end
11
71
  end
@@ -1,3 +1,3 @@
1
1
  module Bitex
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -1,19 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Bitex::Rates do
4
- it "gets all rates" do
4
+ before(:each){ Bitex::Rates.clear_tree_cache }
5
+
6
+ it "gets the full exchange rates tree and caches for 1 minute" do
7
+ Bitex::Rates.clear_tree_cache
5
8
  Bitex.api_key = 'valid_api_key'
6
- stub_private(:get, "/private/rates", 'rates')
7
- Bitex::Rates.all.should == {
8
- AR: {
9
- astropay: {USDARS: [8.7592,nil,1412969688]},
10
- reference:{USDARS: [nil,nil,0]}},
11
- BR: {astropay:{USDBRL: [2.3779,nil,1412969689]}},
12
- CL: {astropay:{USDCLP: [611.673,nil,1412969691]}},
13
- CO: {astropay:{USDCOP: [2006.368,nil,1412969693]}},
14
- PE: {astropay:{USDPEN: [2.9807,nil,1412969696]}},
15
- UY: {astropay:{USDUYU: [24.751,nil,1412969698]}},
16
- MX: {astropay:{USDMXN: [13.7471,nil,1412969700]}}
17
- }
9
+ stub = stub_get("/rates/tree", 'rates_tree')
10
+ Bitex::Rates.tree.keys.should ==
11
+ %w(btc usd ars clp eur uyu brl cop pen mxn bob nio hnl dop gbp cad vef).collect(&:to_sym)
12
+ 2.times{ Bitex::Rates.tree }
13
+ Timecop.travel 2.minutes.from_now
14
+ Bitex::Rates.tree
15
+ stub.should have_been_requested.twice
16
+ end
17
+
18
+ it "calculates a given path using the tree" do
19
+ stub_get("/rates/tree", 'rates_tree')
20
+ Bitex::Rates.calculate_path(1000, [:ars, :cash, :usd, :bitex, :more_mt])
21
+ .should == '64.332439179'.to_d
22
+ end
23
+
24
+ it "calculates backwards using a path" do
25
+ stub_get("/rates/tree", 'rates_tree')
26
+ Bitex::Rates.calculate_path_backwards([:ars, :cash, :usd, :bitex, :more_mt], 64)
27
+ .should == '994.832479799730206496'.to_d
18
28
  end
19
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nubis
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-08-05 00:00:00.000000000 Z
12
+ date: 2015-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -193,7 +193,6 @@ files:
193
193
  - spec/fixtures/order_book.json
194
194
  - spec/fixtures/orders.json
195
195
  - spec/fixtures/profile.json
196
- - spec/fixtures/rates.json
197
196
  - spec/fixtures/specie_deposit.json
198
197
  - spec/fixtures/specie_deposits.json
199
198
  - spec/fixtures/specie_withdrawal.json
@@ -267,7 +266,6 @@ test_files:
267
266
  - spec/fixtures/order_book.json
268
267
  - spec/fixtures/orders.json
269
268
  - spec/fixtures/profile.json
270
- - spec/fixtures/rates.json
271
269
  - spec/fixtures/specie_deposit.json
272
270
  - spec/fixtures/specie_deposits.json
273
271
  - spec/fixtures/specie_withdrawal.json
@@ -1 +0,0 @@
1
- {"AR":{"astropay":{"USDARS":[8.7592,null,1412969688]},"reference":{"USDARS":[null,null,0]}},"BR":{"astropay":{"USDBRL":[2.3779,null,1412969689]}},"CL":{"astropay":{"USDCLP":[611.673,null,1412969691]}},"CO":{"astropay":{"USDCOP":[2006.368,null,1412969693]}},"PE":{"astropay":{"USDPEN":[2.9807,null,1412969696]}},"UY":{"astropay":{"USDUYU":[24.751,null,1412969698]}},"MX":{"astropay":{"USDMXN":[13.7471,null,1412969700]}}}