bitcoin 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/.rvmrc +1 -1
  2. data/Gemfile.lock +56 -4
  3. data/Guardfile +38 -0
  4. data/README.markdown +21 -2
  5. data/bin/rbcoin +8 -1
  6. data/bitcoin.gemspec +17 -5
  7. data/config/cucumber.yml +3 -3
  8. data/config/darcs.boring +121 -0
  9. data/doc/DEFINITION_OF_DONE.markdown +12 -0
  10. data/doc/HISTORY.markdown +19 -0
  11. data/{LICENCE.markdown → doc/LICENCE.markdown} +1 -1
  12. data/doc/TODO.markdown +31 -0
  13. data/doc/UBIQUITOUS_LANGUAGE.markdown +15 -0
  14. data/features/descriptions/command_help.feature +31 -0
  15. data/features/descriptions/satoshi_wallet/add_address.feature +49 -0
  16. data/features/descriptions/satoshi_wallet/show_addresses.feature +18 -0
  17. data/features/descriptions/satoshi_wallet/show_version.feature +17 -0
  18. data/features/descriptions/satoshi_wallet/subcommand_help.feature +20 -0
  19. data/features/fixtures/ABOUT_FIXTURES.markdown +6 -0
  20. data/features/fixtures/addressbook_wallet.dat +0 -0
  21. data/features/fixtures/new_wallet.dat +0 -0
  22. data/features/step_definitions/command_steps.rb +3 -0
  23. data/features/step_definitions/wallet_steps.rb +11 -0
  24. data/features/support/env.rb +8 -1
  25. data/lib/bitcoin/cli.rb +35 -0
  26. data/lib/bitcoin/commands.rb +3 -0
  27. data/lib/bitcoin/commands/help_command.rb +32 -0
  28. data/lib/bitcoin/commands/satoshi_wallet.rb +11 -0
  29. data/lib/bitcoin/commands/satoshi_wallet/add_address_command.rb +61 -0
  30. data/lib/bitcoin/commands/satoshi_wallet/show_addresses_command.rb +16 -0
  31. data/lib/bitcoin/commands/satoshi_wallet/show_version_command.rb +15 -0
  32. data/lib/bitcoin/commands/satoshi_wallet_command.rb +37 -0
  33. data/lib/bitcoin/commands/satoshi_wallet_command_environment.rb +28 -0
  34. data/lib/bitcoin/console/capturing_stream_bundle.rb +42 -0
  35. data/lib/bitcoin/console/stream_bundle.rb +21 -0
  36. data/lib/bitcoin/data_access/satoshi/bdb_satoshi_wallet_repository.rb +155 -0
  37. data/lib/bitcoin/data_access/satoshi/satoshi_version.rb +58 -0
  38. data/lib/bitcoin/data_access/satoshi/satoshi_wallet.rb +39 -0
  39. data/lib/bitcoin/domain/address_book.rb +19 -0
  40. data/lib/bitcoin/domain/bitcoin_address.rb +33 -0
  41. data/lib/bitcoin/filesystem/empty_temp_dir.rb +74 -0
  42. data/lib/bitcoin/rspec/argument_matchers.rb +1 -0
  43. data/lib/bitcoin/rspec/argument_matchers/block_evaluating_to_matcher.rb +23 -0
  44. data/lib/bitcoin/rspec/directory_helpers.rb +22 -0
  45. data/lib/bitcoin/version.rb +1 -1
  46. data/spec/bitcoin/cli_spec.rb +128 -0
  47. data/spec/bitcoin/commands/help_command_spec.rb +53 -0
  48. data/spec/bitcoin/commands/satoshi_wallet/add_address_command_spec.rb +149 -0
  49. data/spec/bitcoin/commands/satoshi_wallet/show_addresses_command_spec.rb +26 -0
  50. data/spec/bitcoin/commands/satoshi_wallet/show_version_command_spec.rb +26 -0
  51. data/spec/bitcoin/commands/satoshi_wallet_command_environment_spec.rb +76 -0
  52. data/spec/bitcoin/commands/satoshi_wallet_command_spec.rb +73 -0
  53. data/spec/bitcoin/console/_contracts/stream_bundle_contract.rb +29 -0
  54. data/spec/bitcoin/console/capturing_stream_bundle_spec.rb +74 -0
  55. data/spec/bitcoin/console/stream_bundle_spec.rb +13 -0
  56. data/spec/bitcoin/data_access/satoshi/bdb_satoshi_wallet_repository_spec.rb +78 -0
  57. data/spec/bitcoin/data_access/satoshi/satoshi_version_spec.rb +112 -0
  58. data/spec/bitcoin/data_access/satoshi/satoshi_wallet_spec.rb +102 -0
  59. data/spec/bitcoin/domain/address_book_spec.rb +63 -0
  60. data/spec/bitcoin/domain/bitcoin_address_spec.rb +52 -0
  61. data/spec/bitcoin/filesystem/empty_temp_dir_spec.rb +170 -0
  62. data/spec/bitcoin/rspec/argument_matchers/block_evaluating_to_matcher_spec.rb +36 -0
  63. data/spec/spec_helper.rb +29 -1
  64. metadata +221 -18
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ require 'bitcoin/domain/address_book'
4
+
5
+ module Bitcoin
6
+ module Domain
7
+ describe AddressBook do
8
+ context "made with no addresses" do
9
+ subject { AddressBook.new }
10
+ its(:to_a) { should eq [ ] }
11
+ end
12
+
13
+ context "made with addresses" do
14
+ let(:address_hashes) {
15
+ [
16
+ { address: "14Z1mazY4HfysZyMaKudFr63EwHqQT2njz", name: "Bitcoin Monitor" },
17
+ { address: "1Nqr3MqVyUp6k3o3QPePAdn4Yg4tzgB9kw", name: "Bitcoincharts" }
18
+ ]
19
+ }
20
+
21
+ subject {
22
+ AddressBook.new(address_hashes)
23
+ }
24
+
25
+ its(:to_a) {
26
+ should =~ [
27
+ { address: "14Z1mazY4HfysZyMaKudFr63EwHqQT2njz", name: "Bitcoin Monitor" },
28
+ { address: "1Nqr3MqVyUp6k3o3QPePAdn4Yg4tzgB9kw", name: "Bitcoincharts" }
29
+ ]
30
+ }
31
+
32
+ # We're assuming the output comes out in the input order, so this example is
33
+ # overly precise until we know how we'll handle presentation
34
+ its(:to_s) {
35
+ should eq(
36
+ -%{
37
+ 14Z1mazY4HfysZyMaKudFr63EwHqQT2njz Bitcoin Monitor
38
+ 1Nqr3MqVyUp6k3o3QPePAdn4Yg4tzgB9kw Bitcoincharts
39
+ }
40
+ )
41
+ }
42
+
43
+ describe "argument cloning" do
44
+ # Ensure this is created before we try changing the input arguments
45
+ before(:each) { subject }
46
+
47
+ it "does not mutate the args" do
48
+ expect {
49
+ address_hashes.delete_if { true }
50
+ }.to_not change {
51
+ subject.to_a.length
52
+ }.from(2).to(0)
53
+ end
54
+
55
+ it "makes a deep copy" do
56
+ address_hashes.first[:name] = "changed"
57
+ subject.to_a.map { |hash| hash[:name] }.should_not include("changed")
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ require 'bitcoin/domain/bitcoin_address'
4
+
5
+ module Bitcoin
6
+ module Domain
7
+ describe BitcoinAddress do
8
+ context "created with a valid real network address" do
9
+ subject { BitcoinAddress.new("14Z1mazY4HfysZyMaKudFr63EwHqQT2njz") }
10
+
11
+ its(:to_s) { should eq "14Z1mazY4HfysZyMaKudFr63EwHqQT2njz" }
12
+
13
+ describe "#==" do
14
+ it "is equal to another BitcoinAddress with the same address" do
15
+ subject.should eq BitcoinAddress.new("14Z1mazY4HfysZyMaKudFr63EwHqQT2njz")
16
+ end
17
+
18
+ it "is not equal to a BitcoinAddress with a different address" do
19
+ subject.should_not eq BitcoinAddress.new("1Nqr3MqVyUp6k3o3QPePAdn4Yg4tzgB9kw")
20
+ end
21
+
22
+ it "is not equal to a String" do
23
+ subject.should_not eq "14Z1mazY4HfysZyMaKudFr63EwHqQT2njz"
24
+ end
25
+ end
26
+ end
27
+
28
+ context "creating with an invalid address" do
29
+ invalid_addresses = [
30
+ # Not actually sure the reasons here are valid in general but it's just enough to
31
+ # get us going (the point of the exercise is to put an error protocol in place)
32
+ { address: "14Z1mazY4HfysZyMaKudFr63EwHqQT2nj", because: "this is too short" },
33
+ { address: "14Z1mazY4HfysZyMaKudFr63EwHqQT2njzX", because: "this is too long" }
34
+ # Hash doesn't match
35
+ # Wrong version
36
+ # ... etc ...
37
+ # (When we know more about Bitcoin crypto we can come back and finish this off)
38
+ ]
39
+
40
+ invalid_addresses.each do |invalid_address|
41
+ it "raises an error for address #{invalid_address[:address]} because #{invalid_address[:because]}" do
42
+ expect {
43
+ BitcoinAddress.new(invalid_address[:address])
44
+ }.to raise_error(BitcoinAddress::InvalidBitcoinAddressError) { |error|
45
+ error.message.should eq %'The address "#{invalid_address[:address]}" is not a valid Bitcoin address'
46
+ }
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,170 @@
1
+ require 'spec_helper'
2
+
3
+ require 'bitcoin/filesystem/empty_temp_dir'
4
+ require 'bitcoin/rspec/directory_helpers'
5
+
6
+ module Bitcoin
7
+ module FileSystem
8
+ describe EmptyTempDir do
9
+ include Bitcoin::RSpec::DirectoryHelpers
10
+
11
+ TEMP_TEST_DIR = File.join(PROJECT_ROOT, "tmp", "test").freeze
12
+
13
+ ensure_empty_test_dir(TEMP_TEST_DIR)
14
+
15
+ describe ".open" do
16
+ describe "integration" do # refactoring invariant
17
+ it "lets you create a temporary file inside the temporary directory" do
18
+ expected_temp_dir_name = File.join(TEMP_TEST_DIR, "temp_dir")
19
+
20
+ EmptyTempDir.open(with_name: "temp_dir", parallel_to: File.join(TEMP_TEST_DIR, "wallet.dat")) do |temp_dir|
21
+ File.open(File.join(temp_dir.absolute_path, "test_file"), "w") do |file|
22
+ file << "some unimportant contents"
23
+ end
24
+ Dir.entries(temp_dir.absolute_path).should eq %w[ . .. test_file ]
25
+ end
26
+
27
+ File.exist?(expected_temp_dir_name).should be_false
28
+ end
29
+ end
30
+
31
+ describe "interactions" do
32
+ let(:block_runner) { mock(EmptyTempDir::BlockRunner, run: :block_runner_run_value) }
33
+
34
+ before(:each) do
35
+ EmptyTempDir::BlockRunner.stub(new: block_runner)
36
+ end
37
+
38
+ it "raises an error if no block is provided", because: "this would be a pointless thing to do" do
39
+ expect {
40
+ EmptyTempDir.open(with_name: "temp_dir", parallel_to: File.join(TEMP_TEST_DIR, "wallet.dat"))
41
+ }.to raise_error(ArgumentError) { |error|
42
+ error.message.should =~ /you must provide a block to EmptyTempDir\.open/i
43
+ }
44
+ end
45
+
46
+ describe "creating the BlockRunner" do
47
+ it "calculates a directory name parallel to the file" do
48
+ EmptyTempDir::BlockRunner.should_receive(:new).with("/foo/bar/temp_dir")
49
+ EmptyTempDir.open(with_name: "temp_dir", parallel_to: "/foo/bar/baz", & -> { :noop })
50
+ end
51
+
52
+ it "always passed absolute directories" do
53
+ EmptyTempDir::BlockRunner.should_receive(:new).with(File.join(PROJECT_ROOT, "/foo/bar/anything"))
54
+ EmptyTempDir.open(with_name: "anything", parallel_to: "foo/bar/baz", & -> { :noop })
55
+ end
56
+ end
57
+
58
+ it "runs the block" do
59
+ block = -> { :block_value }
60
+ block_runner.should_receive(:run).with(block_evaluating_to(:block_value))
61
+ EmptyTempDir.open(with_name: "anything", parallel_to: "/foo/bar/baz", &block)
62
+ end
63
+
64
+ it "returns the value of the block" do
65
+ EmptyTempDir.open(with_name: "temp_dir", parallel_to: "/foo/bar/baz", & -> { :noop }).should eq :block_runner_run_value
66
+ end
67
+ end
68
+ end
69
+
70
+ describe EmptyTempDir::BlockRunner do
71
+ describe ".new" do
72
+ # Yes, I actually did this to myself.
73
+ describe "raising an error on unsafe paths", because: "otherwise it could format your hard drive!" do
74
+ [ "", "/", "//" ].each do |unacceptable_path|
75
+ it "blocks #{unacceptable_path.inspect}" do
76
+ expect {
77
+ EmptyTempDir::BlockRunner.new(unacceptable_path)
78
+ }.to raise_error(ArgumentError) { |error|
79
+ error.message.should eq "Unacceptable directory name for EmptyTempDir"
80
+ }
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ describe "#run" do
87
+ shared_examples "EmptyTempDir::BlockRunner#run" do
88
+ let(:expected_temp_dir_name) { File.join(TEMP_TEST_DIR, "temp_dir") }
89
+ subject { EmptyTempDir::BlockRunner.new(expected_temp_dir_name) }
90
+
91
+ it "ensures the directory exists" do
92
+ subject.run(
93
+ ->(temp_dir) { File.directory?(expected_temp_dir_name) }
94
+ ).should be_true
95
+ end
96
+
97
+ it "ensures the directory is empty" do
98
+ subject.run(
99
+ ->(temp_dir) { Dir.entries(expected_temp_dir_name) }
100
+ ).should =~ %w[ . .. ]
101
+ end
102
+
103
+ it "removes the directory at the end (even if a file was created inside it)" do
104
+ subject.run(
105
+ ->(temp_dir) {
106
+ File.open(File.join(temp_dir.absolute_path, "test_file"), "w") do |file|
107
+ file << "unimportant contents"
108
+ end
109
+ Dir.entries(temp_dir.absolute_path).should eq %w[ . .. test_file ]
110
+ }
111
+ )
112
+
113
+ File.exist?(expected_temp_dir_name).should be_false
114
+ end
115
+
116
+ it "removes the directory even if the block raises an error" do
117
+ expect {
118
+ subject.run(->(temp_dir) { raise RuntimeError.new("I'm trying to make the temp dir persist!") })
119
+ }.to raise_error
120
+
121
+ File.exist?(expected_temp_dir_name).should be_false
122
+ end
123
+
124
+ it "re-raises any error thrown in the block" do
125
+ expected_error = RuntimeError.new("I'm trying to make the temp dir persist!")
126
+
127
+ expect {
128
+ subject.run(->(temp_dir) { raise expected_error })
129
+ }.to raise_error { |actual_error|
130
+ actual_error.should equal expected_error
131
+ }
132
+ end
133
+
134
+ it "has the expected path name" do
135
+ subject.run(->(temp_dir) { temp_dir.absolute_path.should eq expected_temp_dir_name })
136
+ end
137
+
138
+ it "returns the value of the block", because: "all the examples rely on this" do
139
+ subject.run(->(temp_dir) {
140
+ :block_value
141
+ }).should eq :block_value
142
+ end
143
+ end
144
+
145
+ context "where the target directory does not exist" do
146
+ before(:each) do
147
+ FileUtils.rm_rf(expected_temp_dir_name)
148
+ end
149
+
150
+ it_behaves_like "EmptyTempDir::BlockRunner#run"
151
+ end
152
+
153
+ context "where the target directory exists" do
154
+ before(:each) do
155
+ existing_file_name = File.join(expected_temp_dir_name, "intermediate_dir", "test_file")
156
+
157
+ # Make the target directory and a file inside a nested folder inside it
158
+ FileUtils.mkdir_p(File.dirname(existing_file_name))
159
+ File.open(existing_file_name, "w") do |file|
160
+ file << "some unimportant contents"
161
+ end
162
+ end
163
+
164
+ it_behaves_like "EmptyTempDir::BlockRunner#run"
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ module Bitcoin
4
+ module RSpec
5
+ module ArgumentMatchers
6
+ describe BlockEvaluatingToMatcher do
7
+ include ArgumentMatchers
8
+
9
+ it "describes itself properly" do
10
+ BlockEvaluatingToMatcher.new(:foo).description.should == "block_evaluating_to(:foo)"
11
+ end
12
+
13
+ describe "passing" do
14
+ it "matches a block returning the value" do
15
+ block_evaluating_to("foo").should == -> { "foo" }
16
+ end
17
+
18
+ it "matches non-Proc objects responding to #call", because: "I couldn't think of a reason why not" do
19
+ fake_block = "foo"
20
+ def fake_block.call
21
+ self
22
+ end
23
+
24
+ block_evaluating_to("foo").should == fake_block
25
+ end
26
+ end
27
+
28
+ describe "failing" do
29
+ it "does not match a block returning a different value" do
30
+ block_evaluating_to("foo").should_not == -> { "bar" }
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1 +1,29 @@
1
- Bundler.setup
1
+ PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), "..")).freeze
2
+
3
+ GUARD = ENV["GUARD"]
4
+
5
+ # Gem dependencies
6
+ require 'lstrip-on-steroids'
7
+ require 'fakefs/spec_helpers'
8
+
9
+ # Project dependencies
10
+ require 'bitcoin/rspec/argument_matchers'
11
+
12
+ RSpec.configure do |config|
13
+ config.filter_run(focus: true)
14
+ config.filter_run_excluding(adapter: :slow) if GUARD == "fast"
15
+ config.run_all_when_everything_filtered = true
16
+ config.mock_with(:rspec)
17
+ config.include(Bitcoin::RSpec::ArgumentMatchers)
18
+ end
19
+
20
+ module SpecHelperObjectExtensions
21
+ def contract(name, &block)
22
+ shared_examples_for(name, &block)
23
+ end
24
+ end
25
+ include SpecHelperObjectExtensions
26
+
27
+ RSpec.configure do |config|
28
+ config.alias_it_should_behave_like_to(:it_satisfies_contract, 'satisfies contract:')
29
+ end
metadata CHANGED
@@ -1,19 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitcoin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ash Moran
9
+ - Andy Shipman
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2011-07-21 00:00:00.000000000Z
13
+ date: 2011-08-29 00:00:00.000000000Z
13
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sbdb
17
+ requirement: &70201048457280 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 0.0.12.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70201048457280
26
+ - !ruby/object:Gem::Dependency
27
+ name: lstrip-on-steroids
28
+ requirement: &70201048456780 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *70201048456780
14
37
  - !ruby/object:Gem::Dependency
