bitreserve 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +3 -0
- data/.travis.yml +13 -0
- data/Gemfile +7 -1
- data/README.md +5 -0
- data/Rakefile +2 -3
- data/bitreserve.gemspec +2 -0
- data/lib/bitreserve.rb +16 -6
- data/lib/bitreserve/api.rb +22 -0
- data/lib/bitreserve/api/auth_token.rb +16 -0
- data/lib/bitreserve/api/card.rb +36 -0
- data/lib/bitreserve/api/contact.rb +34 -0
- data/lib/bitreserve/api/endpoints.rb +26 -0
- data/lib/bitreserve/api/private_transaction.rb +58 -0
- data/lib/bitreserve/api/public_transaction.rb +23 -0
- data/lib/bitreserve/api/ticker.rb +23 -0
- data/lib/bitreserve/api/transparency.rb +10 -0
- data/lib/bitreserve/api/user.rb +23 -0
- data/lib/bitreserve/client.rb +22 -0
- data/lib/bitreserve/entities/asset.rb +7 -0
- data/lib/bitreserve/entities/auth_token.rb +7 -0
- data/lib/bitreserve/entities/base_entity.rb +28 -0
- data/lib/bitreserve/entities/card.rb +8 -0
- data/lib/bitreserve/entities/contact.rb +7 -0
- data/lib/bitreserve/entities/phone.rb +7 -0
- data/lib/bitreserve/entities/ticker.rb +7 -0
- data/lib/bitreserve/entities/transaction.rb +7 -0
- data/lib/bitreserve/entities/user.rb +19 -0
- data/lib/bitreserve/helpers.rb +23 -0
- data/lib/bitreserve/request.rb +31 -14
- data/lib/bitreserve/request_data.rb +7 -0
- data/lib/bitreserve/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/me.yml +185 -0
- data/spec/fixtures/vcr_cassettes/me/card.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/cards.yml +67 -0
- data/spec/fixtures/vcr_cassettes/me/contact.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/contacts.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/created_card.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/created_contact.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/phones.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/transactions/cancel.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/transactions/commit.yml +62 -0
- data/spec/fixtures/vcr_cassettes/me/transactions/create.yml +61 -0
- data/spec/fixtures/vcr_cassettes/me/transactions/create_waiting_cancel.yml +118 -0
- data/spec/fixtures/vcr_cassettes/me/transactions/create_waiting_resend.yml +118 -0
- data/spec/fixtures/vcr_cassettes/me/transactions/resend.yml +61 -0
- data/spec/fixtures/vcr_cassettes/reserve/transaction.yml +60 -0
- data/spec/fixtures/vcr_cassettes/reserve/transactions.yml +60 -0
- data/spec/fixtures/vcr_cassettes/tickers.yml +60 -0
- data/spec/fixtures/vcr_cassettes/transparency.yml +60 -0
- data/spec/integration/api/card_spec.rb +47 -0
- data/spec/integration/api/contact_spec.rb +53 -0
- data/spec/integration/api/private_transactions_spec.rb +74 -0
- data/spec/integration/api/public_transaction_spec.rb +34 -0
- data/spec/integration/api/ticker_spec.rb +21 -0
- data/spec/integration/api/transparency_spec.rb +21 -0
- data/spec/integration/api/user_spec.rb +32 -0
- data/spec/spec_helper.rb +19 -1
- data/spec/support/vcr.rb +8 -0
- data/spec/support/webmock.rb +24 -0
- data/spec/unit/api/auth_spec.rb +22 -0
- data/spec/unit/api/card_spec.rb +47 -0
- data/spec/unit/api/contact_spec.rb +53 -0
- data/spec/unit/api/private_transaction_spec.rb +114 -0
- data/spec/unit/api/public_transaction_spec.rb +34 -0
- data/spec/unit/api/ticker_spec.rb +34 -0
- data/spec/unit/api/transparency_spec.rb +21 -0
- data/spec/unit/api/user_spec.rb +33 -0
- data/spec/unit/auth_request_spec.rb +32 -0
- data/spec/unit/client_spec.rb +23 -0
- data/spec/unit/entities/base_entity_spec.rb +32 -0
- data/spec/unit/entities/user_spec.rb +26 -0
- data/spec/unit/helper_spec.rb +37 -0
- data/spec/unit/request_spec.rb +58 -0
- metadata +136 -8
- data/lib/bitreserve/endpoints.rb +0 -5
- data/lib/bitreserve/ticker.rb +0 -7
- data/spec/request_spec.rb +0 -37
- data/spec/ticker_spec.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22fd7b702c886113b8b2c1c6e382721f4b0c84df
|
4
|
+
data.tar.gz: b24e3a7fb9626dbaab357683a2fb3645bac2d64a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd8989fe44205b5660954800ffd3b1934066d341e4d495e2fb0555bb28f3f8485d956d10eb224365d7417573b63c37d75c51621f2182fb96a9d7f36acc5b08d6
|
7
|
+
data.tar.gz: 2eb14790b044dce1b71264fc1267dbfde5637bf17042bc119aaecfb6f852190ee2a4b3361ac383f51925669a7f9657094958fb2d896294e63ede9caa202fd557
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Bitreserve
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/bitreserve.svg)](http://badge.fury.io/rb/bitreserve)
|
4
|
+
[![Build Status](https://travis-ci.org/groupbuddies/bitreserve.svg?branch=master)](https://travis-ci.org/groupbuddies/bitreserve)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/groupbuddies/bitreserve/badges/gpa.svg)](https://codeclimate.com/github/groupbuddies/bitreserve)
|
6
|
+
[![Test Coverage](https://codeclimate.com/github/groupbuddies/bitreserve/badges/coverage.svg)](https://codeclimate.com/github/groupbuddies/bitreserve)
|
7
|
+
|
3
8
|
TODO: Write a gem description
|
4
9
|
|
5
10
|
## Installation
|
data/Rakefile
CHANGED
data/bitreserve.gemspec
CHANGED
@@ -18,8 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
20
|
spec.add_dependency 'httparty', '>= 0.13.3'
|
21
|
+
spec.add_dependency 'dotenv'
|
21
22
|
|
22
23
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
24
|
+
spec.add_development_dependency 'climate_control'
|
23
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
24
26
|
spec.add_development_dependency 'rubocop', '~> 0.27.1'
|
25
27
|
spec.add_development_dependency 'rspec', '~> 3.1.0'
|
data/lib/bitreserve.rb
CHANGED
@@ -1,23 +1,33 @@
|
|
1
|
-
require 'net/https'
|
2
1
|
require 'logger'
|
3
2
|
require 'httparty'
|
3
|
+
require 'dotenv'
|
4
|
+
Dotenv.load
|
4
5
|
|
5
6
|
require 'bitreserve/version'
|
6
|
-
require 'bitreserve/
|
7
|
+
require 'bitreserve/client'
|
7
8
|
|
8
9
|
module Bitreserve
|
9
|
-
API_BASE = 'api.bitreserve.org'
|
10
|
+
API_BASE = 'https://api.bitreserve.org'
|
10
11
|
ROOT_PATH = File.dirname(__FILE__)
|
11
12
|
|
12
13
|
@api_base = API_BASE
|
13
|
-
@api_port = Net::HTTP.https_default_port
|
14
14
|
@api_version = 0
|
15
15
|
@logger = Logger.new(STDOUT)
|
16
16
|
|
17
17
|
class << self
|
18
|
-
attr_accessor :api_base, :
|
18
|
+
attr_accessor :api_base, :api_version, :logger
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
require 'bitreserve/helpers'
|
22
23
|
require 'bitreserve/request'
|
23
|
-
require 'bitreserve/
|
24
|
+
require 'bitreserve/request_data'
|
25
|
+
require 'bitreserve/entities/base_entity'
|
26
|
+
require 'bitreserve/entities/asset'
|
27
|
+
require 'bitreserve/entities/auth_token'
|
28
|
+
require 'bitreserve/entities/card'
|
29
|
+
require 'bitreserve/entities/contact'
|
30
|
+
require 'bitreserve/entities/phone'
|
31
|
+
require 'bitreserve/entities/ticker'
|
32
|
+
require 'bitreserve/entities/transaction'
|
33
|
+
require 'bitreserve/entities/user'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'bitreserve/api/auth_token'
|
2
|
+
require 'bitreserve/api/card'
|
3
|
+
require 'bitreserve/api/contact'
|
4
|
+
require 'bitreserve/api/endpoints'
|
5
|
+
require 'bitreserve/api/private_transaction'
|
6
|
+
require 'bitreserve/api/public_transaction'
|
7
|
+
require 'bitreserve/api/ticker'
|
8
|
+
require 'bitreserve/api/transparency'
|
9
|
+
require 'bitreserve/api/user'
|
10
|
+
|
11
|
+
module Bitreserve
|
12
|
+
module API
|
13
|
+
include API::AuthToken
|
14
|
+
include API::Card
|
15
|
+
include API::Contact
|
16
|
+
include API::PrivateTransaction
|
17
|
+
include API::PublicTransaction
|
18
|
+
include API::Ticker
|
19
|
+
include API::Transparency
|
20
|
+
include API::User
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module API
|
3
|
+
module AuthToken
|
4
|
+
def generate_access_token(username: '', password: '')
|
5
|
+
request_data = Bitreserve::RequestData.new(
|
6
|
+
Endpoints::AUTH,
|
7
|
+
Entities::AuthToken,
|
8
|
+
authorization_header,
|
9
|
+
nil,
|
10
|
+
username: username, password: password
|
11
|
+
)
|
12
|
+
AuthRequest.perform_with_object(:post, request_data)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module API
|
3
|
+
module Card
|
4
|
+
def all_cards
|
5
|
+
Request.perform_with_objects(:get, cards_request_data)
|
6
|
+
end
|
7
|
+
|
8
|
+
def find_card(id: nil)
|
9
|
+
Request.perform_with_object(:get, card_request_data(id))
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_card(label: nil, currency: nil)
|
13
|
+
Request.perform_with_object(:post, cards_request_data(label: label, currency: currency))
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def cards_request_data(payload = nil)
|
19
|
+
RequestData.new(
|
20
|
+
Endpoints::CARD,
|
21
|
+
Entities::Card,
|
22
|
+
authorization_header,
|
23
|
+
payload
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def card_request_data(id)
|
28
|
+
RequestData.new(
|
29
|
+
Endpoints::CARD + "/#{id}",
|
30
|
+
Entities::Card,
|
31
|
+
authorization_header
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module API
|
3
|
+
module Contact
|
4
|
+
def all_contacts
|
5
|
+
request_data = RequestData.new(
|
6
|
+
Endpoints::USER_CONTACTS,
|
7
|
+
Entities::Contact,
|
8
|
+
authorization_header
|
9
|
+
)
|
10
|
+
Request.perform_with_objects(:get, request_data)
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_contact(id: nil)
|
14
|
+
request_data = RequestData.new(
|
15
|
+
Endpoints::USER_CONTACTS + "/#{id}",
|
16
|
+
Entities::Contact,
|
17
|
+
authorization_header
|
18
|
+
)
|
19
|
+
Request.perform_with_object(:get, request_data)
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_contact(**args)
|
23
|
+
request_data = RequestData.new(
|
24
|
+
Endpoints::USER_CONTACTS,
|
25
|
+
Entities::Contact,
|
26
|
+
authorization_header,
|
27
|
+
Bitreserve::Helpers.camelized_hash(args)
|
28
|
+
)
|
29
|
+
|
30
|
+
Request.perform_with_object(:post, request_data)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module Endpoints
|
3
|
+
AUTH = '/oauth2/tokens'
|
4
|
+
CARD = '/me/cards'
|
5
|
+
CARD_PRIVATE_TRANSACTIONS = CARD + '/:card/transactions'
|
6
|
+
COMMIT_TRANSACTION = CARD_PRIVATE_TRANSACTIONS + '/:id/commit'
|
7
|
+
CANCEL_TRANSACTION = CARD_PRIVATE_TRANSACTIONS + '/:id/cancel'
|
8
|
+
RESEND_TRANSACTION = CARD_PRIVATE_TRANSACTIONS + '/:id/resend'
|
9
|
+
USER_PRIVATE_TRANSACTIONS = '/me/transactions'
|
10
|
+
PUBLIC_TRANSACTIONS = '/reserve/transactions'
|
11
|
+
STATS = '/reserve/statistics'
|
12
|
+
TICKER = '/ticker'
|
13
|
+
TRANSACTIONS = '/reserve/transactions'
|
14
|
+
USER = '/me'
|
15
|
+
USER_CONTACTS = '/me/contacts'
|
16
|
+
USER_PHONES = '/me/phones'
|
17
|
+
|
18
|
+
def self.with_placeholders(endpoint, substitutions = {})
|
19
|
+
new_endpoint = endpoint.dup
|
20
|
+
substitutions.each_pair do |placeholder, substitute|
|
21
|
+
new_endpoint.gsub!(placeholder, substitute)
|
22
|
+
end
|
23
|
+
new_endpoint
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module API
|
3
|
+
module PrivateTransaction
|
4
|
+
def create_transaction(card_id: nil, currency: nil, amount: 0, destination: nil)
|
5
|
+
request_data = RequestData.new(
|
6
|
+
Endpoints.with_placeholders(Endpoints::CARD_PRIVATE_TRANSACTIONS, ':card' => card_id),
|
7
|
+
Entities::Transaction,
|
8
|
+
authorization_header,
|
9
|
+
card_id: card_id, denomination: { currency: currency, amount: amount }, destination: destination
|
10
|
+
)
|
11
|
+
Request.perform_with_object(:post, request_data)
|
12
|
+
end
|
13
|
+
|
14
|
+
def commit_transaction(card_id: nil, transaction_id: nil)
|
15
|
+
request_data = transaction_request_data(Endpoints::COMMIT_TRANSACTION, card_id, transaction_id)
|
16
|
+
Request.perform_with_object(:post, request_data)
|
17
|
+
end
|
18
|
+
|
19
|
+
def cancel_transaction(card_id: nil, transaction_id: nil)
|
20
|
+
request_data = transaction_request_data(Endpoints::CANCEL_TRANSACTION, card_id, transaction_id)
|
21
|
+
Request.perform_with_object(:post, request_data)
|
22
|
+
end
|
23
|
+
|
24
|
+
def resend_transaction(card_id: nil, transaction_id: nil)
|
25
|
+
request_data = transaction_request_data(Endpoints::RESEND_TRANSACTION, card_id, transaction_id)
|
26
|
+
Request.perform_with_object(:post, request_data)
|
27
|
+
end
|
28
|
+
|
29
|
+
def all_user_transactions
|
30
|
+
request_data = RequestData.new(
|
31
|
+
Endpoints::USER_PRIVATE_TRANSACTIONS,
|
32
|
+
Entities::Transaction,
|
33
|
+
authorization_header
|
34
|
+
)
|
35
|
+
Request.perform_with_objects(:get, request_data)
|
36
|
+
end
|
37
|
+
|
38
|
+
def all_card_transactions(card_id: nil)
|
39
|
+
request_data = RequestData.new(
|
40
|
+
Endpoints.with_placeholders(Endpoints::CARD_PRIVATE_TRANSACTIONS, ':card' => card_id),
|
41
|
+
Entities::Transaction,
|
42
|
+
authorization_header
|
43
|
+
)
|
44
|
+
Request.perform_with_objects(:get, request_data)
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def transaction_request_data(endpoint, card_id, transaction_id)
|
50
|
+
RequestData.new(
|
51
|
+
Endpoints.with_placeholders(endpoint, ':card' => card_id, ':id' => transaction_id),
|
52
|
+
Entities::Transaction,
|
53
|
+
authorization_header
|
54
|
+
)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module API
|
3
|
+
module PublicTransaction
|
4
|
+
def all_public_transactions
|
5
|
+
request_data = RequestData.new(
|
6
|
+
Endpoints::PUBLIC_TRANSACTIONS,
|
7
|
+
Entities::Transaction,
|
8
|
+
authorization_header
|
9
|
+
)
|
10
|
+
Request.perform_with_objects(:get, request_data)
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_public_transaction(id: id)
|
14
|
+
request_data = RequestData.new(
|
15
|
+
Endpoints::PUBLIC_TRANSACTIONS + "/#{id}",
|
16
|
+
Entities::Transaction,
|
17
|
+
authorization_header
|
18
|
+
)
|
19
|
+
Request.perform_with_object(:get, request_data)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module API
|
3
|
+
module Ticker
|
4
|
+
def all_tickers
|
5
|
+
request_data = RequestData.new(
|
6
|
+
Endpoints::TICKER,
|
7
|
+
Entities::Ticker,
|
8
|
+
authorization_header
|
9
|
+
)
|
10
|
+
Request.perform_with_objects(:get, request_data)
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_ticker(currency: nil)
|
14
|
+
request_data = RequestData.new(
|
15
|
+
Endpoints::TICKER + "/#{currency}",
|
16
|
+
Entities::Ticker,
|
17
|
+
authorization_header
|
18
|
+
)
|
19
|
+
Request.perform_with_objects(:get, request_data)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Bitreserve
|
2
|
+
module API
|
3
|
+
module User
|
4
|
+
def me
|
5
|
+
request_data = RequestData.new(
|
6
|
+
Endpoints::USER,
|
7
|
+
Entities::User,
|
8
|
+
authorization_header
|
9
|
+
)
|
10
|
+
Request.perform_with_object(:get, request_data)
|
11
|
+
end
|
12
|
+
|
13
|
+
def phones
|
14
|
+
request_data = RequestData.new(
|
15
|
+
Endpoints::USER_PHONES,
|
16
|
+
Entities::Phone,
|
17
|
+
authorization_header
|
18
|
+
)
|
19
|
+
Request.perform_with_objects(:get, request_data)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'bitreserve/api'
|
2
|
+
|
3
|
+
module Bitreserve
|
4
|
+
class Client
|
5
|
+
include API
|
6
|
+
attr_reader :bearer_token
|
7
|
+
|
8
|
+
def initialize(token: ENV['BITRESERVE_AUTH_TOKEN'])
|
9
|
+
@bearer_token = token
|
10
|
+
end
|
11
|
+
|
12
|
+
def bearer_token?
|
13
|
+
!bearer_token.nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
def authorization_header
|
17
|
+
return {} unless bearer_token?
|
18
|
+
|
19
|
+
{ 'Authorization' => "Bearer #{bearer_token}" }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|