bit_wallet 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZGFiM2Y3MGRkNjFjYjY2YzIxZWFhNDc0MzNkODE4ZmM2NjhmMTc2MA==
5
+ data.tar.gz: !binary |-
6
+ MTJjZjFhZjVjNjk3MTVkNGQ2MDQ1MjYzYzRiMjRkNWQzNTZkZDFiMw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZTIxMjJkNzFiYjllYWVmNDMyYThmYzU5NjVjYWE0NWI0M2IyYWJjZmVmZTgw
10
+ YTEzMDY2NzQ2ODgwMDRjODRhNTk5YmNiZDM5MjU2ZDY2MzQ3OWQ0YjZkMDQy
11
+ MWM0MWIzMTAyMDg3MzlkNDdmOWRhYzg4Y2Y0MjYxMzBiZmZmZDA=
12
+ data.tar.gz: !binary |-
13
+ NDE3YTI0YTFhZDM5ZWZjZmE2N2YyMTU3ZGI3N2NkM2RkNTVkZWU3NmE5Yjg1
14
+ MmIwNDg3ZDA3YmQ0OWY3MDMwNTgxYmU3N2NkNGNjZDNjZjg5YzMzYTRkZDcx
15
+ YWY5MzUzNzIwMWRjMTM2ZjBiMGVlZGY5ZGE4ZTQ4ODQ2ZmRiMzY=
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-1.9.3-p286
data/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ # v0.5.0
2
+
3
+ - Allow to set the host, and ssl (true/false) of Bitcoin client
4
+ - Remove version constraint on activesupport
data/Gemfile CHANGED
@@ -2,9 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in bit_wallet.gemspec
4
4
  gemspec
5
-
6
- # Override what gem is included until dcd70a686162fad41e5bd4bddc0ee67565227ec6
7
- # is released in rubygems
8
- gem('bitcoin-client',
9
- git: 'git@github.com:sinisterchipmunk/bitcoin-client.git',
10
- ref: 'dcd70a686162fad41e5bd4bddc0ee67565227ec6')
data/README.md CHANGED
@@ -19,6 +19,8 @@ Or install it yourself as:
19
19
  ## Usage
20
20
 
21
21
  wallet = BitWallet.new(:username => 'username', :password => 'password')
22
+ # You can also pass :port and :host
23
+
22
24
  wallet.accounts.with_balance # returns array of the accounts with balance > 0
23
25
  account = wallet.accounts.new('account name')
24
26
  account.addresses.count # 1, as it already comes with an address
@@ -48,6 +50,10 @@ A transaction has the following methods:
48
50
  - `occurred_at`: Ruby Time object for the `time` value returned by bitcoind
49
51
  - `received_at`: Ruby Time object for the `timereceived` value returned by bitcoind
50
52
 
53
+ ## Tests
54
+
55
+ - You must set up bitcoind, and it must be in the executable path. See README.txt in `spec/testnet` as to what version to install.
56
+
51
57
  ## Contributing
52
58
 
53
59
  1. Fork it
data/bit_wallet.gemspec CHANGED
@@ -18,11 +18,11 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_dependency 'bitcoin-client'
21
- gem.add_dependency 'activesupport', '~> 3.0'
22
- gem.add_development_dependency 'rspec', '2.12.0'
21
+ gem.add_dependency 'activesupport'
22
+ gem.add_development_dependency 'rspec', '~> 2.12'
23
23
  gem.add_development_dependency 'pry'
24
24
  gem.add_development_dependency 'factory_girl', '4.2.0'
25
- gem.add_development_dependency 'bitcoin_testnet', '0.4.0'
26
- gem.add_development_dependency 'vcr', '2.4.0'
25
+ gem.add_development_dependency 'bitcoin_testnet', '0.5.0'
26
+ gem.add_development_dependency 'vcr', '~> 2.4'
27
27
  gem.add_development_dependency 'webmock', '1.9.0'
28
28
  end
@@ -29,8 +29,8 @@ module BitWallet
29
29
  options[:to],
30
30
  amount,
31
31
  BitWallet.config.min_conf)
32
- rescue RestClient::InternalServerError => e
33
- parse_error e.response
32
+ rescue Bitcoin::Errors::RPCError => e
33
+ parse_error e.message
34
34
  end
35
35
 
36
36
  def total_received
@@ -70,16 +70,8 @@ module BitWallet
70
70
 
71
71
  private
72
72
 
73
- def parse_error(response)
74
- json_response = JSON.parse(response)
75
- hash = json_response.with_indifferent_access
76
- error = if hash[:error]
77
- case hash[:error][:code]
78
- when -6
79
- InsufficientFunds.new("cannot send an amount more than what this account (#{self.name}) has")
80
- end
81
- end
82
- fail error if error
73
+ def parse_error(message)
74
+ HandlesError.from(message)
83
75
  end
84
76
 
85
77
  end
