rippler 0.0.10 → 0.0.11
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/README.md +10 -2
- data/bin/rippler +13 -1
- data/lib/rippler.rb +52 -14
- data/lib/rippler/contacts.rb +18 -3
- data/lib/rippler/money.rb +12 -7
- data/lib/rippler/offer.rb +63 -0
- data/lib/rippler/transaction.rb +1 -4
- data/lib/rippler/utils.rb +4 -0
- data/lib/rippler/version.rb +1 -1
- metadata +3 -2
    
        data/README.md
    CHANGED
    
    | @@ -32,9 +32,13 @@ Ripple server replies are returned as JSON and printed to stdout. If you want to | |
| 32 32 |  | 
| 33 33 | 
             
            ## Usage: additional commands
         | 
| 34 34 |  | 
| 35 | 
            -
            Rippler also provides additional commands that print out human-readable output | 
| 35 | 
            +
            Rippler also provides additional commands that print out human-readable output. You can use option -t for text (rather than structural) output.
         | 
| 36 36 |  | 
| 37 | 
            -
                $ rippler  | 
| 37 | 
            +
                $ rippler -t order_book buy:BTC/bitstamp sell:XRP
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            This one prints current order book for any currency pair.
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                $ rippler -t history account:molecular
         | 
| 38 42 |  | 
| 39 43 | 
             
            This one prints any account history in a human-readable format.
         | 
| 40 44 |  | 
| @@ -46,6 +50,10 @@ This one prints out all outstanding balances (debit/credit IOUs and XRP) for a s | |
| 46 50 |  | 
| 47 51 | 
             
            This one monitors Ripple transactions in real-time similar to #ripple-watch, but more interesting since it shows known account names instead of opaque addresses. Ctrl-C to stop it.
         | 
| 48 52 |  | 
| 53 | 
            +
            	$ rippler path_find source_account:RippleUnion destination_account:singpolyma 'destination_amount:{currency:CAD, value:1}'
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            This one finds possible paths for amounts of money between two addresses, and prints out what the source would have to send to get that amount to the destination.
         | 
| 56 | 
            +
             | 
| 49 57 | 
             
            ## Contacts database
         | 
| 50 58 |  | 
| 51 59 | 
             
            Contacts database is in lib/rippler/contacts.rb, mostly auto-scraped from Bitcointalk. It may be a bit inaccurate, you can modify/extend it as you see fit.
         | 
    
        data/bin/rippler
    CHANGED
    
    | @@ -6,4 +6,16 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 6 6 | 
             
            require 'rippler'
         | 
| 7 7 | 
             
            require "pp"
         | 
| 8 8 |  | 
| 9 | 
            -
             | 
| 9 | 
            +
            if ARGV[0] == '-t'
         | 
| 10 | 
            +
            	ARGV.shift
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            	Rippler.process(ARGV).each do |v|
         | 
| 13 | 
            +
            		if v.is_a?(String)
         | 
| 14 | 
            +
            			puts v
         | 
| 15 | 
            +
            		else
         | 
| 16 | 
            +
            			pp v
         | 
| 17 | 
            +
            		end
         | 
| 18 | 
            +
            	end
         | 
| 19 | 
            +
            else
         | 
| 20 | 
            +
            	pp Rippler.process ARGV
         | 
| 21 | 
            +
            end
         | 
    
        data/lib/rippler.rb
    CHANGED
    
    | @@ -11,6 +11,7 @@ require 'rippler/account' | |
| 11 11 | 
             
            require 'rippler/ledger'
         | 
| 12 12 | 
             
            require 'rippler/transaction'
         | 
| 13 13 | 
             
            require 'rippler/line'
         | 
| 14 | 
            +
            require 'rippler/offer'
         | 
| 14 15 |  | 
| 15 16 | 
             
            module Rippler
         | 
| 16 17 | 
             
              extend Rippler::Utils
         | 
| @@ -18,16 +19,23 @@ module Rippler | |
| 18 19 | 
             
              RIPPLE_URI = 'wss://s1.ripple.com:51233'
         | 
| 19 20 | 
             
              DEFAULT_ACCT = Rippler::Contacts["molecular"]
         | 
| 20 21 |  | 
| 22 | 
            +
              def self.parse_params command_line
         | 
| 23 | 
            +
                params = command_line.map {|p| p.split(':',2)}.flatten.        # get json pairs
         | 
