bitcoiner 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b537b4529a94f5eb6743a974cbbf5bf66fc77f71947af5d8b30079d316ed42a
4
- data.tar.gz: c89ce942d0a5fb9072d3656531469b2dbbb018fe30bf3ed69a1d3b9bbc62d5f6
3
+ metadata.gz: ad08d3e5bdd0f0c8efe3e233bf08d0dd3ec4237b68766d0a1b08965cd24aff79
4
+ data.tar.gz: 5f66ea4a949376c7c1075bbd00b7de454cef939cc90961125ccb54bd5f106b7d
5
5
  SHA512:
6
- metadata.gz: 1e14efc063187082d4c0f006d9773bfad5512b4602151351dc6db3c2e8bcf9e502c6ca50c1e19ad2f24835c07d537165246310a139b4fbb64f569abe0670ba0a
7
- data.tar.gz: 0d74484270504eaf800db13ba09abe9fb545062ffc4b03a5895eaf220e3baff73e4e2d72f25e76b861e5b5961feee5a538c244b820d4cdd99455cc5382debad6
6
+ metadata.gz: 288fb5283f7b5d8b2f5c2812578cef7fdf8f368e146e3652bb2e7dc620208d75a83d2056a389ef1865b46d54faa1524352ccfa7c94c58140aa7b22d9b69ec57d
7
+ data.tar.gz: 637cdfc9dd689f257cc4690cb753789cdb807d3a9dd4272ab7b2e79394eac7bf8aa7ae9910ad80fd2d1f07d67cad5fba4a501d8eae7dce51e6dc1d3cbd6d2556
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rake/testtask'
3
5
 
@@ -1,4 +1,6 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'bitcoiner/version'
4
6
 
@@ -17,6 +19,7 @@ Gem::Specification.new do |spec|
17
19
  end
18
20
  spec.require_paths = ['lib']
19
21
 
22
+ spec.add_dependency 'addressable'
20
23
  spec.add_dependency 'typhoeus', '~> 1.3.0'
21
24
 
22
25
  spec.add_development_dependency 'bundler', '~> 1.16'
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bitcoiner/version'
2
4
  require 'typhoeus'
3
5
  require 'json'
6
+ require 'addressable'
4
7
 
5
8
  %w[client account account_hash transaction].each do |f|
6
9
  require File.join(File.dirname(__FILE__), 'bitcoiner', f)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bitcoiner
2
4
  class Account
3
5
  attr_accessor :name
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bitcoiner
2
4
  class AccountHash < Hash
3
5
  def initialize(client, balance_hash)
@@ -1,7 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bitcoiner
2
4
  class Client
3
- def initialize(user, pass, host = '127.0.0.1:8332')
4
- @endpoint = "http://#{user}:#{pass}@#{host}"
5
+ attr_accessor :endpoint
6
+
7
+ def initialize(user, pass, host)
8
+ uri = Addressable::URI.heuristic_parse(host)
9
+ uri.user ||= user
10
+ uri.password ||= pass
11
+ self.endpoint = uri.to_s
5
12
  end
6
13
 
7
14
  def balance
@@ -15,16 +22,29 @@ module Bitcoiner
15
22
 
16
23
  def request(method, *args)
17
24
  post_body = { 'method' => method, 'params' => args, 'id' => 'jsonrpc' }.to_json
18
- response = Typhoeus.post(@endpoint, body: post_body)
19
- response_hash = JSON.parse response.body
25
+ response = Typhoeus.post(endpoint, body: post_body)
26
+ response_hash = parse_body(response)
20
27
  raise JSONRPCError, response_hash['error'] if response_hash['error']
21
28
  response_hash['result']
22
29
  end
23
30
 
24
31
  def inspect
25
- "#<Bitcoiner::Client #{@endpoint.inspect} >"
32
+ "#<Bitcoiner::Client #{endpoint.inspect} >"
26
33
  end
27
34
 
28
35
  class JSONRPCError < RuntimeError; end
36
+
37
+ private
38
+
39
+ def parse_body(response)
40
+ if response.success?
41
+ JSON.parse(response.body)
42
+ else
43
+ error_message = %i[code return_code].map do |attr|
44
+ "#{attr}: `#{response.send(attr)}`"
45
+ end.join(', ')
46
+ raise JSONRPCError, "unsuccessful response; #{error_message}"
47
+ end
48
+ end
29
49
  end
30
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bitcoiner
2
4
  class Transaction
3
5
  attr_accessor :id, :account
@@ -14,7 +16,7 @@ module Bitcoiner
14
16
 
15
17
  def inspect
16
18
  "#<Bitcoiner::Transaction #{id} #{amount} to #{account.name} at #{time}>"
17
- rescue
19
+ rescue StandardError
18
20
  "#<Bitcoiner::Transaction #{id} UNCONFIRMED>"
19
21
  end
20
22
 
@@ -23,7 +25,9 @@ module Bitcoiner
23
25
  end
24
26
 
25
27
  def confirmations
26
- detail_hash['confirmations'] rescue 0
28
+ detail_hash['confirmations']
29
+ rescue StandardError
30
+ 0
27
31
  end
28
32
 
29
33
  def time
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bitcoiner
2
- VERSION = '0.1.1'.freeze
4
+ VERSION = '0.1.2'
3
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitcoiner
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
  - Bryce Kerley
@@ -9,8 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-02-05 00:00:00.000000000 Z
12
+ date: 2018-04-17 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: addressable
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: typhoeus
16
30
  requirement: !ruby/object:Gem::Requirement