15
38
  name: rake
16
- requirement: &70357823105820 !ruby/object:Gem::Requirement
39
+ requirement: &70201048488880 !ruby/object:Gem::Requirement
17
40
  none: false
18
41
  requirements:
19
42
  - - ! '>='
@@ -21,10 +44,21 @@ dependencies:
21
44
  version: '0'
22
45
  type: :development
23
46
  prerelease: false
24
- version_requirements: *70357823105820
47
+ version_requirements: *70201048488880
25
48
  - !ruby/object:Gem::Dependency
26
49
  name: cucumber
27
- requirement: &70357823105400 !ruby/object:Gem::Requirement
50
+ requirement: &70201048488420 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *70201048488420
59
+ - !ruby/object:Gem::Dependency
60
+ name: aruba
61
+ requirement: &70201048488000 !ruby/object:Gem::Requirement
28
62
  none: false
29
63
  requirements:
30
64
  - - ! '>='
@@ -32,10 +66,21 @@ dependencies:
32
66
  version: '0'
33
67
  type: :development
34
68
  prerelease: false
35
- version_requirements: *70357823105400
69
+ version_requirements: *70201048488000
36
70
  - !ruby/object:Gem::Dependency
37
71
  name: rspec
38
- requirement: &70357823135940 !ruby/object:Gem::Requirement
72
+ requirement: &70201048487580 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *70201048487580
81
+ - !ruby/object:Gem::Dependency
82
+ name: fuubar
83
+ requirement: &70201048487160 !ruby/object:Gem::Requirement
39
84
  none: false