| 24 | 
            +
                  map {|p| p =~ /\[.*\]/ ? p.gsub(/\[|\]/,'').split(',') : p}. # get arrays
         | 
| 25 | 
            +
                  map {|p| p =~ /\{(.*)\}/ ? self.parse_params($1.split(/\s*,\s*/)) : p} # get objects
         | 
| 26 | 
            +
                Hash[*params]
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 21 29 | 
             
              # Turn command line arguments into command json
         | 
| 22 30 | 
             
              def self.process args
         | 
| 23 31 | 
             
                command_line = args.empty? ? ['account_info'] : args.dup
         | 
| 24 32 |  | 
| 25 33 | 
             
                command = command_line.shift
         | 
| 26 | 
            -
                params =  | 
| 27 | 
            -
                  map {|p| p =~ /\[.*\]/ ? p.gsub(/\[|\]/,'').split(',') : p} # get arrays
         | 
| 28 | 
            -
                params = Hash[*params]
         | 
| 34 | 
            +
                params = self.parse_params command_line
         | 
| 29 35 |  | 
| 30 36 | 
             
                params['account'] = Account(params['account']).address if params['account']
         | 
| 37 | 
            +
                params['destination_account'] = Account(params['destination_account']).address if params['destination_account']
         | 
| 38 | 
            +
                params['source_account'] = Account(params['source_account']).address if params['source_account']
         | 
| 31 39 |  | 
| 32 40 | 
             
                # p command, params
         | 
| 33 41 |  | 
| @@ -86,17 +94,12 @@ module Rippler | |
| 86 94 |  | 
| 87 95 | 
             
              ### These API commands need some pre/post-process wrappers
         | 
| 88 96 |  | 
| 89 | 
            -
              # book_offers  | 
| 90 | 
            -
              #  | 
| 97 | 
            +
              # book_offers should accept "taker_gets" & "taker_pays" params
         | 
| 98 | 
            +
              # in both "CUR/issuer" and {"currency":currency, "issuer":address} formats
         | 
| 91 99 | 
             
              def self.book_offers params
         | 
| 92 | 
            -
                 | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
                reply = request( params.merge('command' => "book_offers",
         | 
| 96 | 
            -
                                              'taker_gets' => taker_gets.to_hash,
         | 
| 97 | 
            -
                                              'taker_pays' => taker_pays.to_hash))
         | 
| 98 | 
            -
             | 
| 99 | 
            -
                # lines = reply["result"]["lines"]
         | 
| 100 | 
            +
                request( params.merge('command' => "book_offers",
         | 
| 101 | 
            +
                                      'taker_gets' => Money(params['taker_gets']).to_hash,
         | 
| 102 | 
            +
                                      'taker_pays' => Money(params['taker_pays']).to_hash))
         | 
| 100 103 | 
             
              end
         | 
| 101 104 |  | 
| 102 105 |  | 
| @@ -108,6 +111,22 @@ module Rippler | |
| 108 111 |  | 
| 109 112 | 
             
              ### These are user-defined methods that post-process Ripple replies
         | 
| 110 113 |  | 
| 114 | 
            +
              # Subscibe to event streams, print events out nicely formatted
         | 
| 115 | 
            +
              def self.order_book params
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                buy = params['buy']
         | 
| 118 | 
            +
                sell = params['sell']
         | 
| 119 | 
            +
                reply = book_offers('taker_gets' => buy,'taker_pays' => sell)
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                asks = reply['result']['offers'].map {|o| Offer.new(o)}
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                reply = book_offers('taker_gets' => sell,'taker_pays' => buy)
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                bids  = reply['result']['offers'].map {|o| Offer.new(o)}
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                (asks.reverse + bids.unshift("-"*40) ).map(&:to_s)
         | 
| 128 | 
            +
              end
         | 
| 129 | 
            +
             | 
| 111 130 | 
             
              # Subscibe to event streams, print events out nicely formatted
         | 
| 112 131 | 
             
              def self.monitor params
         | 
| 113 132 | 
             
                subscribe(params) do |message|
         | 
| @@ -155,8 +174,27 @@ module Rippler | |
| 155 174 | 
             
                                  'sort_asc' => 1
         | 
| 156 175 | 
             
                                  }.merge(params) ) #(optional)
         | 
| 157 176 | 
             
                txs = reply["result"]["transactions"]
         | 
| 158 | 
            -
                txs.map {|t| Transaction.new(t)}.map(&:to_s)
         | 