@@ -1,4 +1,5 @@
1
1
  module BitWallet
2
2
  class StandardError < ::StandardError; end
3
3
  class InsufficientFunds < StandardError; end
4
+ class InvalidAmount < StandardError; end
4
5
  end
@@ -0,0 +1,16 @@
1
+ module BitWallet
2
+ class HandlesError
3
+
4
+ def self.from(message)
5
+ error = if message.include?("-6")
6
+ InsufficientFunds.new("cannot send an amount more than what this account has")
7
+ elsif message.include?("-3")
8
+ InvalidAmount.new("amount is invalid")
9
+ else
10
+ ArgumentError.new("unknown error: #{message}")
11
+ end
12
+ fail error if error
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ module BitWallet
2
+ class InstantiatesBitcoinClient
3
+
4
+ def self.execute(config)
5
+ Bitcoin::Client.new(config.fetch(:username),
6
+ config.fetch(:password),
7
+ config.slice(:host, :port, :ssl))
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module BitWallet
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -42,9 +42,7 @@ module BitWallet
42
42
  private
43
43
 
44
44
  def client
45
- @client ||= Bitcoin::Client.new(@config[:username],
46
- @config[:password],
47
- @config.slice(:port))
45
+ @client ||= InstantiatesBitcoinClient.execute(@config)
48
46
  end
49
47
 
50
48
  end
data/lib/bit_wallet.rb CHANGED
@@ -3,6 +3,7 @@ require 'ostruct'
3
3
  require 'active_support/core_ext/module/attribute_accessors'
4
4
  require 'active_support/core_ext/module/delegation'
5
5
  require 'active_support/core_ext/hash/indifferent_access'
6
+ require 'active_support/core_ext/hash/slice'
6
7
  require 'active_support/core_ext/string'
7
8
  require 'bitcoin'
8
9
 
@@ -13,6 +14,8 @@ require 'bit_wallet/addresses'
13
14
  require 'bit_wallet/address'
14
15
  require 'bit_wallet/transaction'
15
16
  require 'bit_wallet/errors'
17
+ require 'bit_wallet/instantiates_bitcoin_client'
18
+ require 'bit_wallet/handles_error'
16
19
 
17
20
  module BitWallet
18
21
 
@@ -87,7 +87,7 @@ describe BitWallet::Account, vcr: true do
87
87
  expect {
88
88
  default_account.send_amount(default_account.balance+10,
89
89
  to: nona_address_str)
90
- }.to raise_error(BitWallet::InsufficientFunds, "cannot send an amount more than what this account () has")
90
+ }.to raise_error(BitWallet::InsufficientFunds, "cannot send an amount more than what this account has")
91
91
  end
92
92
  end
93
93
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe BitWallet::Accounts, vcr: true do
3
+ describe BitWallet::Accounts, vcr: {record: :once} do
4
4
 
5
5
  let(:wallet) do
6
6
  build(:wallet)
@@ -39,10 +39,6 @@ describe BitWallet::Accounts, vcr: true do
39
39
  accounts_with_balance.should include(default_account)
40
40
  accounts_with_balance.should_not include(account_1)
41
41
  accounts_with_balance.should include(account_2)
42
-
43
- account_1.send_amount account_1.balance, to: default_account.addresses.first
44
-
45
- subject.with_balance.should_not include(account_1)
46
42
  end
47
43
  end
48
44
 
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ module BitWallet
4
+ describe HandlesError do
5
+ describe ".from" do
6
+ context "error is -3" do
7
+ it "raises InvalidAmount error" do
8
+ expect { described_class.from("does not matter -3 meh") }.
9
+ to raise_error(InvalidAmount, "amount is invalid")
10
+ end
11
+ end
12
+
13
+ context "error is -6" do
14
+ it "raises InsufficientFunds error" do
15
+ expect { described_class.from("-6 message") }.
16
+ to raise_error(InsufficientFunds, "cannot send an amount more than what this account has")
17
+ end
18
+ end
19
+
20
+ context "error is unknown" do
21
+ it "raises an ArgumentError" do
22
+ expect { described_class.from("-99 I do not know") }.
23
+ to raise_error(ArgumentError, "unknown error: -99 I do not know")
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ module BitWallet
4
+ describe InstantiatesBitcoinClient, ".execute" do
5
+
6
+ context "a hash config with username, password, host, port, ssl" do
7
+ it "returns a Bitcoin::Client given a hash config" do
8
+ client = double
9
+
10
+ allow(Bitcoin::Client).to receive(:new).
11
+ with("username", "password", host: "myhost", port: 8288, ssl: false).
12
+ and_return(client)
13
+
14
+ resulting_client = described_class.execute(
15
+ username: "username",
16
+ password: "password",
17
+ host: "myhost",
18
+ port: 8288,
19
+ ssl: false
20
+ )
21
+
22
+ expect(resulting_client).to eq(client)
23
+ end
24
+ end
25
+
26
+ end
27
+ end