40
85
  requirements:
41
86
  - - ! '>='
@@ -43,10 +88,32 @@ dependencies:
43
88
  version: '0'
44
89
  type: :development
45
90
  prerelease: false
46
- version_requirements: *70357823135940
91
+ version_requirements: *70201048487160
47
92
  - !ruby/object:Gem::Dependency
48
93
  name: guard
49
- requirement: &70357823135520 !ruby/object:Gem::Requirement
94
+ requirement: &70201048486740 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *70201048486740
103
+ - !ruby/object:Gem::Dependency
104
+ name: guard-rspec
105
+ requirement: &70201048486320 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: *70201048486320
114
+ - !ruby/object:Gem::Dependency
115
+ name: guard-cucumber
116
+ requirement: &70201048485900 !ruby/object:Gem::Requirement
50
117
  none: false
51
118
  requirements:
52
119
  - - ! '>='
@@ -54,10 +121,21 @@ dependencies:
54
121
  version: '0'
55
122
  type: :development
56
123
  prerelease: false
57
- version_requirements: *70357823135520
124
+ version_requirements: *70201048485900
125
+ - !ruby/object:Gem::Dependency
126
+ name: guard-bundler
127
+ requirement: &70201048485480 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: *70201048485480
58
136
  - !ruby/object:Gem::Dependency