| 177 | 
            +
                txs.map {|t| Transaction.new(t)}.map(&:to_s).reverse
         | 
| 159 178 | 
             
                .push("Total transactions: #{txs.size}")
         | 
| 179 | 
            +
              end
         | 
| 160 180 |  | 
| 181 | 
            +
              def self.path_find params
         | 
| 182 | 
            +
                params.merge!('command' => 'ripple_path_find')
         | 
| 183 | 
            +
                if params['destination_amount'] && ! params['destination_amount']['issuer']
         | 
| 184 | 
            +
                  params['destination_amount']['issuer'] = params['destination_account']
         | 
| 185 | 
            +
                end
         | 
| 186 | 
            +
                reply = request(params)
         | 
| 187 | 
            +
                reply['result']['alternatives'].map {|alt|
         | 
| 188 | 
            +
                  if alt['source_amount'].is_a?(String)
         | 
| 189 | 
            +
                    # XRP as per https://ripple.com/wiki/JSON_API#XRP
         | 
| 190 | 
            +
                    if alt['source_amount'] =~ /\./
         | 
| 191 | 
            +
                      alt['source_amount'].to_f
         | 
| 192 | 
            +
                    else
         | 
| 193 | 
            +
                      alt['source_amount'].to_i.to_f / 1000000
         | 
| 194 | 
            +
                    end
         | 
| 195 | 
            +
                  else
         | 
| 196 | 
            +
                    "#{alt['source_amount']['value']}/#{alt['source_amount']['currency']}/#{alt['source_amount']['issuer']}"
         | 
| 197 | 
            +
                  end
         | 
| 198 | 
            +
                }
         | 
| 161 199 | 
             
              end
         | 
| 162 200 | 
             
            end
         | 
    
        data/lib/rippler/contacts.rb
    CHANGED
    
    | @@ -13,7 +13,6 @@ module Rippler | |
| 13 13 | 
             
                X.FortKnox.9        rp7gaQch2fiNQHDPrnPk9pG65e9cnv7g6X
         | 
| 14 14 | 
             
                X.FortKnox.a        rstKSeB2Qx7zrwSkyc7X9Xm5nYTJqtL3iM
         | 
| 15 15 | 
             
                X.FortKnox.b        rJYMACXJd1eejwzZA53VncYmiK2kZSBxyD
         | 
| 16 | 
            -
                X.FortKnox.c        r9ycgvDgXjeiaYmoz4F8sKBNXgHHx1wVFM
         | 
| 17 16 | 
             
                X.Distributor.1     r8TR1AeB1RDQFabM6i8UoFsRF5basqoHJ
         | 
| 18 17 | 
             
                X.Veirou            rhq5LEZSWHWY6H3raiC2KGe8TVeirou4BS
         | 
| 19 18 | 
             
                X.Wow               rHD7Bs8Zk1oQeUhLjPrsFStFcRE2NWoWpe
         | 
| @@ -43,7 +42,6 @@ module Rippler | |
| 43 42 | 
             
                X.16                rUGNvasUuxLiPL5RXvfZXW8HjBtSHZgqgz
         | 
| 44 43 | 
             
                X.17                rPyuHFYDwYMGJ5xhMbzfYeikx7ARV3ExvF
         | 
| 45 44 | 
             
                X.18                r4MZrGMPEHfxGNQHR92BJo5hU9BiqMsTej
         | 
| 46 | 
            -
                X.19                r3ADD8kXSUKHd6zTCKfnKT3zV9EZHjzp1S
         | 
| 47 45 | 
             
                X.20                rnW7DHtmZGJk4uhGTSU2BW3iPCPWb2xegg
         | 
| 48 46 | 
             
                X.21                rUrdFHbrEKWNQQ444zcTLrThjcnHCw2FPu
         | 
| 49 47 | 
             
                X.22                r49nVgaYSDuU7GEQh4mF1nyjsXSVRcUHsr
         | 
| @@ -82,7 +80,6 @@ module Rippler | |
| 82 80 | 
             
                X.56                rDZ8QghKF4C11pmbVAkqumPTehiF8mfHt3
         | 
| 83 81 | 
             
                X.57                rDGd76GCnZYGhjiAngV3xrPV4Qkfx79qqp
         | 
| 84 82 | 
             
                X.58                r9Y4Mdhs339CxpCFxgdBVRcuM5i4rMRbu
         | 
| 85 | 
            -
                X.59                rPcu8U9dSsK6nHtqgpeSvjuFTmNGq3arPh
         | 
