nano_rpc 0.11.0 → 0.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19d46c77ad8cab903761e7d507889dfc7e4f446df62f88c9fb4dfbf505f332cc
4
- data.tar.gz: f8d400e69bb56c02c9d7ada64fe7dd023a58c24d0c64f99f46e5f3a9211b6c8a
3
+ metadata.gz: 06caeedce48a1cc0e468ca6f0cc98be0f452759601dfb75d4c706da2685a13d3
4
+ data.tar.gz: 1293ed07fb6fa65c46d775c950c3c411e8c7d656ba8d8258d179ce69a06a8824
5
5
  SHA512:
6
- metadata.gz: 1b854f7dec81c5f8d5744f57a45f0e5517ba9dffc5d03d5f4acbb9b46a308415f5eb17be22bd245aa3744c42d39b339d391446a204c8d434b1a650d2eb5ef42b
7
- data.tar.gz: 17ffae12a7599c097a46554355af5fb6c6b589308668ac2ebb7922bb16f37238b3b1bfc28abf96600cefccbac2c610d4b3e5713e616544f91586f78875732f02
6
+ metadata.gz: a5f1ed287ecf01ecade72a3f111dcc68c1e4ce03826632286c675d3621c566199265b07cdb209c9abf9bdc033c45a294524b9fe7e3487015972f31ea50d63f27
7
+ data.tar.gz: 8556558303db38de3e60f4d8f58297c8f80050039f80ad147daa2b64f02c4339cf25d0278a5014d274541fc51e14373e70da13aba50d024095605e8149de0304
data/README.md CHANGED
@@ -113,6 +113,16 @@ account.pending_balance
113
113
  # => 5
114
114
  ```
115
115
 
116
+ To convert from Nano to raw and back, use `#to_raw` and `#to_nano`, available on all `Numeric` objects:
117
+
118
+ ```ruby
119
+ 4622800482000000000000000000000000.to_nano
120
+ # => 4622.800482
121
+
122
+ 4622.800482.to_raw
123
+ # => 4622800482000000000000000000000000
124
+ ```
125
+
116
126
  For a comprehensive guide, see the [Wiki](https://github.com/jcraigk/ruby_nano_rpc/wiki).
117
127
 
118
128
  ## Credits
@@ -2,10 +2,12 @@
2
2
  module NanoRpc
3
3
  class Error < StandardError; end
4
4
 
5
- class NodeConnectionFailure < Error; end
6
5
  class BadRequest < Error; end
7
- class InvalidRequest < Error; end
8
6
  class ForbiddenParameter < Error; end
7
+ class InvalidNanoAmount < Error; end
8
+ class InvalidRawAmount < Error; end
9
+ class InvalidRequest < Error; end
9
10
  class MissingParameters < Error; end
11
+ class NodeConnectionFailure < Error; end
10
12
  class NodeOpenTimeout < Error; end
11
13
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+ module NanoRpc
3
+ RAW_FACTOR = 30
4
+ RAW_PRECISION = 6
5
+
6
+ module NanoToRaw
7
+ def to_raw
8
+ ensure_valid_nano_amount!
9
+ (self * 10**RAW_PRECISION).floor *
10
+ 10**(RAW_FACTOR - RAW_PRECISION)
11
+ end
12
+
13
+ private
14
+
15
+ def ensure_valid_nano_amount!
16
+ raise NanoRpc::InvalidNanoAmount unless valid_nano_amount?
17
+ end
18
+
19
+ # 133,248,290 total nano in circulation
20
+ def valid_nano_amount?
21
+ self <= 133_248_290
22
+ end
23
+ end
24
+
25
+ module RawToNano
26
+ def to_nano
27
+ ensure_valid_raw_amount!
28
+ (to_f / 10**RAW_FACTOR).round(RAW_PRECISION)
29
+ end
30
+
31
+ private
32
+
33
+ def ensure_valid_raw_amount!
34
+ raise NanoRpc::InvalidRawAmount unless valid_raw_amount?
35
+ end
36
+
37
+ # Ensure at least 10^23
38
+ def valid_raw_amount?
39
+ self >= 100_000_000_000_000_000_000_000
40
+ end
41
+ end
42
+ end
43
+
44
+ class Numeric
45
+ include NanoRpc::NanoToRaw
46
+ include NanoRpc::RawToNano
47
+ end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module NanoRpc
3
- VERSION = '0.11.0'
3
+ VERSION = '0.12.0'
4
4
  end
data/lib/nano_rpc.rb CHANGED
@@ -11,6 +11,7 @@ require 'nano_rpc/proxy'
11
11
  require 'nano_rpc/node'
12
12
  require 'nano_rpc/errors'
13
13
  require 'nano_rpc/response'
14
+ require 'nano_rpc/numeric'
14
15
  require 'nano_rpc/proxies/account'
15
16
  require 'nano_rpc/proxies/accounts'
16
17
  require 'nano_rpc/proxies/wallet'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nano_rpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Craig-Kuhn (JCK)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-03 00:00:00.000000000 Z
11
+ date: 2018-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -173,6 +173,7 @@ files:
173
173
  - lib/nano_rpc/helpers/node_helper.rb
174
174
  - lib/nano_rpc/helpers/wallet_helper.rb
175
175
  - lib/nano_rpc/node.rb
176
+ - lib/nano_rpc/numeric.rb
176
177
  - lib/nano_rpc/proxies/account.rb
177
178
  - lib/nano_rpc/proxies/accounts.rb
178
179
  - lib/nano_rpc/proxies/wallet.rb