bitsor 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +61 -0
  3. data/.gitignore +16 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +45 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +5 -0
  8. data/Gemfile +20 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +74 -0
  11. data/Rakefile +9 -0
  12. data/bin/console +16 -0
  13. data/bin/setup +8 -0
  14. data/bitsor.gemspec +33 -0
  15. data/lib/bitsor/client/account_status.rb +14 -0
  16. data/lib/bitsor/client/available_books.rb +14 -0
  17. data/lib/bitsor/client/balance.rb +14 -0
  18. data/lib/bitsor/client/bitcoin_withdrawal.rb +12 -0
  19. data/lib/bitsor/client/debit_card_withdrawal.rb +12 -0
  20. data/lib/bitsor/client/ether_withdrawal.rb +12 -0
  21. data/lib/bitsor/client/fees.rb +14 -0
  22. data/lib/bitsor/client/funding.rb +14 -0
  23. data/lib/bitsor/client/funding_destination.rb +14 -0
  24. data/lib/bitsor/client/kyc_documents.rb +12 -0
  25. data/lib/bitsor/client/ledger.rb +38 -0
  26. data/lib/bitsor/client/mx_bank_codes.rb +12 -0
  27. data/lib/bitsor/client/open_orders.rb +14 -0
  28. data/lib/bitsor/client/order_book.rb +12 -0
  29. data/lib/bitsor/client/order_trades.rb +12 -0
  30. data/lib/bitsor/client/orders.rb +22 -0
  31. data/lib/bitsor/client/phone_number.rb +12 -0
  32. data/lib/bitsor/client/phone_number_withdrawal.rb +12 -0
  33. data/lib/bitsor/client/phone_verification.rb +12 -0
  34. data/lib/bitsor/client/spei_withdrawal.rb +12 -0
  35. data/lib/bitsor/client/ticker.rb +14 -0
  36. data/lib/bitsor/client/trades.rb +14 -0
  37. data/lib/bitsor/client/user_trades.rb +14 -0
  38. data/lib/bitsor/client/withdrawals.rb +12 -0
  39. data/lib/bitsor/client.rb +86 -0
  40. data/lib/bitsor/concerns/authorizable.rb +10 -0
  41. data/lib/bitsor/concerns/configurable.rb +41 -0
  42. data/lib/bitsor/concerns/connection.rb +86 -0
  43. data/lib/bitsor/concerns/rate_limit.rb +18 -0
  44. data/lib/bitsor/default.rb +32 -0
  45. data/lib/bitsor/error.rb +96 -0
  46. data/lib/bitsor/normalizer.rb +138 -0
  47. data/lib/bitsor/version.rb +20 -0
  48. data/lib/bitsor.rb +33 -0
  49. metadata +148 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f2b6612c7e1b52244270a79a75316446b2c6fab4