| 86 83 |  | 
| 87 84 | 
             
                ADDRESS_ONE         rrrrrrrrrrrrrrrrrrrrBZbvji
         | 
| 88 85 | 
             
                OpenCoin            rJR7gjNe3DpJ7kpB4CHBxjDKfwVMpTKPpj
         | 
| @@ -95,6 +92,8 @@ module Rippler | |
| 95 92 | 
             
                bitstamp            rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B
         | 
| 96 93 | 
             
                bitstamp.hotwallet  rrpNnNLKrartuEqfJGpqyDwPj1AFPg9vn1
         | 
| 97 94 | 
             
                bitstamp.NejcKodric rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8
         | 
| 95 | 
            +
                bitstamp.wholesale  r9ycgvDgXjeiaYmoz4F8sKBNXgHHx1wVFM
         | 
| 96 | 
            +
                RippleUnion         r3ADD8kXSUKHd6zTCKfnKT3zV9EZHjzp1S
         | 
| 98 97 |  | 
| 99 98 | 
             
                TTBit               rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E
         | 
| 100 99 | 
             
                BankOfZed           ra88Lr8fyo9cUTuyjVFMTrvTSBU93erjyh
         | 
| @@ -507,6 +506,7 @@ module Rippler | |
| 507 506 | 
             
                DrG.1               rJEZjBv27ZHCPAoDtTBJb9r82VnUdkRd77
         | 
| 508 507 | 
             
                DrG.2               rQNFxWVBxnjeF5gaFKwoj5nr3WansCtR19
         | 
| 509 508 | 
             
                UnitClick           rLKojeESeKi9mdBuPLkiQhCxs4wh8iKy2W
         | 
| 509 | 
            +
                UnitClick.1         rJrJuCmNuZ9shGgZvAhM6Xsv8PdghQTokc
         | 
| 510 510 | 
             
                saddambitcoin       rMSEYpzcRtkiA5kkxYEWZtvLr8u3jnn385
         | 
| 511 511 | 
             
                helloworld111       rwGAnUvzT5yrDz6dXxm6MWVhpV9abm39W3
         | 
| 512 512 | 
             
                dykast              rQfwn3GVHVEfTpjqU2Y3BoMGAGHrw43XnT
         | 
| @@ -577,10 +577,25 @@ module Rippler | |
| 577 577 | 
             
                v7znay              rGNNQZo3KXaeC8i33FmbddUk43iRELPkKk
         | 
| 578 578 | 
             
                wannabitcoin        rLubad3VQxaeT6qk43jEGPJX7ADkMBkwTM
         | 
| 579 579 | 
             
                webr3               rnW7DHtmZGJk4uhGTSU2BW3iPCPWb2xegg
         | 
| 580 | 
            +
                webr3.1             rPcu8U9dSsK6nHtqgpeSvjuFTmNGq3arPh
         | 
| 580 581 | 
             
                WikileaksDude       rE7QqUJQWFGu7JZU6E9byysF6Qu5UQjQkP
         | 
| 582 | 
            +
                WikileaksDude.1     r9nzyxxnnmf2Qg8HjKYdwWSN6YJXJtMpQ
         | 
| 581 583 | 
             
                LoweryCBS           rBiYVjzHRQxMDMdC5ynKsejqoy1qJMQ8zR
         | 
| 582 584 | 
             
                ScratAcorns         rEwNm7FWSy4whunsNRCebPbDktjeoGhdbS
         | 
| 583 585 | 
             
                Dreamweaver         rnt5BahXixR8PeBwsYXynN6Ew8MCn87GUn
         | 
| 586 | 
            +
                nomis               rUr7cFcUasrhZ234RZKfKHmQNzM5FPQEHi
         | 
| 587 | 
            +
                alberthrocks        rUaEuoMVzmZNxx3etp8DhEWGD6UeJaoiq4
         | 
| 588 | 
            +
                Xenius              rfaLKpYas7BLsjnbm2dpPDQRKaNbBLGTgs
         | 
| 589 | 
            +
                liamwli             rEvjdo5evfU65J9evHZyHFsEVs4t4Mbfqr
         | 
| 590 | 
            +
                fghj                rHpaEMuN84JR6VT2umSbtSrHJ8JGWyza8f
         | 
| 591 | 
            +
                MasonIII            rsieHiunKBtHr1JXZZvU98erDkG8MD7R2r
         | 
