coinmarketcap-wrapper 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee8a33596a410979938953c43cb35519687c57c4
4
- data.tar.gz: 27971c6f560959267e362c294d1e84cd68a5dca9
3
+ metadata.gz: 329ab9a46a9034fc82a8d609d2ba0da467a36ed0
4
+ data.tar.gz: de1b0e32ef0e30b82e5674518d9cb7e370b5127d
5
5
  SHA512:
6
- metadata.gz: 33ad5128666f959cf7464e8446f0c10bc4c2de61f029693dbcde89c9bed5212f15dc506ebed844d89debd650af78c0c3fbed1ccc2086a27b701374e9fb85c4ff
7
- data.tar.gz: 1d4161a3388cda316dcd59c93ba9b18e9214858d4e016015e5ed1b67a2468f95b88c411af78436d300022dbec58e52602368ac11c416f555017401ed5a907204
6
+ metadata.gz: fe199e557a10e1c1e834b8cb68aa2e856d1dd093a819fb8ed8fc260d3cf5b5725a3bcc61f65afbc966d471e6fee0d3dc449c633941e61549bd16fec655e281b5
7
+ data.tar.gz: 6ec816c3041e58f4562c817adb6e1ce4c6c916bbc578512b782905a6d8113cc06399366aac4d89d7d2be5c1e7992d0cdff33e04aed6b684a7cdd6ffdfc21e6cf
data/Gemfile CHANGED
@@ -4,5 +4,3 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in coinmarketcap-wrapper.gemspec
6
6
  gemspec
