cep_coinbase 0.1.1
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 +7 -0
- data/lib/cep_coinbase.rb +148 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 33775fab3ace2c2f5933d9764e2a46f088d7d145953b26c0fb4158f0092bc78b
|
4
|
+
data.tar.gz: fdb6f5cbac64d9cdd69d501b25ea89bbe988b841bdc21c00eee8ffe3e3c394ce
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bf57bfb60440037d228234f8f1a99135fae4691b4edda4c7d85d2e0cc0dbbca7eadca900fec6a2e8628805499a4a4105f1edae4146cb8cdb5abf6ad1f8129d37
|
7
|
+
data.tar.gz: 7103aef4f915d1a437ee034f41cbffb52fb89d40a7d14405bfce3a5faedc7dafb47f8c3f2727ec6bb2db933b74c2cccc173d859bad3b9c4de6b605c0ba3e9cb1
|
data/lib/cep_coinbase.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
# get, parse and show exchanges from coinbase.com
|
2
|
+
# CoinExchangeParser
|
3
|
+
class CEP_COINBASE
|
4
|
+
require 'json'
|
5
|
+
require 'ostruct'
|
6
|
+
require 'net/http'
|
7
|
+
|
8
|
+
attr_reader :exchanges, :currency_type
|
9
|
+
|
10
|
+
BASE_LINK = 'https://api.coinbase.com/v2/exchange-rates?currency=#CURRENCY#'.freeze
|
11
|
+
|
12
|
+
# XXX: this part can be added to the manual. But not now :)
|
13
|
+
# default value hash.
|
14
|
+
# TRY will be change to lira
|
15
|
+
VAR_NAMES = { 'TRY' => 'lira'}.freeze
|
16
|
+
|
17
|
+
# default coin currency type
|
18
|
+
CURRENCY_TYPE = 'ETH'.freeze
|
19
|
+
# default coinbase.com result json hierarchy
|
20
|
+
Hierarcy = ['data', 'rates'].freeze
|
21
|
+
# default cache folder
|
22
|
+
CacheFolder = 'logs/'.freeze
|
23
|
+
|
24
|
+
def initialize(
|
25
|
+
base_link: BASE_LINK,
|
26
|
+
vars: VAR_NAMES,
|
27
|
+
currency_type: CURRENCY_TYPE,
|
28
|
+
write_cache: true,
|
29
|
+
hierarcy: Hierarcy,
|
30
|
+
cache_file: nil,
|
31
|
+
cache_folder: CacheFolder
|
32
|
+
)
|
33
|
+
@currency_type= currency_type
|
34
|
+
@base_link = base_link
|
35
|
+
|
36
|
+
make_new_link
|
37
|
+
|
38
|
+
@var_names = vars
|
39
|
+
@write_status = write_cache
|
40
|
+
@hierarcy = hierarcy
|
41
|
+
@cache_file = cache_file
|
42
|
+
@cache_folder = cache_folder
|
43
|
+
@exchanges = {}
|
44
|
+
end
|
45
|
+
|
46
|
+
# get exchanges or read the cache file
|
47
|
+
def fetch
|
48
|
+
set_cache_file
|
49
|
+
body
|
50
|
+
end
|
51
|
+
|
52
|
+
# TODO: Write function more manageable
|
53
|
+
# parse data to object
|
54
|
+
def process
|
55
|
+
data = parse_exchanges
|
56
|
+
data = get_pure_data data
|
57
|
+
|
58
|
+
# make hash for currency array
|
59
|
+
data.each do |n, v|
|
60
|
+
v_f = v.to_f
|
61
|
+
@exchanges[n] = v_f if set_ins(n, v_f)
|
62
|
+
end
|
63
|
+
rescue
|
64
|
+
throw 'Initialization problem!'
|
65
|
+
end
|
66
|
+
|
67
|
+
# rename objects
|
68
|
+
# this function overwrite default exchange values
|
69
|
+
# with
|
70
|
+
def rename_param
|
71
|
+
@var_names.each do |old, new|
|
72
|
+
@body.gsub!(old, new)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# write @body to cache file
|
77
|
+
def cache
|
78
|
+
# if must write to cache
|
79
|
+
return false unless @write_status || @body
|
80
|
+
|
81
|
+
# if cache file exists ignore caching
|
82
|
+
return true if File.exists? @cache_file
|
83
|
+
|
84
|
+
File.open(@cache_folder + @cache_file, 'w') do |cache|
|
85
|
+
cache.write @body
|
86
|
+
end
|
87
|
+
rescue
|
88
|
+
throw 'caching problem(s) occurs!'
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def make_new_link
|
94
|
+
@link = @base_link.gsub('#CURRENCY#',
|
95
|
+
@currency_type)
|
96
|
+
end
|
97
|
+
|
98
|
+
# name like 'name' and value is an object
|
99
|
+
# set attr_reader for name
|
100
|
+
# and add obj to variable
|
101
|
+
def set_ins(name, obj)
|
102
|
+
name = name.dup.downcase
|
103
|
+
self.class.__send__(:attr_reader, name)
|
104
|
+
instance_variable_set('@' + name, obj)
|
105
|
+
rescue
|
106
|
+
return false
|
107
|
+
end
|
108
|
+
|
109
|
+
def get_pure_data(data)
|
110
|
+
# go into hash
|
111
|
+
@hierarcy.each { |str| data = data[str] }
|
112
|
+
return data
|
113
|
+
rescue
|
114
|
+
throw 'unknowing exchange type'
|
115
|
+
end
|
116
|
+
|
117
|
+
# convert @body to hash
|
118
|
+
def parse_exchanges
|
119
|
+
@data_content = JSON.parse(@body)
|
120
|
+
rescue
|
121
|
+
throw 'JSON parse error!'
|
122
|
+
end
|
123
|
+
|
124
|
+
# get @body from url link
|
125
|
+
def link
|
126
|
+
Net::HTTP.get(URI.parse(@link))
|
127
|
+
end
|
128
|
+
|
129
|
+
# get @body from file
|
130
|
+
def file
|
131
|
+
File.read @cache_file
|
132
|
+
end
|
133
|
+
|
134
|
+
# if cache_file name not exits
|
135
|
+
# remake name
|
136
|
+
def set_cache_file
|
137
|
+
return @cache_file if @cache_file
|
138
|
+
|
139
|
+
# TODO: make cache file format changable
|
140
|
+
time = Time.new.strftime '%y.%m.%d_%H'
|
141
|
+
@cache_file = "#{@currency_type}_#{time}.data"
|
142
|
+
end
|
143
|
+
|
144
|
+
# select body source and get
|
145
|
+
def body
|
146
|
+
@body = File.exist?(@cache_file) ? file : link
|
147
|
+
end
|
148
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cep_coinbase
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- tayak
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-08-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: net-http
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ostruct
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.5.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.5.1
|
55
|
+
description: Coin Exchange Parser(CEP) is a functional exchange calculation class
|
56
|
+
which converts received json data from coinbase.com and uses it as a class method.
|
57
|
+
email: yasir.kiroglu@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- lib/cep_coinbase.rb
|
63
|
+
homepage: https://github.com/taiak/cep
|
64
|
+
licenses:
|
65
|
+
- Apache-2.0
|
66
|
+
metadata: {}
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubygems_version: 3.2.29
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: Coin Exchange Parser which use coinbase.com values
|
86
|
+
test_files: []
|