| 592 | 
            +
                macbook-air         rp3dmTa3i1aFY1JwsMKc1WVKJtdj3s6cHc
         | 
| 593 | 
            +
                Dabs                rsAbwKtKaePtmVZhS5H2eT5K4u9UWR7mX5
         | 
| 594 | 
            +
                Liquid              rsuvuGXuWdoRUJXiLQ7z9kyM4tjuXgrZJs
         | 
| 595 | 
            +
                Projects            rsjPEDMnjdcKRJhCDm61YbXPNgJN6tjoPc
         | 
| 596 | 
            +
                Snowpea             rsCmWSczxBpRri57jcMw8duYJETaspFRd9
         | 
| 597 | 
            +
                stick               rQy7ajMPs2WMmMgLTtZtadLxTEvsXDhRF
         | 
| 598 | 
            +
                darkmule            r4VfSDJZNX53TRd6nExAmzsPdX7jbRSHf1
         | 
| 584 599 | 
             
              ]]
         | 
| 585 600 |  | 
| 586 601 | 
             
              Addresses = Contacts.invert
         | 
    
        data/lib/rippler/money.rb
    CHANGED
    
    | @@ -18,13 +18,18 @@ module Rippler | |
| 18 18 | 
             
                    @issuer = data['issuer']
         | 
| 19 19 | 
             
                  when String
         | 
| 20 20 | 
             
                    @value, @currency, @issuer = *data.split('/')
         | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 21 | 
            +
             | 
| 22 | 
            +
                    if @value.to_f == 0 # No value, must be generic currency: XRP or USD/bitstamp
         | 
| 23 | 
            +
                      @currency, @issuer = @value, @currency
         | 
| 23 24 | 
             
                    else
         | 
| 24 | 
            -
                       | 
| 25 | 
            -
             | 
| 25 | 
            +
                      if @currency
         | 
| 26 | 
            +
                        @value = @value.to_f
         | 
| 27 | 
            +
                      else
         | 
| 28 | 
            +
                        @value = @value.to_i/1000000.0
         | 
| 29 | 
            +
                        @currency = "XRP"
         | 
| 30 | 
            +
                      end
         | 
| 26 31 | 
             
                    end
         | 
| 27 | 
            -
                  when  | 
| 32 | 
            +
                  when Integer
         | 
| 28 33 | 
             
                    @value = data.to_i/1000000.0
         | 
| 29 34 | 
             
                    @currency = "XRP"
         | 
| 30 35 | 
             
                  end
         | 
| @@ -44,8 +49,8 @@ module Rippler | |
| 44 49 | 
             
                    [self, cross]
         | 
| 45 50 | 
             
                  end
         | 
| 46 51 | 
             
                  r = first.value.to_f/second.value.to_f
         | 
| 47 | 
            -
                  r = r.to_i == r ? r.to_i : r
         | 
| 48 | 
            -
                  "#{r}#{first.currency}/#{second.currency}"
         | 
| 52 | 
            +
                  r = r.to_i == r ? r.to_i : r.round(2)
         | 
| 53 | 
            +
                  "#{r} #{first.currency}/#{second.currency}"
         | 
| 49 54 | 
             
                end
         | 
| 50 55 |  | 
| 51 56 | 
             
                # Allows methods such as xrp? usd? or btc?
         | 
| @@ -0,0 +1,63 @@ | |
| 1 | 
            +
            module Rippler
         | 
| 2 | 
            +
              class Offer
         | 
| 3 | 
            +
                include Rippler::Utils
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # attr_accessor :address, :balance, :flags
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                # Hash:
         | 
| 8 | 
            +
                # {"Account"=>"rngJ9Co6MPZxJcyepRv2hMPV1HqaeGCdVU",
         | 
| 9 | 
            +
                #   "BookDirectory"=> "4627DFFCFF8B5A265EDBD8AE8C14A52325DBFEDAF4F5C32E5E03DACD3F94D000",
         | 
| 10 | 
            +
                #   "BookNode"=>"0000000000000000",
         | 
| 11 | 
            +
                #   "Flags"=>0,
         | 
| 12 | 
            +
                #   "LedgerEntryType"=>"Offer",
         | 
| 13 | 
            +
                #   "OwnerNode"=>"0000000000000000",
         | 
| 14 | 
            +
                #   "PreviousTxnID"=> "704A6FCC2DD0AEE9B5F420C3641FB86FFE73F4D233E4B9F6A10E5DE79F7DAACF",
         | 
