cryptomkt-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '0696ba712fb05a61686d78f3224b23257dc13f515f8cbeaeee7585a12411afa8'
4
+ data.tar.gz: 30c3636447476587de0a35f82018784e7e3bf1403276801f972ce14b5b12bba9
5
+ SHA512:
6
+ metadata.gz: 98d37672d52490fc096200a8cf50ec68a94a0e2cbb73cd54aef0fe0591f9704739ea17fce385730b09a8b6856dc74b61a008b8222873feadc97da867b341ff96
7
+ data.tar.gz: c99d699a396d0bdc8e9c5341f147fdf13e007b0759c94e05a847389b9f8b6ce98cc04f936311d0c49aebb9defb69d1d1a5171db27a5cd6e1950c3ff9e17a16ea
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.5.1
5
+ before_install: gem install bundler -v 1.16.2
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in cryptomkt-ruby.gemspec
6
+ gemspec
@@ -0,0 +1,41 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cryptomkt-ruby (0.1.0)
5
+ faraday
6
+ json
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ diff-lcs (1.3)
12
+ faraday (0.15.2)
13
+ multipart-post (>= 1.2, < 3)
14
+ json (2.1.0)
15
+ multipart-post (2.0.0)
16
+ rake (10.5.0)
17
+ rspec (3.7.0)
18
+ rspec-core (~> 3.7.0)
19
+ rspec-expectations (~> 3.7.0)
20
+ rspec-mocks (~> 3.7.0)
21
+ rspec-core (3.7.1)
22
+ rspec-support (~> 3.7.0)
23
+ rspec-expectations (3.7.0)
24
+ diff-lcs (>= 1.2.0, < 2.0)
25
+ rspec-support (~> 3.7.0)
26
+ rspec-mocks (3.7.0)
27
+ diff-lcs (>= 1.2.0, < 2.0)
28
+ rspec-support (~> 3.7.0)
29
+ rspec-support (3.7.1)
30
+
31
+ PLATFORMS
32
+ ruby
33
+
34
+ DEPENDENCIES
35
+ bundler (~> 1.16)
36
+ cryptomkt-ruby!
37
+ rake (~> 10.0)
38
+ rspec (~> 3.0)
39
+
40
+ BUNDLED WITH
41
+ 1.16.2
@@ -0,0 +1,37 @@
1
+ # Cryptomkt Ruby wrapper
2
+
3
+ Wrapper for Cryptomkt API, check documentation at [https://developers.cryptomkt.com/es](https://developers.cryptomkt.com/es/?shell#obtener-balance) and get credentials in [www.cryptomkt.com](https://www.cryptomkt.com/account#api_tab)
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'cryptomkt-ruby'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install cryptomkt-ruby
20
+
21
+ ## Usage
22
+
23
+ client = CryptomktRuby::Client.new(key, secret)
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ronzalo/cryptomkt-ruby.
34
+
35
+ ## TODO
36
+
37
+ Implement CryptoCompra
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "cryptomkt_ruby"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -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
@@ -0,0 +1,31 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "cryptomkt_ruby/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "cryptomkt-ruby"
8
+ spec.version = CryptomktRuby::VERSION
9
+ spec.authors = ["Gonzalo Moreno"]
10
+ spec.email = ["goncab380@hotmail.com"]
11
+ spec.license = "MIT"
12
+ spec.summary = "Ruby SDK for Cryptomkt"
13
+ spec.description = "Wrapper for Cryptomkt API"
14
+ spec.homepage = "https://github.com/ronzalo/cryptomkt-ruby"
15
+
16
+ # Specify which files should be added to the gem when it is released.
17
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ end
21
+ spec.bindir = "exe"
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.16"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rspec", "~> 3.0"
28
+
29
+ spec.add_dependency "faraday"
30
+ spec.add_dependency "json"
31
+ end
@@ -0,0 +1,5 @@
1
+ require_relative 'cryptomkt_ruby/version'
2
+ require_relative 'cryptomkt_ruby/client'
3
+
4
+ module CryptomktRuby
5
+ end
@@ -0,0 +1,236 @@
1
+ require 'faraday'
2
+ require 'openssl'
3
+ require 'json'
4
+ require_relative 'error_handler'
5
+
6
+ API_URL = 'https://api.cryptomkt.com'.freeze
7
+
8
+ module CryptomktRuby
9
+ class Client
10
+ def initialize(key, secret, options = {})
11
+ @key = key
12
+ @secret = secret
13
+ @logger = options.delete(:logger)
14
+ end
15
+
16
+ # Retorna lista de órdenes activas en CryptoMarket.
17
+ # @param [String] market
18
+ # @param [String] type
19
+ # @param [String] page
20
+ # @param [String] limit
21
+ # @return [Hash]
22
+ def book(market:, type:, page: 1, limit: 20)
23
+ path = '/v1/book'
24
+
25
+ params = {
26
+ market: market,
27
+ type: type,
28
+ page: page,
29
+ limit: limit
30
+ }
31
+
32
+ public_get(path, params)
33
+ end
34
+
35
+ # Corresponden a las transacciones realizadas en CryptoMarket.
36
+ # @param [String] market
37
+ # @param [String] start_at
38
+ # @param [String] end_at
39
+ # @param [String] page
40
+ # @param [String] limit
41
+ # @return [Hash]
42
+ def trades(market:, start_at: Time.now, end_at: Time.now, page: 1, limit: 20)
43
+ path = '/v1/trades'
44
+
45
+ params = {
46
+ market: market,
47
+ start: start_at.strftime('%Y-%m-%d'),
48
+ end: end_at.strftime('%Y-%m-%d'),
49
+ page: page,
50
+ limit: limit
51
+ }
52
+
53
+ public_get(path, params)
54
+ end
55
+
56
+ # El mercado corresponde a los pares de mercados disponibles en CryptoMarket.
57
+ # @return [Array]
58
+ def market
59
+ path = '/v1/market'
60
+
61
+ public_get(path, {})
62
+ end
63
+
64
+ # Retorna una lista de objetos ticker de mercados activos. Si está presente parámetro market solo se retorna ticker de mercado especificado.
65
+ # @param [String] market
66
+ # @return [Array]
67
+ def ticker(market: nil)
68
+ path = '/v1/ticker'
69
+
70
+ public_get(path, market: market)
71
+ end
72
+
73
+ # Retorna lista de órdenes activas en CryptoMarket pertenecientes al usuario propietario de las credenciales.
74
+ # @param [String] market
75
+ # @param [String] page
76
+ # @param [String] limit
77
+ # @return [Hash]
78
+ def active_orders(market:, page: 0, limit: 20)
79
+ path = '/v1/orders/active'
80
+
81
+ params = {
82
+ market: market,
83
+ page: page,
84
+ limit: limit
85
+ }
86
+
87
+ private_get(path, params)
88
+ end
89
+
90
+ # Retorna lista de órdenes ejecutadas en CryptoMarket pertenecientes al usuario propietario de las credenciales.
91
+ # @param [String] market
92
+ # @param [String] page
93
+ # @param [String] limit
94
+ # @return [Hash]
95
+ def executed_orders(market:, page: 0, limit: 20)
96
+ path = '/v1/orders/executed'
97
+
98
+ params = {
99
+ market: market,
100
+ page: page,
101
+ limit: limit
102
+ }
103
+
104
+ private_get(path, params)
105
+ end
106
+
107
+ # Permite cancelar una orden
108
+ # @param [String] id
109
+ # @return [Hash]
110
+ def cancel_order(id)
111
+ path = '/v1/orders/cancel'
112
+
113
+ private_post(path, id: id)
114
+ end
115
+
116
+ # Retorna el estado de una orden
117
+ # @param [String] id
118
+ # @return [Hash]
119
+ def status_order(id)
120
+ path = '/v1/orders/status'
121
+
122
+ private_get(path, id: id)
123
+ end
124
+
125
+ # Permite obtener en base al estado actual del mercado, la cantidad de criptomonedas o moneda local a recibir si se ejecuta una compra o venta respectivamente.
126
+ # @param [String] market
127
+ # @param [String] type
128
+ # @param [String] amount
129
+ # @return [Hash]
130
+ def instant_order(market:, type:, amount:)
131
+ path = '/v1/orders/instant/get'
132
+
133
+ params = {
134
+ market: market,
135
+ type: type,
136
+ amount: amount
137
+ }
138
+
139
+ private_get(path, params)
140
+ end
141
+
142
+ # Permite crear una orden de compra o venta dentro de CryptoMarket
143
+ # @param [String] market
144
+ # @param [String] type
145
+ # @param [String] amount
146
+ # @param [String] price
147
+ # @return [Hash]
148
+ def create_market_order(market:, type:, amount:, price:)
149
+ path = '/v1/orders/create'
150
+
151
+ params = {
152
+ market: market,
153
+ type: type,
154
+ amount: amount,
155
+ price: price
156
+ }
157
+
158
+ private_post(path, params)
159
+ end
160
+
161
+ # Permite crear una orden instantánea en el Instant Exchange de CryptoMarket
162
+ # @param [String] market
163
+ # @param [String] type
164
+ # @param [String] amount
165
+ # @return [Hash]
166
+ def create_instant_order(market:, type:, amount:)
167
+ path = '/v1/orders/instant/create'
168
+
169
+ params = {
170
+ market: market,
171
+ type: type,
172
+ amount: amount
173
+ }
174
+
175
+ private_post(path, params)
176
+ end
177
+
178
+ # Permite obtener el balance actual de tus billeteras en CryptoMarket
179
+ # @return [Array]
180
+ def balance
181
+ path = '/v1/balance'
182
+
183
+ private_get(path)
184
+ end
185
+
186
+ private
187
+
188
+ def conn
189
+ @conn ||= Faraday.new(url: API_URL) do |faraday|
190
+ faraday.use ErrorHandler
191
+ faraday.response :logger if @logger
192
+ faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
193
+ end
194
+ end
195
+
196
+ def parsed_response(response)
197
+ json = JSON.parse(response.body)
198
+ json['data']
199
+ end
200
+
201
+ def public_get(path, params)
202
+ response = conn.get path, params
203
+
204
+ parsed_response(response)
205
+ end
206
+
207
+ def private_get(path, params = {})
208
+ timestamp = Time.now.to_i.to_s
209
+ response = conn.get path, params do |req|
210
+ req.headers['X-MKT-APIKEY'] = @key
211
+ req.headers['X-MKT-SIGNATURE'] = signature(timestamp, path)
212
+ req.headers['X-MKT-TIMESTAMP'] = timestamp
213
+ end
214
+
215
+ parsed_response(response)
216
+ end
217
+
218
+ def private_post(path, params = {})
219
+ timestamp = Time.now.to_i.to_s
220
+ response = conn.post path, URI.encode_www_form(params) do |req|
221
+ req.headers['X-MKT-APIKEY'] = @key
222
+ req.headers['X-MKT-SIGNATURE'] = signature(timestamp, path, params)
223
+ req.headers['X-MKT-TIMESTAMP'] = timestamp
224
+ end
225
+
226
+ parsed_response(response)
227
+ end
228
+
229
+ def signature(timestamp, path, body = '')
230
+ body = body.sort.to_h.values.reduce(:+) if body.is_a? Hash
231
+
232
+ message = [timestamp, path, body].inject(:+)
233
+ OpenSSL::HMAC.hexdigest('SHA384', @secret, message)
234
+ end
235
+ end
236
+ end
@@ -0,0 +1,27 @@
1
+ require 'faraday'
2
+
3
+ class ErrorHandler < Faraday::Response::Middleware
4
+ CLIENT_ERROR_STATUSES = 400...600
5
+
6
+ def on_complete(env)
7
+ case env[:status]
8
+ when 404
9
+ raise Faraday::Error::ResourceNotFound, response_values(env)
10
+ when 407
11
+ # mimic the behavior that we get with proxy requests with HTTPS
12
+ raise Faraday::Error::ConnectionFailed, %(407 "Proxy Authentication Required ")
13
+ when CLIENT_ERROR_STATUSES
14
+ raise GenericError, response_values(env)
15
+ end
16
+ end
17
+
18
+ def response_values(env)
19
+ { status: env.status, headers: env.response_headers, body: env.body }
20
+ end
21
+ end
22
+
23
+ class GenericError < Faraday::Error::ClientError
24
+ def initialize(exception = nil)
25
+ super("the server responded with status #{exception[:status]}: #{exception[:body]}")
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module CryptomktRuby
2
+ VERSION = '0.1.0'.freeze
3
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cryptomkt-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Gonzalo Moreno
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-07-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: json
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Wrapper for Cryptomkt API
84
+ email:
85
+ - goncab380@hotmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - README.md
96
+ - Rakefile
97
+ - bin/console
98
+ - bin/setup
99
+ - cryptomkt-ruby.gemspec
100
+ - lib/cryptomkt_ruby.rb
101
+ - lib/cryptomkt_ruby/client.rb
102
+ - lib/cryptomkt_ruby/error_handler.rb
103
+ - lib/cryptomkt_ruby/version.rb
104
+ homepage: https://github.com/ronzalo/cryptomkt-ruby
105
+ licenses:
106
+ - MIT
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 2.7.6
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: Ruby SDK for Cryptomkt
128
+ test_files: []