59
137
  name: rb-fsevent
60
- requirement: &70357823135100 !ruby/object:Gem::Requirement
138
+ requirement: &70201048485060 !ruby/object:Gem::Requirement
61
139
  none: false
62
140
  requirements:
63
141
  - - ! '>='
@@ -65,10 +143,54 @@ dependencies:
65
143
  version: '0'
66
144
  type: :development
67
145
  prerelease: false
68
- version_requirements: *70357823135100
146
+ version_requirements: *70201048485060
69
147
  - !ruby/object:Gem::Dependency
70
148
  name: growl
71
- requirement: &70357823134680 !ruby/object:Gem::Requirement
149
+ requirement: &70201048484640 !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ type: :development
156
+ prerelease: false
157
+ version_requirements: *70201048484640
158
+ - !ruby/object:Gem::Dependency
159
+ name: fakefs
160
+ requirement: &70201048484220 !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: *70201048484220
169
+ - !ruby/object:Gem::Dependency
170
+ name: awesome_print
171
+ requirement: &70201048483800 !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ! '>='
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: *70201048483800
180
+ - !ruby/object:Gem::Dependency
181
+ name: looksee
182
+ requirement: &70201048483380 !ruby/object:Gem::Requirement
183
+ none: false
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: *70201048483380
191
+ - !ruby/object:Gem::Dependency
192
+ name: growl_notify
193
+ requirement: &70201048482960 !ruby/object:Gem::Requirement
72
194
  none: false
