coincap 0.1.3 → 0.3.0
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 +4 -4
- data/.rubocop.yml +178 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +12 -5
- data/README.md +12 -4
- data/Rakefile +6 -6
- data/lib/coincap/{assets_price.rb → assets.rb} +45 -21
- data/lib/coincap/exchanges.rb +6 -6
- data/lib/coincap/helper.rb +14 -8
- data/lib/coincap/live_assets.rb +46 -0
- data/lib/coincap/markets.rb +21 -21
- data/lib/coincap/rates.rb +5 -5
- data/lib/coincap/version.rb +7 -1
- data/lib/coincap.rb +17 -7
- metadata +15 -14
- data/coincap.gemspec +0 -36
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3804fc6897bedeab59d3433b78d966c9ead78b479ddda7fa68224dc82ab3269a
|
|
4
|
+
data.tar.gz: e1d4b18de106069036912318ae4fe7c5fab9bfa9eee8f2ec148933f6642a2061
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8460be7cd7edce7958d0648e71703777f4330901a53b19cab7e461d88f86bbb42d4050bd87681e422e09d9a8f54ded167b5ef293a846e863e26f2b38efdccc55
|
|
7
|
+
data.tar.gz: 27d35e1375e21db51c987d76ac0404bb654cf4511d1e472ec8110bbfccc193219175aacd578797a0908a4f90952884bcf53957e059855e1452387277474b03dc
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
NewCops: enable
|
|
3
|
+
Gemspec/DeprecatedAttributeAssignment: # new in 1.30
|
|
4
|
+
Enabled: true
|
|
5
|
+
Gemspec/DevelopmentDependencies: # new in 1.44
|
|
6
|
+
Enabled: true
|
|
7
|
+
Gemspec/RequireMFA: # new in 1.23
|
|
8
|
+
Enabled: false
|
|
9
|
+
Layout/LineContinuationLeadingSpace: # new in 1.31
|
|
10
|
+
Enabled: true
|
|
11
|
+
Layout/LineContinuationSpacing: # new in 1.31
|
|
12
|
+
Enabled: true
|
|
13
|
+
Layout/LineEndStringConcatenationIndentation: # new in 1.18
|
|
14
|
+
Enabled: true
|
|
15
|
+
Layout/SpaceBeforeBrackets: # new in 1.7
|
|
16
|
+
Enabled: true
|
|
17
|
+
Lint/AmbiguousAssignment: # new in 1.7
|
|
18
|
+
Enabled: true
|
|
19
|
+
Lint/AmbiguousOperatorPrecedence: # new in 1.21
|
|
20
|
+
Enabled: true
|
|
21
|
+
Lint/AmbiguousRange: # new in 1.19
|
|
22
|
+
Enabled: true
|
|
23
|
+
Lint/ConstantOverwrittenInRescue: # new in 1.31
|
|
24
|
+
Enabled: true
|
|
25
|
+
Lint/DeprecatedConstants: # new in 1.8
|
|
26
|
+
Enabled: true
|
|
27
|
+
Lint/DuplicateBranch: # new in 1.3
|
|
28
|
+
Enabled: true
|
|
29
|
+
Lint/DuplicateMagicComment: # new in 1.37
|
|
30
|
+
Enabled: true
|
|
31
|
+
Lint/DuplicateMatchPattern: # new in 1.50
|
|
32
|
+
Enabled: true
|
|
33
|
+
Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
|
|
34
|
+
Enabled: true
|
|
35
|
+
Lint/EmptyBlock: # new in 1.1
|
|
36
|
+
Enabled: true
|
|
37
|
+
Lint/EmptyClass: # new in 1.3
|
|
38
|
+
Enabled: true
|
|
39
|
+
Lint/EmptyInPattern: # new in 1.16
|
|
40
|
+
Enabled: true
|
|
41
|
+
Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
|
|
42
|
+
Enabled: true
|
|
43
|
+
Lint/LambdaWithoutLiteralBlock: # new in 1.8
|
|
44
|
+
Enabled: true
|
|
45
|
+
Lint/NoReturnInBeginEndBlocks: # new in 1.2
|
|
46
|
+
Enabled: true
|
|
47
|
+
Lint/NonAtomicFileOperation: # new in 1.31
|
|
48
|
+
Enabled: true
|
|
49
|
+
Lint/NumberedParameterAssignment: # new in 1.9
|
|
50
|
+
Enabled: true
|
|
51
|
+
Lint/OrAssignmentToConstant: # new in 1.9
|
|
52
|
+
Enabled: true
|
|
53
|
+
Lint/RedundantDirGlobSort: # new in 1.8
|
|
54
|
+
Enabled: true
|
|
55
|
+
Lint/RefinementImportMethods: # new in 1.27
|
|
56
|
+
Enabled: true
|
|
57
|
+
Lint/RequireRangeParentheses: # new in 1.32
|
|
58
|
+
Enabled: true
|
|
59
|
+
Lint/RequireRelativeSelfPath: # new in 1.22
|
|
60
|
+
Enabled: true
|
|
61
|
+
Lint/SymbolConversion: # new in 1.9
|
|
62
|
+
Enabled: false
|
|
63
|
+
Lint/ToEnumArguments: # new in 1.1
|
|
64
|
+
Enabled: true
|
|
65
|
+
Lint/TripleQuotes: # new in 1.9
|
|
66
|
+
Enabled: true
|
|
67
|
+
Lint/UnexpectedBlockArity: # new in 1.5
|
|
68
|
+
Enabled: true
|
|
69
|
+
Lint/UnmodifiedReduceAccumulator: # new in 1.1
|
|
70
|
+
Enabled: true
|
|
71
|
+
Lint/UselessRescue: # new in 1.43
|
|
72
|
+
Enabled: true
|
|
73
|
+
Lint/UselessRuby2Keywords: # new in 1.23
|
|
74
|
+
Enabled: true
|
|
75
|
+
Metrics/CollectionLiteralLength: # new in 1.47
|
|
76
|
+
Enabled: true
|
|
77
|
+
Naming/BlockForwarding: # new in 1.24
|
|
78
|
+
Enabled: true
|
|
79
|
+
Security/CompoundHash: # new in 1.28
|
|
80
|
+
Enabled: true
|
|
81
|
+
Security/IoMethods: # new in 1.22
|
|
82
|
+
Enabled: true
|
|
83
|
+
Style/ArgumentsForwarding: # new in 1.1
|
|
84
|
+
Enabled: true
|
|
85
|
+
Style/ArrayIntersect: # new in 1.40
|
|
86
|
+
Enabled: true
|
|
87
|
+
Style/CollectionCompact: # new in 1.2
|
|
88
|
+
Enabled: true
|
|
89
|
+
Style/ComparableClamp: # new in 1.44
|
|
90
|
+
Enabled: true
|
|
91
|
+
Style/ConcatArrayLiterals: # new in 1.41
|
|
92
|
+
Enabled: true
|
|
93
|
+
Style/DataInheritance: # new in 1.49
|
|
94
|
+
Enabled: true
|
|
95
|
+
Style/DirEmpty: # new in 1.48
|
|
96
|
+
Enabled: true
|
|
97
|
+
Style/DocumentDynamicEvalDefinition: # new in 1.1
|
|
98
|
+
Enabled: false
|
|
99
|
+
Style/EmptyHeredoc: # new in 1.32
|
|
100
|
+
Enabled: true
|
|
101
|
+
Style/EndlessMethod: # new in 1.8
|
|
102
|
+
Enabled: true
|
|
103
|
+
Style/EnvHome: # new in 1.29
|
|
104
|
+
Enabled: true
|
|
105
|
+
Style/FetchEnvVar: # new in 1.28
|
|
106
|
+
Enabled: true
|
|
107
|
+
Style/FileEmpty: # new in 1.48
|
|
108
|
+
Enabled: true
|
|
109
|
+
Style/FileRead: # new in 1.24
|
|
110
|
+
Enabled: true
|
|
111
|
+
Style/FileWrite: # new in 1.24
|
|
112
|
+
Enabled: true
|
|
113
|
+
Style/HashConversion: # new in 1.10
|
|
114
|
+
Enabled: true
|
|
115
|
+
Style/HashExcept: # new in 1.7
|
|
116
|
+
Enabled: true
|
|
117
|
+
Style/IfWithBooleanLiteralBranches: # new in 1.9
|
|
118
|
+
Enabled: true
|
|
119
|
+
Style/InPatternThen: # new in 1.16
|
|
120
|
+
Enabled: true
|
|
121
|
+
Style/MagicCommentFormat: # new in 1.35
|
|
122
|
+
Enabled: true
|
|
123
|
+
Style/MapCompactWithConditionalBlock: # new in 1.30
|
|
124
|
+
Enabled: true
|
|
125
|
+
Style/MapToHash: # new in 1.24
|
|
126
|
+
Enabled: true
|
|
127
|
+
Style/MapToSet: # new in 1.42
|
|
128
|
+
Enabled: true
|
|
129
|
+
Style/MinMaxComparison: # new in 1.42
|
|
130
|
+
Enabled: true
|
|
131
|
+
Style/MultilineInPatternThen: # new in 1.16
|
|
132
|
+
Enabled: true
|
|
133
|
+
Style/NegatedIfElseCondition: # new in 1.2
|
|
134
|
+
Enabled: true
|
|
135
|
+
Style/NestedFileDirname: # new in 1.26
|
|
136
|
+
Enabled: true
|
|
137
|
+
Style/NilLambda: # new in 1.3
|
|
138
|
+
Enabled: true
|
|
139
|
+
Style/NumberedParameters: # new in 1.22
|
|
140
|
+
Enabled: true
|
|
141
|
+
Style/NumberedParametersLimit: # new in 1.22
|
|
142
|
+
Enabled: true
|
|
143
|
+
Style/ObjectThen: # new in 1.28
|
|
144
|
+
Enabled: true
|
|
145
|
+
Style/OpenStructUse: # new in 1.23
|
|
146
|
+
Enabled: true
|
|
147
|
+
Style/OperatorMethodCall: # new in 1.37
|
|
148
|
+
Enabled: true
|
|
149
|
+
Style/QuotedSymbols: # new in 1.16
|
|
150
|
+
Enabled: true
|
|
151
|
+
Style/RedundantArgument: # new in 1.4
|
|
152
|
+
Enabled: true
|
|
153
|
+
Style/RedundantConstantBase: # new in 1.40
|
|
154
|
+
Enabled: true
|
|
155
|
+
Style/RedundantDoubleSplatHashBraces: # new in 1.41
|
|
156
|
+
Enabled: true
|
|
157
|
+
Style/RedundantEach: # new in 1.38
|
|
158
|
+
Enabled: true
|
|
159
|
+
Style/RedundantHeredocDelimiterQuotes: # new in 1.45
|
|
160
|
+
Enabled: true
|
|
161
|
+
Style/RedundantInitialize: # new in 1.27
|
|
162
|
+
Enabled: true
|
|
163
|
+
Style/RedundantLineContinuation: # new in 1.49
|
|
164
|
+
Enabled: true
|
|
165
|
+
Style/RedundantSelfAssignmentBranch: # new in 1.19
|
|
166
|
+
Enabled: true
|
|
167
|
+
Style/RedundantStringEscape: # new in 1.37
|
|
168
|
+
Enabled: true
|
|
169
|
+
Style/SelectByRegexp: # new in 1.22
|
|
170
|
+
Enabled: true
|
|
171
|
+
Style/StringChars: # new in 1.12
|
|
172
|
+
Enabled: true
|
|
173
|
+
Style/SwapValues: # new in 1.1
|
|
174
|
+
Enabled: true
|
|
175
|
+
Layout/LineLength:
|
|
176
|
+
Enabled: false
|
|
177
|
+
Style/EvalWithLocation:
|
|
178
|
+
Enabled: false
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
coincap (0.
|
|
4
|
+
coincap (0.3.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
+
event_emitter (0.2.6)
|
|
9
10
|
json (2.6.3)
|
|
10
|
-
minitest (5.
|
|
11
|
+
minitest (5.20.0)
|
|
11
12
|
net-http (0.3.2)
|
|
12
13
|
uri
|
|
13
|
-
openssl (3.
|
|
14
|
+
openssl (3.2.0)
|
|
14
15
|
rake (13.0.6)
|
|
15
|
-
uri (0.12.
|
|
16
|
+
uri (0.12.2)
|
|
17
|
+
websocket (1.2.10)
|
|
18
|
+
websocket-client-simple (0.8.0)
|
|
19
|
+
event_emitter
|
|
20
|
+
websocket
|
|
16
21
|
|
|
17
22
|
PLATFORMS
|
|
23
|
+
x86_64-darwin-22
|
|
18
24
|
x86_64-linux
|
|
19
25
|
|
|
20
26
|
DEPENDENCIES
|
|
@@ -25,6 +31,7 @@ DEPENDENCIES
|
|
|
25
31
|
openssl (~> 3.1)
|
|
26
32
|
rake (~> 13.0)
|
|
27
33
|
uri (~> 0.12.1)
|
|
34
|
+
websocket-client-simple (~> 0.8.0)
|
|
28
35
|
|
|
29
36
|
BUNDLED WITH
|
|
30
|
-
2.
|
|
37
|
+
2.5.6
|
data/README.md
CHANGED
|
@@ -20,7 +20,7 @@ Detailed information [here](https://docs.coincap.io/).
|
|
|
20
20
|
|
|
21
21
|
## Assets Price
|
|
22
22
|
```Ruby
|
|
23
|
-
data = Coincap::
|
|
23
|
+
data = Coincap::Assets.list
|
|
24
24
|
```
|
|
25
25
|
```JSON
|
|
26
26
|
{
|
|
@@ -45,7 +45,7 @@ data = Coincap::AssetsPrice.cryptocurrencies
|
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
```Ruby
|
|
48
|
-
data = Coincap::
|
|
48
|
+
data = Coincap::Assets.single('bitcoin')
|
|
49
49
|
```
|
|
50
50
|
```JSON
|
|
51
51
|
{
|
|
@@ -67,7 +67,15 @@ data = Coincap::AssetsPrice.cryptocurrency('bitcoin')
|
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
```Ruby
|
|
70
|
-
data = Coincap::
|
|
70
|
+
data = Coincap::Assets.history('bitcoin', :one_minute)
|
|
71
|
+
```
|
|
72
|
+
or
|
|
73
|
+
```Ruby
|
|
74
|
+
data = Coincap::Assets.history_one_minute('bitcoin')
|
|
75
|
+
```
|
|
76
|
+
and with timestamp
|
|
77
|
+
```Ruby
|
|
78
|
+
data = Coincap::Assets.history_one_minute('bitcoin', 1530403200000, 1533581103627)
|
|
71
79
|
```
|
|
72
80
|
```JSON
|
|
73
81
|
{
|
|
@@ -83,7 +91,7 @@ data = Coincap::AssetsPrice.cryptocurrency_history('bitcoin', :one_minute)
|
|
|
83
91
|
```
|
|
84
92
|
|
|
85
93
|
```Ruby
|
|
86
|
-
data = Coincap::
|
|
94
|
+
data = Coincap::Assets.markets('bitcoin')
|
|
87
95
|
```
|
|
88
96
|
```JSON
|
|
89
97
|
{
|
data/Rakefile
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
4
|
+
require 'rake/testtask'
|
|
5
5
|
|
|
6
6
|
Rake::TestTask.new(:test) do |t|
|
|
7
|
-
t.libs <<
|
|
8
|
-
t.libs <<
|
|
9
|
-
t.test_files = FileList[
|
|
7
|
+
t.libs << 'test'
|
|
8
|
+
t.libs << 'lib'
|
|
9
|
+
t.test_files = FileList['test/**/test_*.rb']
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
task default: :test
|
|
12
|
+
task default: :test
|
|
@@ -8,8 +8,8 @@ module Coincap
|
|
|
8
8
|
# meaning higher volume exchanges have more affect on this global price.
|
|
9
9
|
# All values are translated into USD (United States Dollar)
|
|
10
10
|
# and can be translated into other units of measurement through the /rates endpoint.
|
|
11
|
-
module
|
|
12
|
-
URI_API =
|
|
11
|
+
module Assets
|
|
12
|
+
URI_API = "#{BASE_URI}#{VERSION_API}/assets"
|
|
13
13
|
|
|
14
14
|
TIME_INTERVAL = {
|
|
15
15
|
one_minute: 'm1',
|
|
@@ -49,9 +49,9 @@ module Coincap
|
|
|
49
49
|
# @param [String] ids (nil) Query with multiple ids=bitcoin,ethereum,monero
|
|
50
50
|
# @param [Integer] limit (nil) Max limit of 2000
|
|
51
51
|
# @param [Integer] offset (nil) Offset
|
|
52
|
-
# @return [
|
|
53
|
-
def self.
|
|
54
|
-
Helper.
|
|
52
|
+
# @return [Hash]
|
|
53
|
+
def self.list(search: nil, ids: nil, limit: nil, offset: nil)
|
|
54
|
+
Helper.fetch_data(URI_API, search: search, ids: ids, limit: limit, offset: offset)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
# Get single cryptocurrency
|
|
@@ -73,10 +73,10 @@ module Coincap
|
|
|
73
73
|
# "timestamp": 1533581098863
|
|
74
74
|
# }
|
|
75
75
|
#
|
|
76
|
-
# @param [String]
|
|
77
|
-
# @return [
|
|
78
|
-
def self.
|
|
79
|
-
Helper.
|
|
76
|
+
# @param asset_id [String] Asset id, for example, bitcoin
|
|
77
|
+
# @return [Hash]
|
|
78
|
+
def self.single(asset_id)
|
|
79
|
+
Helper.fetch_data("#{URI_API}/#{asset_id}")
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
# Get cryptocurrency history price
|
|
@@ -92,12 +92,36 @@ module Coincap
|
|
|
92
92
|
# "timestamp": 1533581103627
|
|
93
93
|
# }
|
|
94
94
|
#
|
|
95
|
-
#
|
|
96
|
-
#
|
|
97
|
-
#
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
# You can call the method like this:
|
|
96
|
+
#
|
|
97
|
+
# Coincap::AssetsPrice.cryptocurrency_history('bitcoin', :one_minute)
|
|
98
|
+
#
|
|
99
|
+
# Coincap::AssetsPrice.cryptocurrency_history('bitcoin', 'm1')
|
|
100
|
+
#
|
|
101
|
+
#
|
|
102
|
+
# Or like this:
|
|
103
|
+
#
|
|
104
|
+
# Coincap::AssetsPrice.cryptocurrency_history_one_minute('bitcoin')
|
|
105
|
+
#
|
|
106
|
+
# @param asset_id [String] Asset id, for example, bitcoin
|
|
107
|
+
# @param interval [Symbol|String] Select one from the list of TIME_INTERVAL values
|
|
108
|
+
# for example, a string 'm1' or a symbol :one_minute
|
|
109
|
+
# @param start_at [Integer] Start time in milliseconds
|
|
110
|
+
# @param end_at [Integer] End time in milliseconds
|
|
111
|
+
# @return [Hash]
|
|
112
|
+
def self.history(asset_id, interval, start_at = nil, end_at = nil)
|
|
113
|
+
Helper.fetch_data("#{URI_API}/#{asset_id}/history",
|
|
114
|
+
interval: interval.is_a?(Symbol) ? TIME_INTERVAL[interval] : interval,
|
|
115
|
+
start: start_at,
|
|
116
|
+
end: end_at)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
TIME_INTERVAL.each do |key, value|
|
|
120
|
+
class_eval <<~RUBY
|
|
121
|
+
def self.history_#{key}(asset_id, start_at = nil, end_at = nil)
|
|
122
|
+
self.history(asset_id, '#{value}', start_at, end_at)
|
|
123
|
+
end
|
|
124
|
+
RUBY
|
|
101
125
|
end
|
|
102
126
|
|
|
103
127
|
# Get price cryptocurrency with markets
|
|
@@ -119,12 +143,12 @@ module Coincap
|
|
|
119
143
|
# "timestamp": 1539289444052
|
|
120
144
|
# }
|
|
121
145
|
#
|
|
122
|
-
# @param [String]
|
|
123
|
-
# @param [Integer]
|
|
124
|
-
# @param [Integer]
|
|
125
|
-
# @return [
|
|
126
|
-
def self.
|
|
127
|
-
Helper.
|
|
146
|
+
# @param asset_id [String] Asset id, for example, bitcoin
|
|
147
|
+
# @param limit [Integer] Max limit of 2000
|
|
148
|
+
# @param offset [Integer] Offset
|
|
149
|
+
# @return [Hash]
|
|
150
|
+
def self.markets(asset_id, limit: nil, offset: nil)
|
|
151
|
+
Helper.fetch_data("#{URI_API}/#{asset_id}/markets", limit: limit, offset: offset)
|
|
128
152
|
end
|
|
129
153
|
end
|
|
130
154
|
end
|
data/lib/coincap/exchanges.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Coincap
|
|
|
11
11
|
# For that purpose you will find an "updated" key for each exchange.
|
|
12
12
|
# For more details into coin pairs and volume, see the /markets endpoint.
|
|
13
13
|
module Exchanges
|
|
14
|
-
URI_API =
|
|
14
|
+
URI_API = "#{BASE_URI}#{VERSION_API}/exchanges"
|
|
15
15
|
|
|
16
16
|
# Returns a list of all exchanges.
|
|
17
17
|
#
|
|
@@ -33,9 +33,9 @@ module Coincap
|
|
|
33
33
|
# "timestamp": 1536605835421
|
|
34
34
|
# }
|
|
35
35
|
#
|
|
36
|
-
# @return [
|
|
36
|
+
# @return [Hash]
|
|
37
37
|
def self.list
|
|
38
|
-
Helper.
|
|
38
|
+
Helper.fetch_data(URI_API)
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
# Returns a single exchange.
|
|
@@ -55,10 +55,10 @@ module Coincap
|
|
|
55
55
|
# "timestamp": 1536605874069
|
|
56
56
|
# }
|
|
57
57
|
#
|
|
58
|
-
# @param exchange_id [String]
|
|
59
|
-
# @return [
|
|
58
|
+
# @param exchange_id [String] Search by exchange name, for example, kraken
|
|
59
|
+
# @return [Hash]
|
|
60
60
|
def self.single(exchange_id)
|
|
61
|
-
Helper.
|
|
61
|
+
Helper.fetch_data("#{URI_API}/#{exchange_id}")
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
end
|
data/lib/coincap/helper.rb
CHANGED
|
@@ -6,31 +6,37 @@ require 'net/http'
|
|
|
6
6
|
require 'openssl'
|
|
7
7
|
|
|
8
8
|
module Coincap
|
|
9
|
+
BASE_URI = 'https://api.coincap.io/'
|
|
10
|
+
VERSION_API = 'v2'
|
|
11
|
+
|
|
9
12
|
# Helper module
|
|
10
13
|
module Helper
|
|
11
14
|
class << self
|
|
12
15
|
# Request to read data
|
|
13
|
-
#
|
|
14
|
-
# @param
|
|
15
|
-
# @
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
#
|
|
17
|
+
# @param uri_string [String] String of the uri
|
|
18
|
+
# @param queries_hash [Hash] Queries hash for the request
|
|
19
|
+
# @return [Hash] Hash of the response
|
|
20
|
+
def fetch_data(uri_string, **queries_hash)
|
|
21
|
+
url = build_uri(uri_string, **queries_hash)
|
|
22
|
+
data = http_get url
|
|
23
|
+
JSON.parse data
|
|
18
24
|
end
|
|
19
25
|
|
|
20
26
|
private
|
|
21
27
|
|
|
22
28
|
def http_get(uri)
|
|
23
|
-
config = Coincap.
|
|
29
|
+
config = Coincap.config
|
|
24
30
|
|
|
25
31
|
headers = {
|
|
26
|
-
'Accept-Encoding': config.accept_encoding
|
|
32
|
+
'Accept-Encoding': config.accept_encoding,
|
|
27
33
|
'Authorization': config.api_key.nil? ? nil : "Bearer #{config.api_key}"
|
|
28
34
|
}.compact
|
|
29
35
|
|
|
30
36
|
Net::HTTP.get(uri, headers)
|
|
31
37
|
end
|
|
32
38
|
|
|
33
|
-
def
|
|
39
|
+
def build_uri(uri, **queries_hash)
|
|
34
40
|
queries_str = queries_hash.compact.map { |key, value| "#{key}=#{value}" }.join('&')
|
|
35
41
|
URI("#{uri}#{queries_str.empty? ? '' : "?#{queries_str}"}")
|
|
36
42
|
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'websocket-client-simple'
|
|
2
|
+
|
|
3
|
+
module Coincap
|
|
4
|
+
class LiveAssets
|
|
5
|
+
BASE_URI = 'wss://ws.coincap.io/prices?assets='
|
|
6
|
+
|
|
7
|
+
# Initialize the websocket
|
|
8
|
+
# @param assets [Array] List of assets
|
|
9
|
+
def initialize(assets = 'ALL')
|
|
10
|
+
@assets = assets
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Connect to the websocket
|
|
14
|
+
def connect
|
|
15
|
+
uri = "#{BASE_URI}#{@assets == 'ALL' ? @assets : @assets.join(',')}"
|
|
16
|
+
@ws = WebSocket::Client::Simple.connect(uri)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Close the websocket
|
|
20
|
+
def disconnect
|
|
21
|
+
@ws.close
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# When receive the price
|
|
25
|
+
def on_price(&on_message)
|
|
26
|
+
@ws.on :message do |event|
|
|
27
|
+
on_message.call(event.data)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# When open the websocket
|
|
32
|
+
def on_open(&on_open)
|
|
33
|
+
@ws.on :open, &on_open
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# When close the websocket
|
|
37
|
+
def on_close(&on_close)
|
|
38
|
+
@ws.on :close, &on_close
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# When error
|
|
42
|
+
def on_error(&on_error)
|
|
43
|
+
@ws.on :error, &on_error
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/coincap/markets.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Coincap
|
|
|
10
10
|
# All market data represents actual trades processed, orders on an exchange are not represented.
|
|
11
11
|
# Data received from individual markets is used to calculate the current price of an asset.
|
|
12
12
|
module Markets
|
|
13
|
-
URI_API =
|
|
13
|
+
URI_API = "#{BASE_URI}#{VERSION_API}/markets"
|
|
14
14
|
|
|
15
15
|
# Returns a list of all markets.
|
|
16
16
|
#
|
|
@@ -35,27 +35,27 @@ module Coincap
|
|
|
35
35
|
# "timestamp": 1533581173350
|
|
36
36
|
# }
|
|
37
37
|
#
|
|
38
|
-
# @param
|
|
39
|
-
# @param
|
|
40
|
-
# @param
|
|
41
|
-
# @param
|
|
42
|
-
# @param
|
|
43
|
-
# @param
|
|
44
|
-
# @param
|
|
45
|
-
# @param
|
|
46
|
-
# @param
|
|
47
|
-
# @return [
|
|
38
|
+
# @param exchange_id (nil) [String] Search by exchange id (e.g. 'binance')
|
|
39
|
+
# @param base_symbol (nil) [String] Returns all containing the base symbol
|
|
40
|
+
# @param quote_symbol (nil) [String] Returns all containing the quote symbol
|
|
41
|
+
# @param base_id (nil) [String] Returns all containing the base id
|
|
42
|
+
# @param quote_id (nil) [String] Returns all containing the quote id
|
|
43
|
+
# @param asset_symbol (nil) [String] Returns all assets containing symbol (base and quote)
|
|
44
|
+
# @param asset_id (nil) [String] Returns all assets containing id (base and quote)
|
|
45
|
+
# @param limit (nil) [Integer] Max limit of 2000
|
|
46
|
+
# @param offset (nil) [Integer] The number of results to skip
|
|
47
|
+
# @return [Hash]
|
|
48
48
|
def self.list(**options)
|
|
49
|
-
Helper.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
Helper.fetch_data(URI_API,
|
|
50
|
+
exchangeId: options[:exchange_id],
|
|
51
|
+
baseSymbol: options[:base_symbol],
|
|
52
|
+
quoteSymbol: options[:quote_symbol],
|
|
53
|
+
baseId: options[:base_id],
|
|
54
|
+
quoteId: options[:quote_id],
|
|
55
|
+
assetSymbol: options[:asset_symbol],
|
|
56
|
+
assetId: options[:asset_id],
|
|
57
|
+
limit: options[:limit],
|
|
58
|
+
offset: options[:offset])
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
end
|
data/lib/coincap/rates.rb
CHANGED
|
@@ -8,7 +8,7 @@ module Coincap
|
|
|
8
8
|
# We offer fiat and top cryptocurrency translated rates.
|
|
9
9
|
# Fiat rates are available through OpenExchangeRates.org.
|
|
10
10
|
module Rates
|
|
11
|
-
URI_API =
|
|
11
|
+
URI_API = "#{BASE_URI}#{VERSION_API}/rates"
|
|
12
12
|
|
|
13
13
|
# Returns a list of all rates.
|
|
14
14
|
#
|
|
@@ -26,9 +26,9 @@ module Coincap
|
|
|
26
26
|
# "timestamp": 1536347807471
|
|
27
27
|
# }
|
|
28
28
|
#
|
|
29
|
-
# @return [
|
|
29
|
+
# @return [Hash]
|
|
30
30
|
def self.list
|
|
31
|
-
Helper.
|
|
31
|
+
Helper.fetch_data(URI_API)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
# Returns a single rate.
|
|
@@ -45,9 +45,9 @@ module Coincap
|
|
|
45
45
|
# }
|
|
46
46
|
#
|
|
47
47
|
# @param asset_id [String] The asset id (bitcoin)
|
|
48
|
-
# @return [
|
|
48
|
+
# @return [Hash]
|
|
49
49
|
def self.single(asset_id)
|
|
50
|
-
Helper.
|
|
50
|
+
Helper.fetch_data("#{URI_API}/#{asset_id}")
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
end
|
data/lib/coincap/version.rb
CHANGED
data/lib/coincap.rb
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'coincap/
|
|
4
|
-
require_relative 'coincap/
|
|
3
|
+
require_relative 'coincap/assets'
|
|
4
|
+
require_relative 'coincap/exchanges'
|
|
5
5
|
require_relative 'coincap/helper'
|
|
6
|
+
require_relative 'coincap/live_assets'
|
|
6
7
|
require_relative 'coincap/markets'
|
|
7
8
|
require_relative 'coincap/rates'
|
|
8
|
-
require_relative 'coincap/
|
|
9
|
+
require_relative 'coincap/version'
|
|
9
10
|
|
|
10
11
|
# CoinCap 2.0 RESTful API is currently in production!
|
|
11
12
|
# The CoinCap team is excited to offer you new endpoints and more clarity on pricing!
|
|
13
|
+
#
|
|
12
14
|
# CoinCap 2.0 launched on September 26, 2018.
|
|
13
15
|
# Please let us know what you like, what you would hope to see, or any bugs/changes that you'd like to document.
|
|
16
|
+
#
|
|
14
17
|
# The easiest way to submit feedback to our team is to fill out a support ticket here.
|
|
15
18
|
# The old CoinCap API is deprecated and was shut down on March 1, 2019.
|
|
19
|
+
#
|
|
16
20
|
# For any issues with transitioning from the old CoinCap API to the new,
|
|
17
21
|
# please submit feedback via the zendesk link above!
|
|
18
22
|
module Coincap
|
|
@@ -29,10 +33,16 @@ module Coincap
|
|
|
29
33
|
end
|
|
30
34
|
end
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
class << self
|
|
37
|
+
# Configuration the Coincap API
|
|
38
|
+
# @return [Coincap::Configuration]
|
|
39
|
+
def config
|
|
40
|
+
@config ||= Configuration.new
|
|
41
|
+
end
|
|
33
42
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
43
|
+
# Configuration the Coincap API
|
|
44
|
+
def self.configure
|
|
45
|
+
yield config
|
|
46
|
+
end
|
|
37
47
|
end
|
|
38
48
|
end
|
metadata
CHANGED
|
@@ -1,43 +1,44 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coincap
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
8
|
-
autorequire:
|
|
7
|
+
- Vitalii Bakun
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-04-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
|
-
description: CoinCap is a useful tool for real-time pricing and market activity
|
|
14
|
-
over 1,000 cryptocurrencies
|
|
13
|
+
description: " CoinCap is a useful tool for real-time pricing and market activity
|
|
14
|
+
for over 1,000 cryptocurrencies.\n"
|
|
15
15
|
email:
|
|
16
16
|
- crossdoh@gmail.com
|
|
17
17
|
executables: []
|
|
18
18
|
extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
|
20
20
|
files:
|
|
21
|
+
- ".rubocop.yml"
|
|
21
22
|
- Gemfile
|
|
22
23
|
- Gemfile.lock
|
|
23
24
|
- LICENSE.txt
|
|
24
25
|
- README.md
|
|
25
26
|
- Rakefile
|
|
26
|
-
- coincap.gemspec
|
|
27
27
|
- lib/coincap.rb
|
|
28
|
-
- lib/coincap/
|
|
28
|
+
- lib/coincap/assets.rb
|
|
29
29
|
- lib/coincap/exchanges.rb
|
|
30
30
|
- lib/coincap/helper.rb
|
|
31
|
+
- lib/coincap/live_assets.rb
|
|
31
32
|
- lib/coincap/markets.rb
|
|
32
33
|
- lib/coincap/rates.rb
|
|
33
34
|
- lib/coincap/version.rb
|
|
34
|
-
homepage:
|
|
35
|
+
homepage:
|
|
35
36
|
licenses:
|
|
36
37
|
- MIT
|
|
37
38
|
metadata:
|
|
38
39
|
allowed_push_host: https://rubygems.org
|
|
39
|
-
source_code_uri: https://github.com/
|
|
40
|
-
post_install_message:
|
|
40
|
+
source_code_uri: https://github.com/vitalii-bakun/coincap
|
|
41
|
+
post_install_message:
|
|
41
42
|
rdoc_options: []
|
|
42
43
|
require_paths:
|
|
43
44
|
- lib
|
|
@@ -45,15 +46,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
45
46
|
requirements:
|
|
46
47
|
- - ">="
|
|
47
48
|
- !ruby/object:Gem::Version
|
|
48
|
-
version: 2.
|
|
49
|
+
version: 2.7.0
|
|
49
50
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
51
|
requirements:
|
|
51
52
|
- - ">="
|
|
52
53
|
- !ruby/object:Gem::Version
|
|
53
54
|
version: '0'
|
|
54
55
|
requirements: []
|
|
55
|
-
rubygems_version: 3.
|
|
56
|
-
signing_key:
|
|
56
|
+
rubygems_version: 3.5.6
|
|
57
|
+
signing_key:
|
|
57
58
|
specification_version: 4
|
|
58
59
|
summary: CoinCap is a useful tool for real-time pricing and market activity for over
|
|
59
60
|
1,000 cryptocurrencies.
|
data/coincap.gemspec
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'lib/coincap/version'
|
|
4
|
-
|
|
5
|
-
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name = 'coincap'
|
|
7
|
-
spec.version = Coincap::VERSION
|
|
8
|
-
spec.authors = ['cosmic-1']
|
|
9
|
-
spec.email = ['crossdoh@gmail.com']
|
|
10
|
-
|
|
11
|
-
spec.summary = 'CoinCap is a useful tool for real-time pricing and market activity for over 1,000 cryptocurrencies.'
|
|
12
|
-
spec.description = 'CoinCap is a useful tool for real-time pricing and market activity for over 1,000 cryptocurrencies.'
|
|
13
|
-
spec.license = 'MIT'
|
|
14
|
-
spec.required_ruby_version = '>= 2.6.0'
|
|
15
|
-
|
|
16
|
-
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
17
|
-
|
|
18
|
-
spec.metadata['source_code_uri'] = 'https://github.com/Cosmic-1/coincap'
|
|
19
|
-
|
|
20
|
-
# Specify which files should be added to the gem when it is released.
|
|
21
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
22
|
-
spec.files = Dir.chdir(__dir__) do
|
|
23
|
-
`git ls-files -z`.split("\x0").reject do |f|
|
|
24
|
-
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
spec.bindir = 'exe'
|
|
28
|
-
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
29
|
-
spec.require_paths = ['lib']
|
|
30
|
-
|
|
31
|
-
# Uncomment to register a new dependency of your gem
|
|
32
|
-
# spec.add_dependency "example-gem", "~> 1.0"
|
|
33
|
-
|
|
34
|
-
# For more information and examples about making a new gem, check out our
|
|
35
|
-
# guide at: https://bundler.io/guides/creating_gem.html
|
|
36
|
-
end
|