bitcoin 0.1.0 → 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.
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