7
-
8
- gem 'pry'
@@ -0,0 +1,44 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ coinmarketcap-wrapper (0.2.0)
5
+ api_cache (~> 0.3.0)
6
+ json (~> 2.1)
7
+ memcached (~> 1.8)
8
+ moneta (~> 1.0)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ addressable (2.5.2)
14
+ public_suffix (>= 2.0.2, < 4.0)
15
+ api_cache (0.3.0)
16
+ crack (0.4.3)
17
+ safe_yaml (~> 1.0.0)
18
+ hashdiff (0.3.7)
19
+ json (2.1.0)
20
+ memcached (1.8.0)
21
+ minitest (5.10.3)
22
+ moneta (1.0.0)
23
+ public_suffix (3.0.1)
24
+ rake (10.5.0)
25
+ safe_yaml (1.0.4)
26
+ vcr (3.0.3)
27
+ webmock (3.1.1)
28
+ addressable (>= 2.3.6)
29
+ crack (>= 0.3.2)
30
+ hashdiff
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ bundler (~> 1.16)
37
+ coinmarketcap-wrapper!
38
+ minitest (~> 5.0)
39
+ rake (~> 10.0)
40
+ vcr (~> 3.0, >= 3.0.3)
41
+ webmock (~> 3.1, >= 3.1.1)
42
+
43
+ BUNDLED WITH
44
+ 1.16.0
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Coinmarketcap::Wrapper
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/coinmarketcap/wrapper`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Api wrapper for the coinmarketcap platform.
6
4
 
7
5
  ## Installation
8
6
 
@@ -7,8 +7,8 @@ require "coinmarketcap/wrapper"
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- require "pry"
11
- Pry.start
10
+ # require "pry"
11
+ # Pry.start
12
12
 
13
13
  require "irb"
14
14
  IRB.start(__FILE__)
@@ -1,4 +1,3 @@
1
-
2
1
  lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "coinmarketcap/wrapper/version"
@@ -11,7 +10,7 @@ Gem::Specification.new do |spec|
11
10
 
12
11
  spec.summary = %q{API wrapper for coinmarketcap.com}
13
12
  spec.description = %q{Get's ticker data from Coinmarketcap}
14
- # spec.homepage =
13
+ spec.homepage = "https://github.com/cyzanfar/Coinmarketcap-API-wrapper"
15
14
  spec.license = "MIT"
16
15
 
17
16
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -23,7 +22,7 @@ Gem::Specification.new do |spec|
23
22
  # "public gem pushes."
24
23
  # end
25
24
 
26
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
26
  f.match(%r{^(test|spec|features)/})
28
27
  end
29
28
  spec.bindir = "exe"
@@ -36,6 +35,8 @@ Gem::Specification.new do |spec|
36
35
  spec.add_development_dependency "vcr", '~> 3.0', '>= 3.0.3'
37
36
  spec.add_development_dependency "webmock", '~> 3.1', '>= 3.1.1'
38
37
 
39
- spec.add_dependency "faraday", '~> 0.13.1'
40
38
  spec.add_dependency "json", '~> 2.1'
39
+ spec.add_dependency "api_cache", '~> 0.3.0'
40
+ spec.add_dependency "moneta", '~> 1.0'
41
+ spec.add_dependency "memcached", '~> 1.8'
41
42
  end
@@ -2,11 +2,16 @@ require "coinmarketcap/wrapper/version"
2
2
  require "coinmarketcap/wrapper/api_client"
3
3
  require "coinmarketcap/wrapper/coin"
4
4
  require "coinmarketcap/wrapper/market_data"
5
- require 'faraday'
6
5
  require 'json'
6
+ require 'api_cache'
7
+ require "moneta"
8
+ require "memcached"
9
+ # require 'dalli'
7
10
 
8
11
  module Coinmarketcap
9
12
  module Wrapper
10
13
  BASE_API_URL = "https://api.coinmarketcap.com/v1"
14
+
15
+ APICache.store = Moneta.new(:Memcached)
11
16
  end
12
17
  end
@@ -0,0 +1,47 @@
1
+ module Coinmarketcap
2
+ module Wrapper
3
+ class ApiClient
4
+
5
+ def initialize(attributes)
6
+ attributes.each do |attribute, value|
7
+ singleton_class.class_eval { attr_accessor "#{attribute}"}
8
+ send("#{attribute}=", value)
9
+ end
10
+ end
11
+
12
+ class << self
13
+ def clean_data(attributes, **opts)
14
+ attributes.each do |attribute|
15
+ attribute['day_volume_usd'] = attribute.delete '24h_volume_usd'
16
+ if opts[:convert]
17
+ attribute["day_volume_#{opts[:convert].downcase}"] =
18
+ attribute.delete "24h_volume_#{opts[:convert].downcase}" if opts[:convert]
19
+ end
20
+ end
21
+ attributes
22
+ end
23
+
24
+ def fetch_single(id, opts={})
25
+ uri = URI("#{BASE_API_URL}/ticker/#{id}/")
26
+ uri.query = URI.encode_www_form(opts)
27
+ res = Net::HTTP.get_response(uri)
28
+ res.body
29
+ end
30
+
31
+ def fetch_all(opts={}, cache_time=100)
32
+ APICache.get('coinmarketcap_data', :cache => cache_time) do
33
+ uri = URI("#{BASE_API_URL}/ticker/")
34
+ uri.query = URI.encode_www_form(opts)
35
+ res = Net::HTTP.get_response(uri)
36
+ case res
37
+ when Net::HTTPSuccess
38
+ res.body
39
+ else
40
+ raise APICache::InvalidResponse
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,17 @@
1
+ module Coinmarketcap
2
+ module Wrapper
3
+ class Coin < ApiClient
4
+ def self.all(**opts)
5
+ attributes = JSON.parse(fetch_all(opts))
6
+ clean_data(attributes, **opts)
7
+ attributes.map { |attribute| new(attribute)}
8
+ end
9
+
10
+ def self.find(id, **opts)
11
+ attributes = JSON.parse(fetch_single(id, opts))
12
+ clean_data(attributes, **opts)
13
+ new(attributes.first)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module Coinmarketcap
2
+ module Wrapper
3
+ GLOBAL_DATA_PATH = 'global'
4
+ class MarketData < ApiClient
5
+
6
+ def self.global(**opts)
7
+ response = Faraday.get "#{BASE_API_URL}/#{GLOBAL_DATA_PATH}/", opts
8
+ attributes = JSON.parse(response.body)
9
+ new(attributes)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  module Coinmarketcap
2
2
  module Wrapper
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coinmarketcap-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyrus Ghazanfar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-30 00:00:00.000000000 Z
11
+ date: 2017-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -93,33 +93,61 @@ dependencies:
93
93
  - !ruby/object:Gem::Version
94
94
  version: 3.1.1
95
95
  - !ruby/object:Gem::Dependency
96
- name: faraday
96
+ name: json
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: 0.13.1
101
+ version: '2.1'
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: 0.13.1
108
+ version: '2.1'
109
109
  - !ruby/object:Gem::Dependency
110
- name: json
110
+ name: api_cache
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
113
  - - "~>"
114
114
  - !ruby/object:Gem::Version
115
- version: '2.1'
115
+ version: 0.3.0
116
116
  type: :runtime
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
- version: '2.1'
122
+ version: 0.3.0
123
+ - !ruby/object:Gem::Dependency
124
+ name: moneta
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.0'
130
+ type: :runtime
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '1.0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: memcached
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '1.8'
144
+ type: :runtime
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '1.8'
123
151
  description: Get's ticker data from Coinmarketcap
124
152
  email:
125
153
  - cghazanfar10@gmail.com
@@ -131,6 +159,7 @@ files:
131
159
  - ".travis.yml"
132
160
  - CODE_OF_CONDUCT.md
133
161
  - Gemfile
162
+ - Gemfile.lock
134
163
  - LICENSE.txt
135
164
  - README.md
136
165
  - Rakefile
@@ -138,8 +167,11 @@ files:
138
167
  - bin/setup
139
168
  - coinmarketcap-wrapper.gemspec
140
169
  - lib/coinmarketcap/wrapper.rb
170
+ - lib/coinmarketcap/wrapper/api_client.rb
171
+ - lib/coinmarketcap/wrapper/coin.rb
172
+ - lib/coinmarketcap/wrapper/market_data.rb
141
173
  - lib/coinmarketcap/wrapper/version.rb
142
- homepage:
174
+ homepage: https://github.com/cyzanfar/Coinmarketcap-API-wrapper
143
175
  licenses:
144
176
  - MIT
145
177
  metadata: {}