73
195
  requirements:
74
196
  - - ! '>='
@@ -76,10 +198,11 @@ dependencies:
76
198
  version: '0'
77
199
  type: :development
78
200
  prerelease: false
79
- version_requirements: *70357823134680
201
+ version_requirements: *70201048482960
80
202
  description: Bitcoin client
81
203
  email:
82
204
  - ash.moran@patchspace.co.uk
205
+ - andy@cllearview.com
83
206
  executables:
84
207
  - rbcoin
85
208
  extensions: []
@@ -89,18 +212,71 @@ files:
89
212
  - ./.rvmrc
90
213
  - ./Gemfile
91
214
  - ./Gemfile.lock
92
- - ./LICENCE.markdown
215
+ - ./Guardfile
93
216
  - ./README.markdown
94
217
  - ./Rakefile
95
218
  - ./bitcoin.gemspec
96
219
  - ./bin/rbcoin
97
220
  - ./config/cucumber.yml
221
+ - ./config/darcs.boring
222
+ - ./doc/DEFINITION_OF_DONE.markdown
223
+ - ./doc/HISTORY.markdown
224
+ - ./doc/LICENCE.markdown
225
+ - ./doc/TODO.markdown
226
+ - ./doc/UBIQUITOUS_LANGUAGE.markdown
227
+ - ./features/descriptions/command_help.feature
228
+ - ./features/descriptions/satoshi_wallet/add_address.feature
229
+ - ./features/descriptions/satoshi_wallet/show_addresses.feature
230
+ - ./features/descriptions/satoshi_wallet/show_version.feature
231
+ - ./features/descriptions/satoshi_wallet/subcommand_help.feature
232
+ - ./features/fixtures/ABOUT_FIXTURES.markdown
233
+ - ./features/fixtures/addressbook_wallet.dat
234
+ - ./features/fixtures/new_wallet.dat
235
+ - ./features/step_definitions/command_steps.rb
236
+ - ./features/step_definitions/wallet_steps.rb
98
237
  - ./features/support/env.rb