| 15 | 
            +
                #   "PreviousTxnLgrSeq"=>432517,
         | 
| 16 | 
            +
                #   "Sequence"=>191,
         | 
| 17 | 
            +
                # "TakerGets"=>
         | 
| 18 | 
            +
                #   {"currency"=>"USD", "issuer"=>"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", "value"=>"150"},
         | 
| 19 | 
            +
                #  "TakerPays"=>"449850000000",
         | 
| 20 | 
            +
                #  "index"=> "D34C841609A12DAF9DF1B59CA7CB930091A1A16C4A400D8AFDF73311CBB2A2C5",
         | 
| 21 | 
            +
                #  "taker_gets_funded"=>
         | 
| 22 | 
            +
                #   {"currency"=>"USD", "issuer"=>"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", "value"=>"51.73532238374231"},
         | 
| 23 | 
            +
                #  "taker_pays_funded"=>"155154231828"},
         | 
| 24 | 
            +
                def initialize data
         | 
| 25 | 
            +
                  @data = data
         | 
| 26 | 
            +
                  @take
         | 
| 27 | 
            +
                  case data
         | 
| 28 | 
            +
                  when String
         | 
| 29 | 
            +
                    @address = Rippler::Contacts[data] || data
         | 
| 30 | 
            +
                    @name = Rippler::Addresses[@address]
         | 
| 31 | 
            +
                  when Hash
         | 
| 32 | 
            +
                    @address = data["Account"]
         | 
| 33 | 
            +
                    @name = Rippler::Addresses[@address]
         | 
| 34 | 
            +
                    @balance = Money(data["Balance"])
         | 
| 35 | 
            +
                    @flags = data["Flags"]
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def gets
         | 
| 40 | 
            +
                  @get ||= Money(@data['TakerGets'])
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                def pays
         | 
| 44 | 
            +
                  @pay = Money(@data['TakerPays'])
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def account
         | 
| 48 | 
            +
                  @account ||= Account(@data['Account'])
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                def funded
         | 
| 52 | 
            +
                  if @data['taker_gets_funded'] || @data['taker_pays_funded']
         | 
| 53 | 
            +
                    funds = Money(@data['taker_gets_funded'])
         | 
| 54 | 
            +
                    " (#{(funds.value/gets.value*100).round(2)}% funded)"
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def to_s
         | 
| 59 | 
            +
                  "OFR at #{gets.rate(pays)}, #{gets} for #{pays}" +
         | 
| 60 | 
            +
                  "#{funded} by #{account} ##{@data['Sequence']}"
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
            end
         | 
    
        data/lib/rippler/transaction.rb
    CHANGED
    
    | @@ -28,10 +28,7 @@ module Rippler | |
| 28 28 | 
             
                    when "OfferCancel"
         | 
| 29 29 | 
             
                      "CAN #{Account(tx['Account'])} ##{tx['Sequence']}"
         | 
| 30 30 | 
             
                    when "OfferCreate"
         | 
| 31 | 
            -
                       | 
| 32 | 
            -
                      pay = Money(tx['TakerPays'])
         | 
| 33 | 
            -
                      "OFR #{Account(tx['Account'])} ##{tx['Sequence']} offers " +
         | 
| 34 | 
            -
                        "#{get} for #{pay} (#{get.rate(pay)})"
         | 
| 31 | 
            +
                      Offer(tx).to_s
         | 
| 35 32 | 
             
                    when "TrustSet"
         | 
| 36 33 | 
             
                      "TRS #{Money(tx['LimitAmount'])} #{Account(tx['Account'])}"
         | 
| 37 34 | 
             
                    else
         | 
    
        data/lib/rippler/utils.rb
    CHANGED
    
    
    
        data/lib/rippler/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rippler
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.11
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-03- | 
| 12 | 
            +
            date: 2013-03-31 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: faye-websocket
         | 
| @@ -48,6 +48,7 @@ files: | |
| 48 48 | 
             
            - lib/rippler/ledger.rb
         | 
| 49 49 | 
             
            - lib/rippler/line.rb
         | 
| 50 50 | 
             
            - lib/rippler/money.rb
         | 
| 51 | 
            +
            - lib/rippler/offer.rb
         | 
| 51 52 | 
             
            - lib/rippler/transaction.rb
         | 
| 52 53 | 
             
            - lib/rippler/utils.rb
         | 
| 53 54 | 
             
            - lib/rippler/version.rb
         |