waffle_api 0.1.1 → 0.1.2

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: f2b30166123afd1f59e7585120211af5da274c6e
4
- data.tar.gz: 7a3acecf444ba8910aba86c014e9b77cd7fe618f
3
+ metadata.gz: b37de94f955112e583f831d8a16ef579c1afc5ec
4
+ data.tar.gz: e1ae1d9128a4835d55610e2b475c4b64a79911b8
5
5
  SHA512:
6
- metadata.gz: 536e904fbdd7d7d3b53cfd9be00dbcc6dfd525441774711874f9c9d82a07dd6936332cd66fb4ec077ce9880a1e7b37b48e469948c4d0b6e57ca230439a01d018
7
- data.tar.gz: b9cf8fd05960c7b087870c8602f5259e31586419159c4505207765dbd7f714dc40a312e3f0e53739fcfe83cdf8cf891741bbd52102bc1fecb71ab74c75cffafa
6
+ metadata.gz: 15f87d7fe974b901553c758274cdf48dcd5affd67c4214349f3b74d374624a520bed35c09e6d67e4459eb440f2e206215d7d91941bed4c90764ce3fa78cd9559
7
+ data.tar.gz: f15a48e4b2a09c51841cf1099b4c3152e5579cef02de7b8cd50e7bf4d77dfce7de27f70d73f73097fda07c3fff91269f9e52b08e2576ee4154a73b324cc0991d
data/.travis.yml CHANGED
@@ -2,5 +2,4 @@ language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
4
  - 2.0.0
5
- - 2.1.0
6
5
  - 2.1.1
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.png
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
- def self.version(address)
19
- decoded = b58_decode(address, 25)
15
+ B58_CHARS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
16
+ B58_BASE = B58_CHARS.length
20
17
 
21
- version = decoded[0, 1]
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 = decoded[0, decoded.length - 4]
24
-
25
- hashed = (Digest::SHA2.new << (Digest::SHA2.new << vh160).digest).digest
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
- index = 0
33
- result = ""
31
+ result = ''
34
32
 
35
- value.reverse.each_char do |c|
36
- long_value += B58_CHARS.index(c) * (B58_BASE ** index)
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 do
41
- div, mod = long_value.divmod 256
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
@@ -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, https_only: false, ignore_bad_address: false)
19
+ def initialize(address: nil, ignore_bad_address: false)
21
20
  @address = address || ENV['BTC_ADDRESS']
22
21
  @https_only = https_only
23
22
 
@@ -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
@@ -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?
@@ -1,3 +1,4 @@
1
+ # WaffleAPI Version
1
2
  module WaffleAPI
2
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
3
4
  end
data/lib/waffle_api.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # Waffle pool API gem
2
2
  module WaffleAPI
3
+ WAFFLEPOOL_URL = 'http://wafflepool.com'
4
+ WAFFLEPOOL_API_PATH = '/tmp_api'
3
5
  end
4
6
 
5
7
  require 'waffle_api/client'
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe WaffleAPI::Client do
4
4
  describe 'without address' do
5
- it 'raises an WaffleAPI::Error::EmptyAddress' do
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 an WaffleAPI::Error::BadAddress' do
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: '1Ju8U9Ukfc5kiMqzQrRgQBP1JvRkeSv94V'
22
+ WaffleAPI::Client.new address: BTC_ADDRESS
23
23
  end
24
24
 
25
- describe 'asking for a non existing key' do
26
- it 'raises an NoMethodError' do
27
- stub_waffle Wafflepool::Success
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.i_hope_this_key_will_never_exist
31
- end.to raise_error(NoMethodError)
30
+ subject.hashrate
31
+ end.to raise_error(WaffleAPI::Error::AddressNotFound)
32
32
  end
33
33
  end
34
34
 
35
- describe 'asking for an existing key' do
36
- it 'just return it' do
37
- stub_waffle Wafflepool::Success
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
- expect(subject.hashrate).to eq 4_303_407
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
- require 'coveralls'
2
- Coveralls.wear!
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
- URL = 'http://wafflepool.com/tmp_api?address=1Ju8U9Ukfc5kiMqzQrRgQBP1JvRkeSv94V'
13
+ BTC_ADDRESS = '1Ju8U9Ukfc5kiMqzQrRgQBP1JvRkeSv94V'
14
+ URL = "http://wafflepool.com/tmp_api?address=#{BTC_ADDRESS}"
12
15
 
13
- def stub_waffle(response_class)
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 = s.summary
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.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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: Waffle pool API gem
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: []