99
238
  - ./lib/bitcoin.rb
239
+ - ./lib/bitcoin/cli.rb
240
+ - ./lib/bitcoin/commands.rb
100
241
  - ./lib/bitcoin/version.rb
242
+ - ./lib/bitcoin/commands/help_command.rb
243
+ - ./lib/bitcoin/commands/satoshi_wallet.rb
244
+ - ./lib/bitcoin/commands/satoshi_wallet_command.rb
245
+ - ./lib/bitcoin/commands/satoshi_wallet_command_environment.rb
246
+ - ./lib/bitcoin/commands/satoshi_wallet/add_address_command.rb
247
+ - ./lib/bitcoin/commands/satoshi_wallet/show_addresses_command.rb
248
+ - ./lib/bitcoin/commands/satoshi_wallet/show_version_command.rb
249
+ - ./lib/bitcoin/console/capturing_stream_bundle.rb
250
+ - ./lib/bitcoin/console/stream_bundle.rb
251
+ - ./lib/bitcoin/data_access/satoshi/bdb_satoshi_wallet_repository.rb
252
+ - ./lib/bitcoin/data_access/satoshi/satoshi_version.rb
253
+ - ./lib/bitcoin/data_access/satoshi/satoshi_wallet.rb
254
+ - ./lib/bitcoin/domain/address_book.rb
255
+ - ./lib/bitcoin/domain/bitcoin_address.rb
256
+ - ./lib/bitcoin/filesystem/empty_temp_dir.rb
257
+ - ./lib/bitcoin/rspec/argument_matchers.rb
258
+ - ./lib/bitcoin/rspec/directory_helpers.rb
259
+ - ./lib/bitcoin/rspec/argument_matchers/block_evaluating_to_matcher.rb
101
260
  - ./spec/spec_helper.rb