4
+ data.tar.gz: ce4b62fa5ff35c25af1e18496b61a225526c12fb
5
+ SHA512:
6
+ metadata.gz: 0b2ab8209a509c4325bcd2893a07242854b07b38afcbd55d41a057cd553c07b421acffa4d455b341d9d68b89b747c2b2382787b047b8f8a38393e23ae6d94770
7
+ data.tar.gz: 62e996c139162d26199be6a10aac875a2f6bf9ffa50568118dee30947511d6cd934d8ad0f41983a97aeb115dede45239598911da33cbf935b13dbb84f75ed342
@@ -0,0 +1,61 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ version: 2
6
+ jobs:
7
+ build:
8
+ parallelism: 1
9
+ docker:
10
+ # specify the version you desire here
11
+ - image: circleci/ruby:2.3.3-node-browsers
12
+ - image: circleci/php:7.1.9-browsers
13
+
14
+ # Specify service dependencies here if necessary
15
+ # CircleCI maintains a library of pre-built images
16
+ # documented at https://circleci.com/docs/2.0/circleci-images/
17
+ # - image: circleci/postgres:9.4
18
+
19
+ working_directory: ~/repo
20
+
21
+ steps:
22
+ - checkout
23
+
24
+ - run:
25
+ name: Setup Code Climate test-reporter
26
+ command: |
27
+ curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
28
+ chmod +x ./cc-test-reporter
29
+
30
+ # Restore bundle cache
31
+ - type: cache-restore
32
+ name: Restore bundle cache
33
+ key: rails-demo-bundle-{{ checksum "Gemfile.lock" }}
34
+
35
+ - run: gem install bundler -v 1.16
36
+ - run:
37
+ name: Bundle Install
38
+ command: bundle install --jobs=4 --retry=3 --path vendor/bundle
39
+
40
+ # Store bundle cache
41
+ - type: cache-save
42
+ name: Store bundle cache
43
+ key: bitsor-bundle-{{ checksum "Gemfile.lock" }}
44
+ paths:
45
+ - vendor/bundle
46
+
47
+ # Run rspec in parallel
48
+ - run: |
49
+ ./cc-test-reporter before-build
50
+ bundle exec rspec --profile 10 \
51
+ --format RspecJunitFormatter \
52
+ --out test_results/rspec.xml \
53
+ --format progress \
54
+ $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
55
+ ./cc-test-reporter format-coverage -t simplecov $CIRCLE_ARTIFACTS/coverage/.resultset.json
56
+ ./cc-test-reporter upload-coverage
57
+
58
+ # Save test results for timing analysis
59
+ - store_test_results:
60
+ path: test_results
61
+
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+ spec/status.txt
14
+
15
+ .env
16
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,45 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ Style/Documentation:
4
+ Enabled: false
5
+ Style/TrailingCommaInLiteral:
6
+ EnforcedStyleForMultiline: comma
7
+ Style/AlignParameters:
8
+ EnforcedStyle: with_fixed_indentation
9
+ Style/PercentLiteralDelimiters:
10
+ PreferredDelimiters:
11
+ default: []
12
+ '%i': []
13
+ '%w': []
14
+ Style/FrozenStringLiteralComment:
15
+ EnforcedStyle: always
16
+ Style/TrailingBlankLines:
17
+ EnforcedStyle: final_blank_line
18
+ Style/LambdaCall:
19
+ Enabled: false
20
+ Style/IndentHash:
21
+ Enabled: false
22
+ Style/AlignHash:
23
+ Enabled: false
24
+ Metrics/ClassLength:
25
+ Enabled: false
26
+ Metrics/MethodLength:
27
+ Enabled: false
28
+ Metrics/AbcSize:
29
+ Enabled: false
30
+ Metrics/LineLength:
31
+ Max: 120
32
+ # To make it possible to copy or click on URIs in the code, we allow lines
33
+ # containing a URI to be longer than Max.
34
+ AllowHeredoc: true
35
+ AllowURI: true
36
+ URISchemes:
37
+ - http
38
+ - https
39
+ # The IgnoreCopDirectives option causes the LineLength rule to ignore cop
40
+ # directives like '# rubocop: enable ...' when calculating a line's length.
41
+ IgnoreCopDirectives: false
42
+ Metrics/BlockLength:
43
+ Enabled: false
44
+ Style/NumericLiterals:
45
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.3
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.3
5
+ before_install: gem install bundler -v 1.15.0
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in bitsor.gemspec
6
+ gemspec
7
+
8
+ gem 'rubocop'
9
+
10
+ group :test do
11
+ gem 'dotenv'
12
+ gem 'multi_json'
13
+ gem 'pry'
14
+ gem 'rspec'
15
+ gem 'rspec_junit_formatter'
16
+ gem 'simplecov', require: false
17
+ gem 'vcr', '3.0.3'
18
+ gem 'webmock', '3.1.1'
19
+ end
20
+
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 Adrian Castillo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,74 @@
1
+ [![Maintainability](https://api.codeclimate.com/v1/badges/c7c2d4123ee5665ce540/maintainability)](https://codeclimate.com/github/rodacato/bitsor/maintainability)
2
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/c7c2d4123ee5665ce540/test_coverage)](https://codeclimate.com/github/rodacato/bitsor/test_coverage)
3
+ [![CircleCI](https://circleci.com/gh/rodacato/bitsor/tree/master.svg?style=svg)](https://circleci.com/gh/rodacato/bitsor/tree/master)
4
+
5
+ # Bitsor
6
+
7
+ Ruby wrapper for bitso.com API, you will need an account to get the credentials to use this wrapper.
8
+
9
+ If you already have an account, you can get your api credentials from [here](https://bitso.com/api_setup).
10
+
11
+ If you dont have already an account, consider to signup from my referal link [here](https://bitso.com/?ref=nphw).
12
+
13
+ ## Quick start
14
+
15
+ Install via Rubygems
16
+
17
+ gem install bitsor
18
+
19
+ ... or add to your Gemfile
20
+
21
+ gem "bitsor", "~> 0.1"
22
+
23
+ ### Making requests
24
+
25
+ [API methods](https://bitso.com/api_info#private-rest-api) are available as module methods (consuming module-level
26
+ configuration) or as client instance methods.
27
+
28
+ ```ruby
29
+ # Provide authentication credentials
30
+ Bitsor.configure do |c|
31
+ c.client_id = 123456
32
+ c.api_key = 'funky'
33
+ c.api_secret = '4l1Th3c01Ns!'
34
+ end
35
+
36
+ # Fetch the user balance
37
+ Bitsor.balance
38
+ ```
39
+ or
40
+
41
+ ```ruby
42
+ # Provide authentication credentials
43
+ client = Bitsor::Client.new(client_id: 123456, api_key: 'defunkt', api_secret: '4l1Th3c01Ns!')
44
+
45
+ # Fetch the user balance
46
+ client.balance
47
+ ```
48
+
49
+ ## Contributing
50
+
51
+ Bug reports and pull requests are welcome on GitHub at https://github.com/rodacato/bitsor.
52
+
53
+ ## License
54
+
55
+ Copyright (c) 2017 Adrian Castillo
56
+
57
+ Permission is hereby granted, free of charge, to any person obtaining
58
+ a copy of this software and associated documentation files (the
59
+ "Software"), to deal in the Software without restriction, including
60
+ without limitation the rights to use, copy, modify, merge, publish,
61
+ distribute, sublicense, and/or sell copies of the Software, and to
62
+ permit persons to whom the Software is furnished to do so, subject to
63
+ the following conditions:
64
+
65
+ The above copyright notice and this permission notice shall be
66
+ included in all copies or substantial portions of the Software.
67
+
68
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
69
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
70
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
71
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
72
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
73
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
74
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
9
+
data/bin/console ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'bitsor'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require 'irb'
15
+ IRB.start(__FILE__)
16
+
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/bitsor.gemspec ADDED
@@ -0,0 +1,33 @@
1
+
2
+ # frozen_string_literal: true
3
+
4
+ lib = File.expand_path('../lib', __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require 'bitsor/version'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'bitsor'
10
+ spec.version = Bitsor::VERSION
11
+ spec.authors = ['Adrian Castillo']
12
+ spec.email = ['rodacato@gmail.com']
13
+
14
+ spec.summary = 'Unofficial Ruby API wrapper for use with Bitso.'
15
+ spec.description = 'Manage your bitso account from their API endpoints'
16
+ spec.homepage = 'https://www.bitsotower.com'
17
+ spec.license = 'MIT'
18
+ spec.metadata = { "source_code_uri" => "https://github.com/rodacato/bitsor" }
19
+
20
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
+ f.match(%r{^(test|spec|features)/})
22
+ end
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.add_dependency 'typhoeus', '~> 1.3'
28
+
29
+ spec.add_development_dependency 'bundler', '~> 1.15'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.0'
32
+ end
33
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module AccountStatus
6
+ def account_status
7
+ normalize_response.with(:account_status) do
8
+ get('/v3/account_status/')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module AvailableBooks
6
+ def available_books
7
+ normalize_response.with(:book) do
8
+ get '/v3/available_books'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module Balance
6
+ def balance
7
+ normalize_response.with(:account_balances) do
8
+ get('/v3/balance/')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module BitcoinWithdrawal
6
+ def bitcoin_withdrawal
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module DebitCardWithdrawal
6
+ def debit_card_withdrawal
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module EtherWithdrawal
6
+ def ether_withdrawal
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module Fees
6
+ def fees
7
+ normalize_response.with(:account_fees) do
8
+ get('/v3/fees/')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module Funding
6
+ def fundings(limit: 25)
7
+ normalize_response.with(:funding) do
8
+ get('/v3/fundings/', limit: limit)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module FundingDestination
6
+ def funding_destination(fund_currency:)
7
+ normalize_response.with(:funding_destination) do
8
+ get('/v3/funding_destination/', fund_currency: fund_currency)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module KycDocuments
6
+ def kyc_documents
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module Ledger
6
+ def ledger(marker: nil, sort: :desc, limit: 25)
7
+ normalize_response.with(:ledger) do
8
+ get('/v3/ledger/', marker: marker, sort: sort, limit: limit)
9
+ end
10
+ end
11
+
12
+ def ledger_trades(marker: nil, sort: :desc, limit: 25)
13
+ normalize_response.with(:ledger) do
14
+ get('/v3/ledger/trades/', marker: marker, sort: sort, limit: limit)
15
+ end
16
+ end
17
+
18
+ def ledger_fees(marker: nil, sort: :desc, limit: 25)
19
+ normalize_response.with(:ledger) do
20
+ get('/v3/ledger/fees/', marker: marker, sort: sort, limit: limit)
21
+ end
22
+ end
23
+
24
+ def ledger_fundings(marker: nil, sort: :desc, limit: 25)
25
+ normalize_response.with(:ledger) do
26
+ get('/v3/ledger/fundings/', marker: marker, sort: sort, limit: limit)
27
+ end
28
+ end
29
+
30
+ def ledger_withdrawals(marker: nil, sort: :desc, limit: 25)
31
+ normalize_response.with(:ledger) do
32
+ get('/v3/ledger/withdrawals/', marker: marker, sort: sort, limit: limit)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module MxBankCodes
6
+ def mx_bank_codes
7
+ get('/v3/mx_bank_codes/')
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module OpenOrders
6
+ def open_orders(book: :all, marker: nil, sort: :desc, limit: 25)
7
+ normalize_response.with(:order) do
8
+ get('/v3/open_orders/', book: book, marker: marker, sort: sort, limit: limit)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module OrderBook
6
+ def order_book(book:, aggregate: false)
7
+ get('/v3/order_book/', book: book, aggregate: aggregate)
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module OrderTrades
6
+ def order_trades(oid:)
7
+ get("/v3/order_trades/#{oid}/")
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module Orders
6
+ def lookup_order(oid:)
7
+ normalize_response.with(:order) do
8
+ get("/v3/orders/#{oid}/")
9
+ end
10
+ end
11
+
12
+ def place_order(book:, side:, type:, major: nil, minor: nil, price: nil)
13
+ post('/v3/orders/', book: book, side: side, type: type, major: major, minor: minor, price: price)
14
+ end
15
+
16
+ def cancel_order(oid:)
17
+ delete("/v3/orders/#{oid}/")
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module PhoneNumber
6
+ def phone_number
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module PhoneNumberWithdrawal
6
+ def phone_number_withdrawal
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module PhoneVerification
6
+ def phone_verification
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module SpeiWithdrawal
6
+ def spei_withdrawal
7
+ raise Bitsor::NotImplemented
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bitsor
4
+ class Client
5
+ module Ticker
6
+ def ticker(book:)
7
+ normalize_response.with(:ticker) do
8
+ get('/v3/ticker/', book: book)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+