rippler 0.0.1 → 0.0.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.
- data/.gitignore +5 -1
- data/.rvmrc +1 -1
- data/README.md +7 -9
- data/bin/rippler +12 -0
- data/lib/rippler.rb +70 -1
- data/lib/rippler/contacts.rb +113 -0
- data/lib/rippler/transaction.rb +38 -0
- data/lib/rippler/version.rb +1 -1
- data/rippler.gemspec +3 -0
- metadata +33 -16
data/.gitignore
CHANGED
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm --create use
|
1
|
+
rvm --create use ruby-1.9.3-p362@rippler
|
data/README.md
CHANGED
@@ -4,21 +4,19 @@ Command line client for Ripple payment platform. It uses Ripple websocket API to
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
|
7
|
+
You need to have Ruby 1.9 (http://www.ruby-lang.org/en/downloads/) installed. Once Ruby is in place, just install Rippler gem:
|
8
8
|
|
9
|
-
gem
|
9
|
+
$ gem install rippler
|
10
10
|
|
11
|
-
|
11
|
+
## Usage
|
12
12
|
|
13
|
-
|
13
|
+
Rippler supports Ripple API commands (https://ripple.com/wiki/RPC_API). All parameters after command should be given in JSON format, such as:
|
14
14
|
|
15
|
-
|
15
|
+
$ rippler account_info ident:rpvfJ4mR6QQAeogpXEKnuyGBx8mYCSnYZi
|
16
16
|
|
17
|
-
$
|
18
|
-
|
19
|
-
## Usage
|
17
|
+
$ rippler account_tx account:rpvfJ4mR6QQAeogpXEKnuyGBx8mYCSnYZi ledger:319841
|
20
18
|
|
21
|
-
|
19
|
+
$ rippler account_tx account:rpH3zuMch2GrrYX724xGWwbMGwiQ5RbSAU ledger_min:300000 ledger_max:319000
|
22
20
|
|
23
21
|
## Contributing
|
24
22
|
|
data/bin/rippler
ADDED
data/lib/rippler.rb
CHANGED
@@ -1,5 +1,74 @@
|
|
1
|
+
require 'eventmachine'
|
2
|
+
require 'faye/websocket'
|
3
|
+
require "json"
|
1
4
|
require "rippler/version"
|
5
|
+
require 'rippler/transaction'
|
6
|
+
require 'rippler/contacts'
|
2
7
|
|
3
8
|
module Rippler
|
4
|
-
|
9
|
+
RIPPLE_URI = 'wss://s1.ripple.com:51233'
|
10
|
+
MY_ACCT = Rippler::Contacts["arvicco"]
|
11
|
+
|
12
|
+
# Turn command line arguments into command json
|
13
|
+
def self.process args
|
14
|
+
command_line = args.empty? ? ['account_info'] : args.dup
|
15
|
+
|
16
|
+
command = command_line.shift
|
17
|
+
params = Hash[*command_line.map {|p| p.split(':')}.flatten]
|
18
|
+
# p command, params
|
19
|
+
|
20
|
+
if Rippler.respond_to? command # pre-defined Rippler method
|
21
|
+
Rippler.send command, params
|
22
|
+
else # Arbitrary API command
|
23
|
+
Rippler.request params.merge(command: command)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Make a single JSON request to Ripple over Websockets, return Ripple reply
|
28
|
+
def self.request params
|
29
|
+
reply = ''
|
30
|
+
|
31
|
+
EM.run {
|
32
|
+
ws = Faye::WebSocket::Client.new(RIPPLE_URI)
|
33
|
+
|
34
|
+
ws.onopen = lambda do |event|
|
35
|
+
# p [:open]
|
36
|
+
ws.send params.to_json
|
37
|
+
end
|
38
|
+
|
39
|
+
ws.onmessage = lambda do |event|
|
40
|
+
# p [:message]
|
41
|
+
reply = JSON.parse(event.data)
|
42
|
+
ws.close
|
43
|
+
end
|
44
|
+
|
45
|
+
ws.onerror = lambda do |event|
|
46
|
+
# p [:error, event]
|
47
|
+
end
|
48
|
+
|
49
|
+
ws.onclose = lambda do |event|
|
50
|
+
# p [:close, event.code, event.reason]
|
51
|
+
ws = nil
|
52
|
+
EM.stop
|
53
|
+
end
|
54
|
+
}
|
55
|
+
reply
|
56
|
+
end
|
57
|
+
|
58
|
+
# These are user-defined methods that post-process Ripple replies
|
59
|
+
def self.my_info params
|
60
|
+
request( {command: "account_info", ident: MY_ACCT}.merge(params) )
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.my_tx params
|
64
|
+
reply = request( {command: "account_tx",
|
65
|
+
account: MY_ACCT,
|
66
|
+
ledger_min: 303000,
|
67
|
+
ledger_max: 329794,
|
68
|
+
resume: 0,
|
69
|
+
sort_asc: 1
|
70
|
+
}.merge(params) ) #(optional)
|
71
|
+
txs = reply["result"]["transactions"]
|
72
|
+
txs.map {|t| Transaction.new(t).to_s}
|
73
|
+
end
|
5
74
|
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
module Rippler
|
2
|
+
Contacts = Hash[ *%W[
|
3
|
+
OpenCoin rJR7gjNe3DpJ7kpB4CHBxjDKfwVMpTKPpj
|
4
|
+
address_one rrrrrrrrrrrrrrrrrrrrBZbvji
|
5
|
+
|
6
|
+
weex_btc rpvfJ4mR6QQAeogpXEKnuyGBx8mYCSnYZi
|
7
|
+
bitstamp rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B
|
8
|
+
bitstamp_hotwallet rrpNnNLKrartuEqfJGpqyDwPj1AFPg9vn1
|
9
|
+
weex_btc rpvfJ4mR6QQAeogpXEKnuyGBx8mYCSnYZi
|
10
|
+
weex_aud rBcYpuDT1aXNo4jnqczWJTytKGdBGufsre
|
11
|
+
weex_cad r47RkFi1Ew3LvCNKT6ufw3ZCyj5AJiLHi9
|
12
|
+
weex_usd r9vbV3EHvXWjSkeQ6CAcYVPGeq7TuiXY2X
|
13
|
+
|
14
|
+
molecular rpH3zuMch2GrrYX724xGWwbMGwiQ5RbSAU
|
15
|
+
Ente rNEtVs4kNeESF5HbWCDZMYcWwKZ5iKwUEr
|
16
|
+
herzmeister rUdPvX9YN1NwyniwiJeSW6y3YKZL84gsB6
|
17
|
+
ribuck ra3a5cfr83b5FTh1YDURqWQh8HTbHEwdyD
|
18
|
+
Spekulatius rNHf9nnX4JgHferxjRxmapDev7mWQZ6XXd
|
19
|
+
Bitobsessed rKfd86S25PUdVquk41xedH5jNX4bZ8DiA7
|
20
|
+
Akka r9RpJFpD6vkKhgHhrRjkgofSbNsE1oYFZ1
|
21
|
+
bbit rB7qiwEDrcMShUN3Jd8LwXr4RJ7RWBaQu8
|
22
|
+
ryanAC rJA6mGHsw5yCynLFRe3rjGqaCMk2YpmuMy
|
23
|
+
phelix rM3puGNYNQTWuqsQpkzxSpmWFqGGuY29Vb
|
24
|
+
kokojie rNexqWdz7q16e6PPBDsD2XxxzFS64SAEYS
|
25
|
+
PeterLambert rGsLivkDjTZHFQ8oV2h81uTcbTpgjEaEY7
|
26
|
+
jorgen rQay7bQ3XoZcT6E3c8uDopZdnWaMBxWea2
|
27
|
+
Belkaar rJVshcxcxSAXkgzg1PiUQWr5TodTNAETva
|
28
|
+
grondilu rpuebQXsR7kAst5yidD6fmGmJHD4niXzbo
|
29
|
+
TimoY rG8VFQPaJB2gNjx29Et1wKUJettQP1eLmk
|
30
|
+
Melbustus rKAw7uHrdUUEqtfFhBBHe6unyh57PLpCc4
|
31
|
+
Aahzman r9TWUUN8duW1rDqJ2yz2wjksc8A9BpxPUh
|
32
|
+
AlexNeto rp3Papsq3aXf3gswfgfaqgegjLAEVaw8V1
|
33
|
+
thoughtcourier rn7iD6DpnCwH8kjJDCsENibMXkgmJkRCRz
|
34
|
+
znort987 rnozMbmRYfqvn15iBFNeeRJs95gagR2B46
|
35
|
+
RaTTuS rw65MQQDpWQYGxFEtcQk3r6dpeZ2gx5zff
|
36
|
+
romerun rU3cgYfpu9jedq8GnW43ArEntsWTD6Sg4n
|
37
|
+
PRab rEdaspCuZQWrxrGiGMQW3iPXjmEnfUxkqN
|
38
|
+
duckbillp rsa8BE2DfzLC52XQMUv3gECoZXQL7FNGig
|
39
|
+
Mageant rPDT5apJsfy8Jbz3M8jXzXskMsKAANhM9p
|
40
|
+
Severian rDqSvk6fRhKq5tSW7GpWFFHG5pG2XE3mtR
|
41
|
+
lebing rJFGHvCtpPrftTmeNAs8bYy5xUeTaxCD5t
|
42
|
+
gweedo rKFX2Gvk4jLtgEGMC2qDmMi18Zw4bewrjK
|
43
|
+
OgNasty r3hRKGL1JKWXJDujchZXrs6Pa16xsM6JjS
|
44
|
+
Mogly r9uVRhJEKsJVaxsU3c3rimzLWKYRmDUcX2
|
45
|
+
Warry rLgbpjNtVQ6ENjn5nGgnyi26gn9EBjuKhj
|
46
|
+
supert rh7eAu9SrFsE2fVfc1PJTs1WYDHGAUde6V
|
47
|
+
Evan rfpS692WVbsSXyv6R48K8A2LHCqdvYaS2w
|
48
|
+
BBQKorv rrhAmxxwxEchP2iJdGh7nrwwAK4u3BzaLC
|
49
|
+
TTBit rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E
|
50
|
+
Mjbmonetarymetals rNTXjBWitdKUxr6o1zyi4FsjQ8UeP3JCKd
|
51
|
+
khal rpUjkUUcbteWbXrPt4aXAMwzotSPzQJHQt
|
52
|
+
|
53
|
+
arvicco rnZoUopPFXRSVGdeDkgbqdft8SbXfJxKYh
|
54
|
+
paysafecardbitcoin rN4kvobWCZVSzgLmo27B4kMjakAL31pMSr
|
55
|
+
Lethn r4DpNXFTohg1hgBKxrYv8YBtahKNAALjeH
|
56
|
+
nikkus rUhcZuPQBrykExj1VSfLnaeLdu2hJmVe9e
|
57
|
+
filharvey rJRFxWe3KxmhMfW7am5hFE9pkciAJHefeD
|
58
|
+
ablewasiereisawelba rPtTbUkhLZ9e2a7H3TCHcHmSa35jTnQHoa
|
59
|
+
luffy r3mjrPe1S4vHe2g6CTCeb6ezcPfpDywQAs
|
60
|
+
thepwnorbpwnd rLQ1WWeCVuM523iMRC9PCLpyFU8YkWqDdR
|
61
|
+
lightlord raAw68E3T6Eh4h5Qfb1ZxsWzyHkY8BZJRN
|
62
|
+
Wolf0 rwcpov2ZZmPpo6sjeg4n2oZx94uAYBQ21o
|
63
|
+
thepickingpair rht576qwyKXZ26JEGHYpC3N3atjNS8oM5j
|
64
|
+
Luceo rGZL3cCV6Er5Tiag9tStGhseF4NDBxbxQr
|
65
|
+
21after2 rwuoJnBP4kyfR6Bry8ruLNyxubuk37w6gi
|
66
|
+
t.o.m. r4b5wQJL9qfqGZA6WQksE9spuYi4fmgDde
|
67
|
+
octopus r33dwR8VbfDvHptF2AYzp9JHjR7iVetqM
|
68
|
+
MichaelBliss rB2VLRRZejCMpDCyvGNn4nEHRLycwY7H8z
|
69
|
+
nckfor rD2yesqWXxgEztU6khSjts7tx8CF6VN3k3
|
70
|
+
FirewallXIII rEvYxDNoz8aFSRRWH6JoKBhBAqx6xDMN3G
|
71
|
+
00null rhr3wb58NyicoBBXGfPQtctXxk1X8ZhwcM
|
72
|
+
Isamaru rGsfVSM9etepbYoa52AScPRd2eSdv86ZDf
|
73
|
+
ragmondo rHm9QPX7v2xz9JMozrYnJynfgEhnQ6Aaeo
|
74
|
+
trippp rL4px896Gf2r5PDru38jsJt3qTN9NmpgEd
|
75
|
+
TheRenix rMPJ77FoY86cLLzhQ3ETnvNdAvy6A4UMqR
|
76
|
+
simonk83 r3U8PomU1pw4T48cmXVahUNuUerNVcbwto
|
77
|
+
rme rJeuPjq9XBZkuxk51hmXSsFmANy7JbBCRC
|
78
|
+
Ecks rJaBUL6npe6yvoJU7e5nuRgAaMoa3njnQ8
|
79
|
+
NABiT rLorFPMtVzutmcZBDGpAeQLfVyCL19p1qK
|
80
|
+
JesterOfTortuga rDGLPeQTbd7ntNRNdwAtgAjnUPf7YwDHGz
|
81
|
+
ryanbrownstar rvTZGvDaKza8Zuhm4E7vnLtTuMU2MgwX3
|
82
|
+
mmkiwi rJpG5GJrpKBabbqGphfijjdZe2bkyPewL7
|
83
|
+
camolist rBzu6o32DoHtHUvRYUKwcHMsgz1BTSTyek
|
84
|
+
cambda rfxAqtZA9Knb8mb1Gij4Y6rFfTfp6FWSTZ
|
85
|
+
cambda-1 rBBSghHNdpbBuT5kiGruX5TjofWLF2fi74
|
86
|
+
TheInventor r7a3uqQREUU6tEYnsCTFWh31DeVHWNp2G
|
87
|
+
rizzla rLnhMYFwqUkc2D8ojJmhQkNuytaBsyzVG3
|
88
|
+
Moshi r9fupyMm63XMvbAozvzjLyHdJHCtLEKveE
|
89
|
+
bachus rKQLwGTe6NX16iSEuS88bi3FEqZnbwF7EB
|
90
|
+
helloworld rwDo98FnbCp3qUN5CkwDcK4rFfbyW3Kzqq
|
91
|
+
Cyberdyne ragN8YEhHjXbgeGrNGLw9wuxQeq1d8qHk
|
92
|
+
cardinalG rQr973QcHXx1NCfXpQdLPpnGmMrkDjwRXB
|
93
|
+
dalek r3HpcvyJUhpGzJGa7KBZcvo35EiDqLtU1V
|
94
|
+
Slackware1995 rLHacQyTzfRjHMp7yFzXu18cbt6KteSXBP
|
95
|
+
WalterRothbard rwaaH5CCdWe8V7kBbXQonpFyKbRDePF9Vc
|
96
|
+
spndr7 rUusFTWNUDYqKnAg4tiZLTAyRdUMaVFVUG
|
97
|
+
kakobrekla rHrkFodY9f3DxQnSsHiu6R1j4JvTYfFnRS
|
98
|
+
ny2cafuse rBh3KyjpANw5GXbt9AmCiFB2MbYGxWSCWa
|
99
|
+
chris200x9 r9MmCAquMciDwGRqKUXvayK2LAayPSvYuz
|
100
|
+
Prospero rB8N1ohjVKtMiZVivSY3H6Y3ABcAMJce36
|
101
|
+
Atruk rp3uz9jcb8LkMpMvwsfFTaCpkEgAGxNnKj
|
102
|
+
Isokivi rUjVzMqFpFYLQ8PoKb46psWuKhkxgZFTnx
|
103
|
+
Anormalname rp9DmXB6uxkooTeGpdtjaj8eT8V3ENaads
|
104
|
+
Luno rDcW2mqMKGHZ4iFKkTSyHyBT4AtLNBwge
|
105
|
+
weex@bitcointalk rEjC6w3m7ENkmD9SAyFyfKgRgeNz7HbkbW
|
106
|
+
gbl08ma rsgg1U8UpYodp1GM3NDaYfMrZge97Gpvc9
|
107
|
+
tosku rBs43YZMn5QsYY9jZYcG4C3egEebUfGWh3
|
108
|
+
BitcoinG r3CxMDQFX1Atq1vQN5sqVsjm3rawGSwd32
|
109
|
+
|
110
|
+
]]
|
111
|
+
|
112
|
+
Addresses = Contacts.invert
|
113
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
module Rippler
|
3
|
+
class Transaction
|
4
|
+
def initialize data # data hash
|
5
|
+
@data = data
|
6
|
+
end
|
7
|
+
|
8
|
+
def name account
|
9
|
+
Rippler::Addresses[account] || account
|
10
|
+
end
|
11
|
+
|
12
|
+
def amount money
|
13
|
+
if money.is_a? Hash
|
14
|
+
"#{money['value']}/#{money['currency']}/#{name(money['issuer'])}"
|
15
|
+
else
|
16
|
+
"#{money.to_i/1000000.0}/XRP"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
tx = @data["tx"]
|
23
|
+
case tx["TransactionType"]
|
24
|
+
when "Payment"
|
25
|
+
"PAY #{amount(tx['Amount'])} #{name(tx['Account'])} > #{name(tx['Destination'])}"
|
26
|
+
# when "OfferCancel"
|
27
|
+
# "CAN #{name(tx['Account'])} ##{tx['Sequence']}"
|
28
|
+
# when "OfferCreate"
|
29
|
+
# "OFR #{name(tx['Account'])} ##{tx['Sequence']} offers " +
|
30
|
+
# "#{amount(tx['TakerGets'])} for #{amount(tx['TakerPays'])}"
|
31
|
+
# when "TrustSet"
|
32
|
+
# "TRS #{amount(tx['LimitAmount'])} #{name(tx['Account'])}"
|
33
|
+
else
|
34
|
+
tx
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/rippler/version.rb
CHANGED
data/rippler.gemspec
CHANGED
@@ -16,4 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency 'faye-websocket', '~> 0.4'
|
21
|
+
# gem.add_dependency 'websocket-eventmachine-client', '~> 1.0'
|
19
22
|
end
|
metadata
CHANGED
@@ -1,20 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rippler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- arvicco
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
13
|
-
dependencies:
|
12
|
+
date: 2013-03-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: faye-websocket
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.4'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.4'
|
14
30
|
description: Command line client for Ripple payment platform
|
15
31
|
email:
|
16
32
|
- arvicco@gmail.com
|
17
|
-
executables:
|
33
|
+
executables:
|
34
|
+
- rippler
|
18
35
|
extensions: []
|
19
36
|
extra_rdoc_files: []
|
20
37
|
files:
|
@@ -24,34 +41,34 @@ files:
|
|
24
41
|
- LICENSE.txt
|
25
42
|
- README.md
|
26
43
|
- Rakefile
|
44
|
+
- bin/rippler
|
27
45
|
- lib/rippler.rb
|
46
|
+
- lib/rippler/contacts.rb
|
47
|
+
- lib/rippler/transaction.rb
|
28
48
|
- lib/rippler/version.rb
|
29
49
|
- rippler.gemspec
|
30
50
|
homepage: ''
|
31
51
|
licenses: []
|
32
|
-
post_install_message:
|
52
|
+
post_install_message:
|
33
53
|
rdoc_options: []
|
34
54
|
require_paths:
|
35
55
|
- lib
|
36
56
|
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
37
58
|
requirements:
|
38
59
|
- - ! '>='
|
39
60
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
MA==
|
42
|
-
none: false
|
61
|
+
version: '0'
|
43
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
44
64
|
requirements:
|
45
65
|
- - ! '>='
|
46
66
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
MA==
|
49
|
-
none: false
|
67
|
+
version: '0'
|
50
68
|
requirements: []
|
51
|
-
rubyforge_project:
|
69
|
+
rubyforge_project:
|
52
70
|
rubygems_version: 1.8.24
|
53
|
-
signing_key:
|
71
|
+
signing_key:
|
54
72
|
specification_version: 3
|
55
73
|
summary: Command line client for Ripple payment platform, uses websocket API
|
56
74
|
test_files: []
|
57
|
-
has_rdoc:
|