261
+ - ./spec/bitcoin/cli_spec.rb
262
+ - ./spec/bitcoin/commands/help_command_spec.rb
263
+ - ./spec/bitcoin/commands/satoshi_wallet_command_environment_spec.rb
264
+ - ./spec/bitcoin/commands/satoshi_wallet_command_spec.rb
265
+ - ./spec/bitcoin/commands/satoshi_wallet/add_address_command_spec.rb
266
+ - ./spec/bitcoin/commands/satoshi_wallet/show_addresses_command_spec.rb
267
+ - ./spec/bitcoin/commands/satoshi_wallet/show_version_command_spec.rb
268
+ - ./spec/bitcoin/console/capturing_stream_bundle_spec.rb
269
+ - ./spec/bitcoin/console/stream_bundle_spec.rb
270
+ - ./spec/bitcoin/console/_contracts/stream_bundle_contract.rb
271
+ - ./spec/bitcoin/data_access/satoshi/bdb_satoshi_wallet_repository_spec.rb
272
+ - ./spec/bitcoin/data_access/satoshi/satoshi_version_spec.rb
273
+ - ./spec/bitcoin/data_access/satoshi/satoshi_wallet_spec.rb
274
+ - ./spec/bitcoin/domain/address_book_spec.rb
275
+ - ./spec/bitcoin/domain/bitcoin_address_spec.rb
276
+ - ./spec/bitcoin/filesystem/empty_temp_dir_spec.rb
277
+ - ./spec/bitcoin/rspec/argument_matchers/block_evaluating_to_matcher_spec.rb
102
278
  - bin/rbcoin
