bitcoin_active_record 0.0.2 → 0.1.0
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +16 -16
- data/bitcoin_active_record.gemspec +1 -1
- data/lib/bitcoin_active_record/client.rb +11 -11
- data/lib/bitcoin_active_record/models/bitcoin_transaction.rb +18 -0
- data/lib/bitcoin_active_record/models/btc_address.rb +2 -2
- data/lib/bitcoin_active_record/models/received_bitcoin_transaction.rb +11 -0
- data/lib/bitcoin_active_record/models/sent_bitcoin_transaction.rb +10 -0
- data/lib/generators/templates/create_bitcoin_active_record_models.rb +10 -10
- data/lib/generators/templates/models/bitcoin_transaction.rb +3 -0
- data/lib/generators/templates/models/received_bitcoin_transaction.rb +3 -0
- data/lib/generators/templates/models/sent_bitcoin_transaction.rb +3 -0
- data/test/Gemfile.lock +1 -1
- data/test/app/models/bitcoin_transaction.rb +3 -0
- data/test/app/models/received_bitcoin_transaction.rb +3 -0
- data/test/app/models/sent_bitcoin_transaction.rb +3 -0
- data/test/db/migrate/20150429175618_create_bitcoin_active_record_models.rb +32 -0
- data/test/db/schema.rb +18 -18
- data/test/test/integration/bitcoin_payments/client_test.rb +19 -19
- data/test/test/integration/bitcoin_payments/generators_test.rb +2 -2
- metadata +16 -20
- data/lib/bitcoin_active_record/models/payment.rb +0 -18
- data/lib/bitcoin_active_record/models/received_payment.rb +0 -11
- data/lib/bitcoin_active_record/models/sent_payment.rb +0 -10
- data/lib/generators/templates/models/payment.rb +0 -3
- data/lib/generators/templates/models/received_payment.rb +0 -3
- data/lib/generators/templates/models/sent_payment.rb +0 -3
- data/test/app/models/.keep +0 -0
- data/test/app/models/concerns/.keep +0 -0
- data/test/app/models/payment.rb +0 -3
- data/test/app/models/received_payment.rb +0 -3
- data/test/app/models/sent_payment.rb +0 -3
- data/test/db/migrate/20150425185338_create_bitcoin_active_record_models.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 209f93b703bd8f1e18fb444af7cf2946fe0cca2b
|
4
|
+
data.tar.gz: 28fae90950ef7feba274d8694c70828d4175e2a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0594a50dd7ed631e2e48bd9d909331e5c7dc18e8039821031820f9d78869db8935dbcab919755eb5792f3d2cf99ef93f481492b135c5e26a1e825b7ab6c0f0a
|
7
|
+
data.tar.gz: dd1b31153534e7f1e53ea9e459101de9ed2600f231f9c426c154f9ef0bc07a87c19fb84603022cf31c7a389dfc46f281f6b7b37223b0ea1e14c9f7600afe9007
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -25,8 +25,8 @@ client = BitcoinActiveRecord::Client.new(
|
|
25
25
|
},
|
26
26
|
)
|
27
27
|
```
|
28
|
-
* Run client.
|
29
|
-
* Run client.pay(public_key: public_key, amount: BigDecimal.new(1), comment: 'hello') to send a
|
28
|
+
* Run client.create_received_bitcoin_transactions to create records of received transactions
|
29
|
+
* Run client.pay(public_key: public_key, amount: BigDecimal.new(1), comment: 'hello') to send a transaction and save a record of it in the database
|
30
30
|
|
31
31
|
## Usage
|
32
32
|
|
@@ -38,7 +38,7 @@ column_name | type | description
|
|
38
38
|
--- | --- | ---
|
39
39
|
public_key | string | public key of a bitcoin address
|
40
40
|
|
41
|
-
|
41
|
+
bitcoin_transaction.rb
|
42
42
|
|
43
43
|
column_name | type | description
|
44
44
|
--- | --- | ---
|
@@ -46,20 +46,20 @@ btc_address_id | integer | foreign key
|
|
46
46
|
amount | decimal | transaction amount
|
47
47
|
txid | string | bitcoin transaction id
|
48
48
|
|
49
|
-
|
49
|
+
received_bitcoin_transaction.rb
|
50
50
|
|
51
51
|
column_name | type | description
|
52
52
|
--- | --- | ---
|
53
|
-
|
54
|
-
btc_address_id | integer | This is the address in your wallet that the
|
53
|
+
bitcoin_transaction_id | integer | The btc address associated with this bitcoin transaction id is the address of the person who sent the transaction
|
54
|
+
btc_address_id | integer | This is the address in your wallet that the transaction was sent to
|
55
55
|
|
56
|
-
|
56
|
+
sent_bitcoin_transaction.rb
|
57
57
|
|
58
58
|
column_name | type | description
|
59
59
|
--- | --- | ---
|
60
|
-
|
60
|
+
bitcoin_transaction_id | integer | foreign key
|
61
61
|
|
62
|
-
Sent
|
62
|
+
Sent transactions are only recorded if you send them using the gem's api.
|
63
63
|
|
64
64
|
### BitcoinActiveRecord::Client
|
65
65
|
|
@@ -73,7 +73,7 @@ client = BitcoinActiveRecord::Client.new(
|
|
73
73
|
username: '',
|
74
74
|
password: '',
|
75
75
|
},
|
76
|
-
# optional, amounts less than this will be ignored when running
|
76
|
+
# optional, amounts less than this will be ignored when running create_received_bitcoin_transactions
|
77
77
|
minimum_amount: BigDecimal.new('0.001'),
|
78
78
|
# optional, the wallet account you want to look for received transactions in
|
79
79
|
account: :foo,
|
@@ -99,7 +99,7 @@ Get the public key of the transaction sender for a transaction with id txid
|
|
99
99
|
|
100
100
|
* client.pay
|
101
101
|
|
102
|
-
Pay someone and save a record of it as a
|
102
|
+
Pay someone and save a record of it as a SentBitcoinTransaction
|
103
103
|
|
104
104
|
```ruby
|
105
105
|
client.pay(
|
@@ -109,13 +109,13 @@ client.pay(
|
|
109
109
|
amount: BigDecimal.new('1.23'),
|
110
110
|
# optional, transaction comment
|
111
111
|
comment: 'foo',
|
112
|
-
) do |
|
112
|
+
) do |sent_bitcoin_transaction|
|
113
113
|
# adding a block is optional
|
114
|
-
# modify the
|
115
|
-
|
114
|
+
# modify the sent_bitcoin_transaction record before it gets saved
|
115
|
+
sent_bitcoin_transaction.custom_attribute = 'foo'
|
116
116
|
end
|
117
117
|
```
|
118
118
|
|
119
|
-
* client.
|
119
|
+
* client.create_received_bitcoin_transactions
|
120
120
|
|
121
|
-
Create a
|
121
|
+
Create a ReceivedBitcoinTransaction model for every transaction from client.account that's >= client.minimum_amount. If the latest transaction is already in the database it will assume all earlier transactions have already been saved.
|
@@ -57,21 +57,21 @@ module BitcoinActiveRecord
|
|
57
57
|
def pay(public_key: raise('public key required'), amount: raise('amount required'), comment: '')
|
58
58
|
raise('amount cant be zero or negative') unless amount > 0
|
59
59
|
|
60
|
-
|
61
|
-
|
60
|
+
sent_bitcoin_transaction = SentBitcoinTransaction.new(
|
61
|
+
bitcoin_transaction: BitcoinTransaction.new(
|
62
62
|
btc_address: BtcAddress.find_or_initialize_by(public_key: public_key),
|
63
63
|
amount: amount,
|
64
64
|
txid: request(:sendtoaddress, public_key, amount, comment),
|
65
65
|
),
|
66
66
|
)
|
67
|
-
yield(
|
67
|
+
yield(sent_bitcoin_transaction) if block_given?
|
68
68
|
|
69
|
-
|
69
|
+
sent_bitcoin_transaction.save!
|
70
70
|
|
71
|
-
|
71
|
+
sent_bitcoin_transaction
|
72
72
|
end
|
73
73
|
|
74
|
-
def
|
74
|
+
def create_received_bitcoin_transactions
|
75
75
|
page = 0
|
76
76
|
|
77
77
|
while true
|
@@ -80,14 +80,14 @@ module BitcoinActiveRecord
|
|
80
80
|
|
81
81
|
transactions.each do |transaction|
|
82
82
|
txid = transaction['txid']
|
83
|
-
# already created
|
84
|
-
return if
|
83
|
+
# already created record for this transaction and all older ones
|
84
|
+
return if BitcoinTransaction.where(txid: txid).count > 0
|
85
85
|
|
86
86
|
amount = transaction['amount']
|
87
87
|
from_key = get_sender_address(txid)
|
88
88
|
|
89
|
-
|
90
|
-
|
89
|
+
received_bitcoin_transaction = ReceivedBitcoinTransaction.create!(
|
90
|
+
bitcoin_transaction: BitcoinTransaction.new(
|
91
91
|
# payment from this address
|
92
92
|
btc_address: BtcAddress.find_or_initialize_by(
|
93
93
|
public_key: from_key
|
@@ -99,7 +99,7 @@ module BitcoinActiveRecord
|
|
99
99
|
btc_address: BtcAddress.find_or_initialize_by(public_key: transaction['address']),
|
100
100
|
)
|
101
101
|
|
102
|
-
puts("Received
|
102
|
+
puts("Received transaction #{amount} BTC from #{from_key}: #{received_bitcoin_transaction.inspect}")
|
103
103
|
end
|
104
104
|
|
105
105
|
page += 1
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module BitcoinActiveRecord::Models::BitcoinTransaction
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
# sender's address for received transactions
|
6
|
+
# payee address for sent transactions
|
7
|
+
belongs_to(:btc_address, inverse_of: :bitcoin_transactions)
|
8
|
+
|
9
|
+
has_one(:received_bitcoin_transaction, inverse_of: :bitcoin_transaction)
|
10
|
+
has_one(:sent_bitcoin_transaction, inverse_of: :bitcoin_transaction)
|
11
|
+
|
12
|
+
validates(:txid, :btc_address, :amount, presence: true)
|
13
|
+
validates(:amount, numericality: { greater_than_or_equal_to: 0 })
|
14
|
+
validates(:txid, uniqueness: true)
|
15
|
+
|
16
|
+
auto_strip_attributes(:txid)
|
17
|
+
end
|
18
|
+
end
|
@@ -2,8 +2,8 @@ module BitcoinActiveRecord::Models::BtcAddress
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
|
-
has_many(:
|
6
|
-
has_many(:
|
5
|
+
has_many(:bitcoin_transactions, inverse_of: :btc_address)
|
6
|
+
has_many(:received_bitcoin_transactions, inverse_of: :btc_address)
|
7
7
|
|
8
8
|
validates(:public_key, presence: true, uniqueness: { case_sensitive: true })
|
9
9
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module BitcoinActiveRecord::Models::ReceivedBitcoinTransaction
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
belongs_to(:bitcoin_transaction, inverse_of: :received_bitcoin_transaction, dependent: :destroy)
|
6
|
+
belongs_to(:btc_address, inverse_of: :received_bitcoin_transactions) # payment to this address
|
7
|
+
|
8
|
+
validates(:bitcoin_transaction, presence: true)
|
9
|
+
validates(:bitcoin_transaction_id, uniqueness: true)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module BitcoinActiveRecord::Models::SentBitcoinTransaction
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
belongs_to(:bitcoin_transaction, inverse_of: :sent_bitcoin_transaction, dependent: :destroy)
|
6
|
+
|
7
|
+
validates(:bitcoin_transaction, presence: true)
|
8
|
+
validates(:bitcoin_transaction_id, uniqueness: true)
|
9
|
+
end
|
10
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
class CreateBitcoinActiveRecordModels < ActiveRecord::Migration
|
2
2
|
def change
|
3
|
-
create_table "
|
3
|
+
create_table "bitcoin_transactions" do |t|
|
4
4
|
t.integer "btc_address_id", null: false
|
5
5
|
t.decimal "amount", null: false
|
6
6
|
t.string "txid", null: false
|
7
7
|
t.timestamps
|
8
8
|
end
|
9
|
-
add_index "
|
10
|
-
add_index "
|
9
|
+
add_index "bitcoin_transactions", ["btc_address_id"]
|
10
|
+
add_index "bitcoin_transactions", ["txid"], unique: true
|
11
11
|
|
12
12
|
create_table "btc_addresses" do |t|
|
13
13
|
t.string "public_key", null: false
|
@@ -15,18 +15,18 @@ class CreateBitcoinActiveRecordModels < ActiveRecord::Migration
|
|
15
15
|
end
|
16
16
|
add_index "btc_addresses", ["public_key"], unique: true
|
17
17
|
|
18
|
-
create_table "
|
19
|
-
t.integer "
|
18
|
+
create_table "received_bitcoin_transactions" do |t|
|
19
|
+
t.integer "bitcoin_transaction_id", null: false
|
20
20
|
t.integer "btc_address_id", null: false
|
21
21
|
t.timestamps
|
22
22
|
end
|
23
|
-
add_index
|
24
|
-
add_index :
|
23
|
+
add_index :received_bitcoin_transactions, :bitcoin_transaction_id, unique: true
|
24
|
+
add_index :received_bitcoin_transactions, :btc_address_id
|
25
25
|
|
26
|
-
create_table "
|
27
|
-
t.integer "
|
26
|
+
create_table "sent_bitcoin_transactions" do |t|
|
27
|
+
t.integer "bitcoin_transaction_id", null: false
|
28
28
|
t.timestamps
|
29
29
|
end
|
30
|
-
add_index "
|
30
|
+
add_index "sent_bitcoin_transactions", ["bitcoin_transaction_id"], unique: true
|
31
31
|
end
|
32
32
|
end
|
data/test/Gemfile.lock
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
class CreateBitcoinActiveRecordModels < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table "bitcoin_transactions" do |t|
|
4
|
+
t.integer "btc_address_id", null: false
|
5
|
+
t.decimal "amount", null: false
|
6
|
+
t.string "txid", null: false
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index "bitcoin_transactions", ["btc_address_id"]
|
10
|
+
add_index "bitcoin_transactions", ["txid"], unique: true
|
11
|
+
|
12
|
+
create_table "btc_addresses" do |t|
|
13
|
+
t.string "public_key", null: false
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
add_index "btc_addresses", ["public_key"], unique: true
|
17
|
+
|
18
|
+
create_table "received_bitcoin_transactions" do |t|
|
19
|
+
t.integer "bitcoin_transaction_id", null: false
|
20
|
+
t.integer "btc_address_id", null: false
|
21
|
+
t.timestamps
|
22
|
+
end
|
23
|
+
add_index :received_bitcoin_transactions, :bitcoin_transaction_id, unique: true
|
24
|
+
add_index :received_bitcoin_transactions, :btc_address_id
|
25
|
+
|
26
|
+
create_table "sent_bitcoin_transactions" do |t|
|
27
|
+
t.integer "bitcoin_transaction_id", null: false
|
28
|
+
t.timestamps
|
29
|
+
end
|
30
|
+
add_index "sent_bitcoin_transactions", ["bitcoin_transaction_id"], unique: true
|
31
|
+
end
|
32
|
+
end
|
data/test/db/schema.rb
CHANGED
@@ -11,43 +11,43 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended that you check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(version:
|
14
|
+
ActiveRecord::Schema.define(version: 20150429175618) do
|
15
15
|
|
16
|
-
create_table "
|
17
|
-
t.
|
16
|
+
create_table "bitcoin_transactions", force: :cascade do |t|
|
17
|
+
t.integer "btc_address_id", null: false
|
18
|
+
t.decimal "amount", null: false
|
19
|
+
t.string "txid", null: false
|
18
20
|
t.datetime "created_at"
|
19
21
|
t.datetime "updated_at"
|
20
22
|
end
|
21
23
|
|
22
|
-
add_index "
|
24
|
+
add_index "bitcoin_transactions", ["btc_address_id"], name: "index_bitcoin_transactions_on_btc_address_id"
|
25
|
+
add_index "bitcoin_transactions", ["txid"], name: "index_bitcoin_transactions_on_txid", unique: true
|
23
26
|
|
24
|
-
create_table "
|
25
|
-
t.
|
26
|
-
t.decimal "amount", null: false
|
27
|
-
t.string "txid", null: false
|
27
|
+
create_table "btc_addresses", force: :cascade do |t|
|
28
|
+
t.string "public_key", null: false
|
28
29
|
t.datetime "created_at"
|
29
30
|
t.datetime "updated_at"
|
30
31
|
end
|
31
32
|
|
32
|
-
add_index "
|
33
|
-
add_index "payments", ["txid"], name: "index_payments_on_txid", unique: true
|
33
|
+
add_index "btc_addresses", ["public_key"], name: "index_btc_addresses_on_public_key", unique: true
|
34
34
|
|
35
|
-
create_table "
|
36
|
-
t.integer "
|
37
|
-
t.integer "btc_address_id",
|
35
|
+
create_table "received_bitcoin_transactions", force: :cascade do |t|
|
36
|
+
t.integer "bitcoin_transaction_id", null: false
|
37
|
+
t.integer "btc_address_id", null: false
|
38
38
|
t.datetime "created_at"
|
39
39
|
t.datetime "updated_at"
|
40
40
|
end
|
41
41
|
|
42
|
-
add_index "
|
43
|
-
add_index "
|
42
|
+
add_index "received_bitcoin_transactions", ["bitcoin_transaction_id"], name: "index_received_bitcoin_transactions_on_bitcoin_transaction_id", unique: true
|
43
|
+
add_index "received_bitcoin_transactions", ["btc_address_id"], name: "index_received_bitcoin_transactions_on_btc_address_id"
|
44
44
|
|
45
|
-
create_table "
|
46
|
-
t.integer "
|
45
|
+
create_table "sent_bitcoin_transactions", force: :cascade do |t|
|
46
|
+
t.integer "bitcoin_transaction_id", null: false
|
47
47
|
t.datetime "created_at"
|
48
48
|
t.datetime "updated_at"
|
49
49
|
end
|
50
50
|
|
51
|
-
add_index "
|
51
|
+
add_index "sent_bitcoin_transactions", ["bitcoin_transaction_id"], name: "index_sent_bitcoin_transactions_on_bitcoin_transaction_id", unique: true
|
52
52
|
|
53
53
|
end
|
@@ -22,13 +22,13 @@ class BitcoinActiveRecordClientTest < ActiveSupport::TestCase
|
|
22
22
|
@client.instance_variable_set(:@default_transaction_count, count)
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
25
|
+
def test_create_received_bitcoin_transactions
|
26
26
|
set_default_transaction_count(2)
|
27
27
|
@client.account = :test
|
28
28
|
|
29
|
-
@client.
|
30
|
-
|
31
|
-
assert_equal(3,
|
29
|
+
@client.create_received_bitcoin_transactions
|
30
|
+
received_bitcoin_transactions = ReceivedBitcoinTransaction.all.to_a
|
31
|
+
assert_equal(3, received_bitcoin_transactions.size)
|
32
32
|
|
33
33
|
[
|
34
34
|
{
|
@@ -50,18 +50,18 @@ class BitcoinActiveRecordClientTest < ActiveSupport::TestCase
|
|
50
50
|
receiver_key: '1AC8jNajH7zYikxRzRKT3otNW72B9qVDFa',
|
51
51
|
},
|
52
52
|
].each_with_index do |expected_values, i|
|
53
|
-
|
54
|
-
|
53
|
+
received_bitcoin_transaction = received_bitcoin_transactions[i]
|
54
|
+
bitcoin_transaction = received_bitcoin_transaction.bitcoin_transaction
|
55
55
|
|
56
|
-
assert_equal(expected_values[:sender_key],
|
57
|
-
assert_equal(BigDecimal.new(expected_values[:amount]),
|
58
|
-
assert_equal(expected_values[:txid],
|
59
|
-
assert_equal(expected_values[:receiver_key],
|
56
|
+
assert_equal(expected_values[:sender_key], bitcoin_transaction.btc_address.public_key)
|
57
|
+
assert_equal(BigDecimal.new(expected_values[:amount]), bitcoin_transaction.amount)
|
58
|
+
assert_equal(expected_values[:txid], bitcoin_transaction.txid)
|
59
|
+
assert_equal(expected_values[:receiver_key], received_bitcoin_transaction.btc_address.public_key)
|
60
60
|
end
|
61
61
|
|
62
62
|
# running again shouldnt do anything
|
63
|
-
@client.
|
64
|
-
assert_equal(3,
|
63
|
+
@client.create_received_bitcoin_transactions
|
64
|
+
assert_equal(3, ReceivedBitcoinTransaction.count)
|
65
65
|
end
|
66
66
|
|
67
67
|
def test_get_received_transactions
|
@@ -104,15 +104,15 @@ class BitcoinActiveRecordClientTest < ActiveSupport::TestCase
|
|
104
104
|
txid = 'kjdksfjlk2323'
|
105
105
|
@client.expects(:request).with(:sendtoaddress, public_key, amount, comment).returns(txid)
|
106
106
|
|
107
|
-
|
108
|
-
assert_equal(false,
|
107
|
+
sent_bitcoin_transaction = @client.pay(public_key: public_key, amount: amount, comment: comment) do |sent_bitcoin_transaction|
|
108
|
+
assert_equal(false, sent_bitcoin_transaction.persisted?)
|
109
109
|
end
|
110
110
|
|
111
|
-
|
111
|
+
bitcoin_transaction = sent_bitcoin_transaction.bitcoin_transaction
|
112
112
|
|
113
|
-
assert_equal(true,
|
114
|
-
assert_equal(public_key,
|
115
|
-
assert_equal(amount,
|
116
|
-
assert_equal(txid,
|
113
|
+
assert_equal(true, sent_bitcoin_transaction.persisted?)
|
114
|
+
assert_equal(public_key, bitcoin_transaction.btc_address.public_key)
|
115
|
+
assert_equal(amount, bitcoin_transaction.amount)
|
116
|
+
assert_equal(txid, bitcoin_transaction.txid)
|
117
117
|
end
|
118
118
|
end
|
@@ -18,11 +18,11 @@ class BitcoinActiveRecordGeneratorsTest < ActiveSupport::TestCase
|
|
18
18
|
|
19
19
|
def test_install_generator
|
20
20
|
lambda do
|
21
|
-
migration_file_text = "class CreateBitcoinActiveRecordModels < ActiveRecord::Migration\n def change\n create_table \"
|
21
|
+
migration_file_text = "class CreateBitcoinActiveRecordModels < ActiveRecord::Migration\n def change\n create_table \"bitcoin_transactions\" do |t|\n t.integer \"btc_address_id\", null: false\n t.decimal \"amount\", null: false\n t.string \"txid\", null: false\n t.timestamps\n end\n add_index \"bitcoin_transactions\", [\"btc_address_id\"]\n add_index \"bitcoin_transactions\", [\"txid\"], unique: true\n\n create_table \"btc_addresses\" do |t|\n t.string \"public_key\", null: false\n t.timestamps\n end\n add_index \"btc_addresses\", [\"public_key\"], unique: true\n\n create_table \"received_bitcoin_transactions\" do |t|\n t.integer \"bitcoin_transaction_id\", null: false\n t.integer \"btc_address_id\", null: false\n t.timestamps\n end\n add_index :received_bitcoin_transactions, :bitcoin_transaction_id, unique: true\n add_index :received_bitcoin_transactions, :btc_address_id\n\n create_table \"sent_bitcoin_transactions\" do |t|\n t.integer \"bitcoin_transaction_id\", null: false\n t.timestamps\n end\n add_index \"sent_bitcoin_transactions\", [\"bitcoin_transaction_id\"], unique: true\n end\nend\n"
|
22
22
|
assert_equal(migration_file_text, File.read(@migration_file))
|
23
23
|
end.()
|
24
24
|
|
25
|
-
%w(btc_address
|
25
|
+
%w(btc_address bitcoin_transaction received_bitcoin_transaction sent_bitcoin_transaction).each do |model_name|
|
26
26
|
camel_case_model_name = model_name.camelize
|
27
27
|
filename = "app/models/#{model_name}.rb"
|
28
28
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitcoin_active_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lihan Li
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -67,16 +67,16 @@ files:
|
|
67
67
|
- lib/bitcoin_active_record.rb
|
68
68
|
- lib/bitcoin_active_record/client.rb
|
69
69
|
- lib/bitcoin_active_record/models.rb
|
70
|
+
- lib/bitcoin_active_record/models/bitcoin_transaction.rb
|
70
71
|
- lib/bitcoin_active_record/models/btc_address.rb
|
71
|
-
- lib/bitcoin_active_record/models/
|
72
|
-
- lib/bitcoin_active_record/models/
|
73
|
-
- lib/bitcoin_active_record/models/sent_payment.rb
|
72
|
+
- lib/bitcoin_active_record/models/received_bitcoin_transaction.rb
|
73
|
+
- lib/bitcoin_active_record/models/sent_bitcoin_transaction.rb
|
74
74
|
- lib/generators/bitcoin_active_record/install_generator.rb
|
75
75
|
- lib/generators/templates/create_bitcoin_active_record_models.rb
|
76
|
+
- lib/generators/templates/models/bitcoin_transaction.rb
|
76
77
|
- lib/generators/templates/models/btc_address.rb
|
77
|
-
- lib/generators/templates/models/
|
78
|
-
- lib/generators/templates/models/
|
79
|
-
- lib/generators/templates/models/sent_payment.rb
|
78
|
+
- lib/generators/templates/models/received_bitcoin_transaction.rb
|
79
|
+
- lib/generators/templates/models/sent_bitcoin_transaction.rb
|
80
80
|
- test/.gitignore
|
81
81
|
- test/Gemfile
|
82
82
|
- test/Gemfile.lock
|
@@ -89,12 +89,10 @@ files:
|
|
89
89
|
- test/app/controllers/concerns/.keep
|
90
90
|
- test/app/helpers/application_helper.rb
|
91
91
|
- test/app/mailers/.keep
|
92
|
-
- test/app/models
|
92
|
+
- test/app/models/bitcoin_transaction.rb
|
93
93
|
- test/app/models/btc_address.rb
|
94
|
-
- test/app/models/
|
95
|
-
- test/app/models/
|
96
|
-
- test/app/models/received_payment.rb
|
97
|
-
- test/app/models/sent_payment.rb
|
94
|
+
- test/app/models/received_bitcoin_transaction.rb
|
95
|
+
- test/app/models/sent_bitcoin_transaction.rb
|
98
96
|
- test/app/views/layouts/application.html.erb
|
99
97
|
- test/bin/bundle
|
100
98
|
- test/bin/rails
|
@@ -119,7 +117,7 @@ files:
|
|
119
117
|
- test/config/initializers/wrap_parameters.rb
|
120
118
|
- test/config/locales/en.yml
|
121
119
|
- test/config/routes.rb
|
122
|
-
- test/db/migrate/
|
120
|
+
- test/db/migrate/20150429175618_create_bitcoin_active_record_models.rb
|
123
121
|
- test/db/schema.rb
|
124
122
|
- test/db/seeds.rb
|
125
123
|
- test/lib/assets/.keep
|
@@ -176,12 +174,10 @@ test_files:
|
|
176
174
|
- test/app/controllers/concerns/.keep
|
177
175
|
- test/app/helpers/application_helper.rb
|
178
176
|
- test/app/mailers/.keep
|
179
|
-
- test/app/models
|
177
|
+
- test/app/models/bitcoin_transaction.rb
|
180
178
|
- test/app/models/btc_address.rb
|
181
|
-
- test/app/models/
|
182
|
-
- test/app/models/
|
183
|
-
- test/app/models/received_payment.rb
|
184
|
-
- test/app/models/sent_payment.rb
|
179
|
+
- test/app/models/received_bitcoin_transaction.rb
|
180
|
+
- test/app/models/sent_bitcoin_transaction.rb
|
185
181
|
- test/app/views/layouts/application.html.erb
|
186
182
|
- test/bin/bundle
|
187
183
|
- test/bin/rails
|
@@ -206,7 +202,7 @@ test_files:
|
|
206
202
|
- test/config/initializers/wrap_parameters.rb
|
207
203
|
- test/config/locales/en.yml
|
208
204
|
- test/config/routes.rb
|
209
|
-
- test/db/migrate/
|
205
|
+
- test/db/migrate/20150429175618_create_bitcoin_active_record_models.rb
|
210
206
|
- test/db/schema.rb
|
211
207
|
- test/db/seeds.rb
|
212
208
|
- test/lib/assets/.keep
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module BitcoinActiveRecord::Models::Payment
|
2
|
-
extend ActiveSupport::Concern
|
3
|
-
|
4
|
-
included do
|
5
|
-
# sender's address for received payments
|
6
|
-
# payee address for sent payments
|
7
|
-
belongs_to(:btc_address, inverse_of: :payments)
|
8
|
-
|
9
|
-
has_one(:received_payment, inverse_of: :payment)
|
10
|
-
has_one(:sent_payment, inverse_of: :payment)
|
11
|
-
|
12
|
-
validates(:txid, :btc_address, :amount, presence: true)
|
13
|
-
validates(:amount, numericality: { greater_than_or_equal_to: 0 })
|
14
|
-
validates(:txid, uniqueness: true)
|
15
|
-
|
16
|
-
auto_strip_attributes(:txid)
|
17
|
-
end
|
18
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module BitcoinActiveRecord::Models::ReceivedPayment
|
2
|
-
extend ActiveSupport::Concern
|
3
|
-
|
4
|
-
included do
|
5
|
-
belongs_to(:payment, inverse_of: :received_payment, dependent: :destroy)
|
6
|
-
belongs_to(:btc_address, inverse_of: :received_payments) # payment to this address
|
7
|
-
|
8
|
-
validates(:payment, presence: true)
|
9
|
-
validates(:payment_id, uniqueness: true)
|
10
|
-
end
|
11
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
module BitcoinActiveRecord::Models::SentPayment
|
2
|
-
extend ActiveSupport::Concern
|
3
|
-
|
4
|
-
included do
|
5
|
-
belongs_to(:payment, inverse_of: :sent_payment, dependent: :destroy)
|
6
|
-
|
7
|
-
validates(:payment, presence: true)
|
8
|
-
validates(:payment_id, uniqueness: true)
|
9
|
-
end
|
10
|
-
end
|
data/test/app/models/.keep
DELETED
File without changes
|
File without changes
|
data/test/app/models/payment.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
class CreateBitcoinActiveRecordModels < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table "payments" do |t|
|
4
|
-
t.integer "btc_address_id", null: false
|
5
|
-
t.decimal "amount", null: false
|
6
|
-
t.string "txid", null: false
|
7
|
-
t.timestamps
|
8
|
-
end
|
9
|
-
add_index "payments", ["btc_address_id"]
|
10
|
-
add_index "payments", ["txid"], unique: true
|
11
|
-
|
12
|
-
create_table "btc_addresses" do |t|
|
13
|
-
t.string "public_key", null: false
|
14
|
-
t.timestamps
|
15
|
-
end
|
16
|
-
add_index "btc_addresses", ["public_key"], unique: true
|
17
|
-
|
18
|
-
create_table "received_payments" do |t|
|
19
|
-
t.integer "payment_id", null: false
|
20
|
-
t.integer "btc_address_id", null: false
|
21
|
-
t.timestamps
|
22
|
-
end
|
23
|
-
add_index "received_payments", ["payment_id"], unique: true
|
24
|
-
add_index :received_payments, :btc_address_id
|
25
|
-
|
26
|
-
create_table "sent_payments" do |t|
|
27
|
-
t.integer "payment_id", null: false
|
28
|
-
t.timestamps
|
29
|
-
end
|
30
|
-
add_index "sent_payments", ["payment_id"], unique: true
|
31
|
-
end
|
32
|
-
end
|