waffle_api 0.1.1 → 0.1.2
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/.travis.yml +0 -1
- data/README.md +1 -1
- data/lib/waffle_api/address_validator.rb +13 -17
- data/lib/waffle_api/client.rb +1 -2
- data/lib/waffle_api/errors.rb +0 -9
- data/lib/waffle_api/helpers.rb +2 -9
- data/lib/waffle_api/version.rb +2 -1
- data/lib/waffle_api.rb +2 -0
- data/spec/lib/waffle_api/client_spec.rb +34 -12
- data/spec/spec_helper.rb +7 -4
- data/waffle_api.gemspec +6 -6
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b37de94f955112e583f831d8a16ef579c1afc5ec
|
4
|
+
data.tar.gz: e1ae1d9128a4835d55610e2b475c4b64a79911b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15f87d7fe974b901553c758274cdf48dcd5affd67c4214349f3b74d374624a520bed35c09e6d67e4459eb440f2e206215d7d91941bed4c90764ce3fa78cd9559
|
7
|
+
data.tar.gz: f15a48e4b2a09c51841cf1099b4c3152e5579cef02de7b8cd50e7bf4d77dfce7de27f70d73f73097fda07c3fff91269f9e52b08e2576ee4154a73b324cc0991d
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -111,7 +111,7 @@ Released under the MIT License. See the [LICENSE](https://github.com/Calyhre/waf
|
|
111
111
|
|
112
112
|
[travis_img]: https://travis-ci.org/Calyhre/waffle_api.svg?branch=master
|
113
113
|
[travis_url]: https://travis-ci.org/Calyhre/waffle_api
|
114
|
-
[fury_img]: https://badge.fury.io/rb/waffle_api.
|
114
|
+
[fury_img]: https://badge.fury.io/rb/waffle_api.svg
|
115
115
|
[fury_url]: http://badge.fury.io/rb/waffle_api
|
116
116
|
[code_climate_img]: https://codeclimate.com/github/Calyhre/waffle_api.png
|
117
117
|
[code_climate_url]: https://codeclimate.com/github/Calyhre/waffle_api
|
@@ -6,41 +6,37 @@ module WaffleAPI
|
|
6
6
|
module AddressValidator
|
7
7
|
private
|
8
8
|
|
9
|
-
B58_CHARS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
10
|
-
B58_BASE = B58_CHARS.length
|
11
|
-
|
12
9
|
def valid_address?
|
13
10
|
(@address =~ /^[a-zA-Z1-9]{33,35}$/) && DigestUtilities.version(@address)
|
14
11
|
end
|
15
12
|
|
16
13
|
# Utilities are in a class to make them private
|
17
14
|
class DigestUtilities
|
18
|
-
|
19
|
-
|
15
|
+
B58_CHARS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
16
|
+
B58_BASE = B58_CHARS.length
|
20
17
|
|
21
|
-
|
18
|
+
def self.version(address)
|
19
|
+
decoded = b58_decode(address, 25)
|
20
|
+
version = decoded[0, 1]
|
22
21
|
checksum = decoded[-4, decoded.length]
|
23
|
-
vh160
|
24
|
-
|
25
|
-
hashed
|
22
|
+
vh160 = decoded[0, decoded.length - 4]
|
23
|
+
vh160_digest = (Digest::SHA2.new << vh160).digest
|
24
|
+
hashed = (Digest::SHA2.new << vh160_digest).digest
|
26
25
|
|
27
26
|
hashed[0, 4] == checksum ? version[0] : nil
|
28
27
|
end
|
29
28
|
|
30
29
|
def self.b58_decode(value, length)
|
31
30
|
long_value = 0
|
32
|
-
|
33
|
-
result = ""
|
31
|
+
result = ''
|
34
32
|
|
35
|
-
value.reverse.each_char do |c|
|
36
|
-
long_value += B58_CHARS.index(c) * (B58_BASE
|
37
|
-
index += 1
|
33
|
+
value.reverse.each_char.with_index do |c, index|
|
34
|
+
long_value += B58_CHARS.index(c) * (B58_BASE**index)
|
38
35
|
end
|
39
36
|
|
40
|
-
while long_value >= 256
|
41
|
-
|
37
|
+
while long_value >= 256
|
38
|
+
long_value, mod = long_value.divmod 256
|
42
39
|
result = mod.chr + result
|
43
|
-
long_value = div
|
44
40
|
end
|
45
41
|
|
46
42
|
result = long_value.chr + result
|
data/lib/waffle_api/client.rb
CHANGED
@@ -9,7 +9,6 @@ module WaffleAPI
|
|
9
9
|
#
|
10
10
|
# require 'waffle_api'
|
11
11
|
# stats = WaffleAPI::Client.new address: '<BTC_ADDRESS_HERE>'
|
12
|
-
# stats.create()
|
13
12
|
#
|
14
13
|
class Client
|
15
14
|
include WaffleAPI::Helpers
|
@@ -17,7 +16,7 @@ module WaffleAPI
|
|
17
16
|
|
18
17
|
attr_accessor :address, :https_only
|
19
18
|
|
20
|
-
def initialize(address: nil,
|
19
|
+
def initialize(address: nil, ignore_bad_address: false)
|
21
20
|
@address = address || ENV['BTC_ADDRESS']
|
22
21
|
@https_only = https_only
|
23
22
|
|
data/lib/waffle_api/errors.rb
CHANGED
@@ -31,15 +31,6 @@ module WaffleAPI
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
# Error raised when https call Waffle returned a bad call
|
35
|
-
# It meens Waffle isn't supporting https right now.
|
36
|
-
class HttpsNotSupportedYet < Standard
|
37
|
-
def message
|
38
|
-
"Waffle pool isn\'t supporting https yet. Please use WaffleAPI " \
|
39
|
-
"without https_only argument."
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
34
|
# Error raised when Waffle change his API endpoint. Nothing to do but
|
44
35
|
# report an issue on this gem repo
|
45
36
|
class EndPointMoved < Standard
|
data/lib/waffle_api/helpers.rb
CHANGED
@@ -7,15 +7,11 @@ require 'uri'
|
|
7
7
|
module WaffleAPI
|
8
8
|
# List of helpers used in WaffleAPI
|
9
9
|
module Helpers
|
10
|
-
WAFFLE_POOL_HOST = 'wafflepool.com'
|
11
10
|
NOT_FOUND_ERROR = 'Invalid BTC Address!'
|
12
11
|
INVALIDATION_TIME = 30 # Seconds
|
13
12
|
|
14
13
|
def call_uri
|
15
|
-
URI
|
16
|
-
"#{@https_only ? 'https' : 'http'}://#{WAFFLE_POOL_HOST}" \
|
17
|
-
"/tmp_api?address=#{@address}"
|
18
|
-
)
|
14
|
+
URI "#{WAFFLEPOOL_URL}#{WAFFLEPOOL_API_PATH}?address=#{@address}"
|
19
15
|
end
|
20
16
|
|
21
17
|
def request_json
|
@@ -26,10 +22,7 @@ module WaffleAPI
|
|
26
22
|
fail Error::AddressNotFound, @address if json['error'] == NOT_FOUND_ERROR
|
27
23
|
fail Error::UnknownError, json['error'] unless json['error'].empty?
|
28
24
|
json.delete 'error'
|
29
|
-
|
30
|
-
return json
|
31
|
-
rescue OpenSSL::SSL::SSLError
|
32
|
-
raise Error::HttpsNotSupportedYet
|
25
|
+
json
|
33
26
|
end
|
34
27
|
|
35
28
|
def data_recent?
|
data/lib/waffle_api/version.rb
CHANGED
data/lib/waffle_api.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe WaffleAPI::Client do
|
4
4
|
describe 'without address' do
|
5
|
-
it 'raises
|
5
|
+
it 'raises WaffleAPI::Error::EmptyAddress' do
|
6
6
|
expect do
|
7
7
|
WaffleAPI::Client.new
|
8
8
|
end.to raise_error(WaffleAPI::Error::EmptyAddress)
|
@@ -10,7 +10,7 @@ describe WaffleAPI::Client do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
describe 'with a bad address' do
|
13
|
-
it 'raises
|
13
|
+
it 'raises WaffleAPI::Error::BadAddress' do
|
14
14
|
expect do
|
15
15
|
WaffleAPI::Client.new address: 'some_bad_address'
|
16
16
|
end.to raise_error(WaffleAPI::Error::BadAddress)
|
@@ -19,24 +19,46 @@ describe WaffleAPI::Client do
|
|
19
19
|
|
20
20
|
describe 'with a valid address' do
|
21
21
|
subject do
|
22
|
-
WaffleAPI::Client.new address:
|
22
|
+
WaffleAPI::Client.new address: BTC_ADDRESS
|
23
23
|
end
|
24
24
|
|
25
|
-
describe '
|
26
|
-
it 'raises
|
27
|
-
|
25
|
+
describe 'which not exist on waffle' do
|
26
|
+
it 'raises WaffleAPI::Error::AddressNotFound' do
|
27
|
+
stub_waffle_with Wafflepool::AddressNotFound
|
28
28
|
|
29
29
|
expect do
|
30
|
-
subject.
|
31
|
-
end.to raise_error(
|
30
|
+
subject.hashrate
|
31
|
+
end.to raise_error(WaffleAPI::Error::AddressNotFound)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
describe '
|
36
|
-
|
37
|
-
|
35
|
+
describe 'which exist on waffle' do
|
36
|
+
describe 'with a not yet supported error' do
|
37
|
+
it 'raises WaffleAPI::Error::UnknownError' do
|
38
|
+
stub_waffle_with Wafflepool::UnknownError
|
38
39
|
|
39
|
-
|
40
|
+
expect do
|
41
|
+
subject.i_hope_this_key_will_never_exist
|
42
|
+
end.to raise_error(WaffleAPI::Error::UnknownError)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'asking for a non existing key' do
|
47
|
+
it 'raises NoMethodError' do
|
48
|
+
stub_waffle_with Wafflepool::Success
|
49
|
+
|
50
|
+
expect do
|
51
|
+
subject.i_hope_this_key_will_never_exist
|
52
|
+
end.to raise_error(NoMethodError)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'asking for an existing key' do
|
57
|
+
it 'just return it' do
|
58
|
+
stub_waffle_with Wafflepool::Success
|
59
|
+
|
60
|
+
expect(subject.hashrate).to eq 4_303_407
|
61
|
+
end
|
40
62
|
end
|
41
63
|
end
|
42
64
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
if ENV['TRAVIS']
|
2
|
+
require 'coveralls'
|
3
|
+
Coveralls.wear!
|
4
|
+
end
|
3
5
|
|
4
6
|
require 'webmock/rspec'
|
5
7
|
require 'waffle_api'
|
@@ -8,8 +10,9 @@ Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each { |f| require f }
|
|
8
10
|
|
9
11
|
WebMock.disable_net_connect! allow_localhost: true
|
10
12
|
|
11
|
-
|
13
|
+
BTC_ADDRESS = '1Ju8U9Ukfc5kiMqzQrRgQBP1JvRkeSv94V'
|
14
|
+
URL = "http://wafflepool.com/tmp_api?address=#{BTC_ADDRESS}"
|
12
15
|
|
13
|
-
def
|
16
|
+
def stub_waffle_with(response_class)
|
14
17
|
stub_request(:any, URL).to_rack(response_class)
|
15
18
|
end
|
data/waffle_api.gemspec
CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'waffle_api'
|
5
5
|
s.version = WaffleAPI::VERSION
|
6
6
|
s.summary = 'Waffle pool API gem'
|
7
|
-
s.description =
|
7
|
+
s.description = 'Simple gem to make fast and cached calls to Wafflepool API'
|
8
8
|
s.authors = ['Calyhre']
|
9
9
|
s.email = ['contact@calyh.re']
|
10
10
|
s.require_path = 'lib'
|
@@ -16,9 +16,9 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.required_ruby_version = '>= 2.0.0'
|
18
18
|
|
19
|
-
s.add_development_dependency 'rake'
|
20
|
-
s.add_development_dependency 'rspec'
|
21
|
-
s.add_development_dependency 'sinatra'
|
22
|
-
s.add_development_dependency 'webmock'
|
23
|
-
s.add_development_dependency 'coveralls'
|
19
|
+
s.add_development_dependency 'rake', '~> 10.3'
|
20
|
+
s.add_development_dependency 'rspec', '~> 2.14'
|
21
|
+
s.add_development_dependency 'sinatra', '~> 1.4'
|
22
|
+
s.add_development_dependency 'webmock', '~> 1.17'
|
23
|
+
s.add_development_dependency 'coveralls', '~> 0.7'
|
24
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: waffle_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calyhre
|
@@ -14,73 +14,73 @@ dependencies:
|
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '10.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '10.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.14'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.14'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sinatra
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.4'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.4'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: webmock
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.17'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '1.17'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: coveralls
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '0.7'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
description:
|
82
|
+
version: '0.7'
|
83
|
+
description: Simple gem to make fast and cached calls to Wafflepool API
|
84
84
|
email:
|
85
85
|
- contact@calyh.re
|
86
86
|
executables: []
|