103
- homepage: http://bitcoinrb.info/
279
+ homepage: http://rbcoin.org/
104
280
  licenses: []
105
281
  post_install_message:
106
282
  rdoc_options: []
@@ -120,10 +296,37 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
296
  version: '0'
121
297
  requirements: []
122
298
  rubyforge_project:
123
- rubygems_version: 1.8.5
299
+ rubygems_version: 1.8.9
124
300
  signing_key:
125
301
  specification_version: 3
126
- summary: kwoon-0.1.0
302
+ summary: bitcoin-0.1.2
127
303
  test_files:
304
+ - ./features/descriptions/command_help.feature
305
+ - ./features/descriptions/satoshi_wallet/add_address.feature
306
+ - ./features/descriptions/satoshi_wallet/show_addresses.feature
307
+ - ./features/descriptions/satoshi_wallet/show_version.feature
308
+ - ./features/descriptions/satoshi_wallet/subcommand_help.feature
309
+ - ./features/fixtures/ABOUT_FIXTURES.markdown
310
+ - ./features/fixtures/addressbook_wallet.dat
311
+ - ./features/fixtures/new_wallet.dat
312
+ - ./features/step_definitions/command_steps.rb
313
+ - ./features/step_definitions/wallet_steps.rb
128
314
  - ./features/support/env.rb
129
315
  - ./spec/spec_helper.rb
316
+ - ./spec/bitcoin/cli_spec.rb
317
+ - ./spec/bitcoin/commands/help_command_spec.rb
318
+ - ./spec/bitcoin/commands/satoshi_wallet_command_environment_spec.rb
319
+ - ./spec/bitcoin/commands/satoshi_wallet_command_spec.rb
320
+ - ./spec/bitcoin/commands/satoshi_wallet/add_address_command_spec.rb
321
+ - ./spec/bitcoin/commands/satoshi_wallet/show_addresses_command_spec.rb
322
+ - ./spec/bitcoin/commands/satoshi_wallet/show_version_command_spec.rb
323
+ - ./spec/bitcoin/console/capturing_stream_bundle_spec.rb
324
+ - ./spec/bitcoin/console/stream_bundle_spec.rb
325
+ - ./spec/bitcoin/console/_contracts/stream_bundle_contract.rb
326
+ - ./spec/bitcoin/data_access/satoshi/bdb_satoshi_wallet_repository_spec.rb
327
+ - ./spec/bitcoin/data_access/satoshi/satoshi_version_spec.rb
328
+ - ./spec/bitcoin/data_access/satoshi/satoshi_wallet_spec.rb
329
+ - ./spec/bitcoin/domain/address_book_spec.rb
330
+ - ./spec/bitcoin/domain/bitcoin_address_spec.rb
331
+ - ./spec/bitcoin/filesystem/empty_temp_dir_spec.rb
332
+ - ./spec/bitcoin/rspec/argument_matchers/block_evaluating_to_matcher_spec.rb