Class: TonSdkRuby::Coins

Inherits:
Object
  • Object
show all
Extended by:
TonSdkRuby
Includes:
TonSdkRuby
Defined in:
lib/ton-sdk-ruby/types/coins.rb

Constant Summary

Constants included from TonSdkRuby

DEPTH_BITS, FLAG_BOUNCEABLE, FLAG_NON_BOUNCEABLE, FLAG_TEST_ONLY, HASH_BITS, INT32_MAX, INT32_MIN, LEAN_BOC_MAGIC_PREFIX, LEAN_BOC_MAGIC_PREFIX_CRC, REACH_BOC_MAGIC_PREFIX, VERSION

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from TonSdkRuby

augment, base64_to_bytes, bits_to_big_int, bits_to_big_uint, bits_to_bytes, bits_to_hex, bits_to_int_uint, breadth_first_sort, bytes_compare, bytes_needed_for_words_bip39, bytes_to_base64, bytes_to_bits, bytes_to_data_string, bytes_to_hex, bytes_to_string, bytes_to_uint, crc16, crc16_bytes_be, crc32c, crc32c_bytes_le, depth_first_sort, deserialize, deserialize_cell, deserialize_fift, deserialize_header, generate_words_bip39, get_mapper, hex_to_bits, hex_to_bytes, hex_to_data_string, read_json_from_link, read_post_json_from_link, require_type, rollback, serialize, serialize_cell, sha256, sha512, sign_cell, slice_into_chunks, string_to_bytes, uint_to_hex, validate_library_reference, validate_merkle_proof, validate_merkle_update, validate_ordinary, validate_pruned_branch

Constructor Details

#initialize(value, options = {}) ⇒ Coins

Returns a new instance of Coins.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/ton-sdk-ruby/types/coins.rb', line 11

def initialize(value, options = {})
  is_nano = options[:is_nano] || false
  decimals = options[:decimals] || 9

  value = value.to_s
  Coins.check_coins_type(value)
  Coins.check_coins_decimals(decimals)

  decimal = BigDecimal(value)

  if decimal.dp > decimals
    raise "Invalid Coins value, decimals places \"#{decimal.dp}\" can't be greater than selected \"#{decimals}\""
  end

  @decimals = decimals
  @multiplier = (1 * 10) ** @decimals
  @value = is_nano ? decimal : decimal * @multiplier
end

Instance Attribute Details

#decimalsObject (readonly)

Returns the value of attribute decimals.



9
10
11
# File 'lib/ton-sdk-ruby/types/coins.rb', line 9

def decimals
  @decimals
end

#multiplierObject (readonly)

Returns the value of attribute multiplier.



9
10
11
# File 'lib/ton-sdk-ruby/types/coins.rb', line 9

def multiplier
  @multiplier
end

#valueObject (readonly)

Returns the value of attribute value.



9
10
11
# File 'lib/ton-sdk-ruby/types/coins.rb', line 9

def value
  @value
end

Class Method Details

.from_nano(value, decimals = 9) ⇒ Object



30
31
32
33
34
35
# File 'lib/ton-sdk-ruby/types/coins.rb', line 30

def self.from_nano(value, decimals = 9)
  check_coins_type(value)
  check_coins_decimals(decimals)

  Coins.new(value, is_nano: true, decimals: decimals)
end

Instance Method Details

#add(coins) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/ton-sdk-ruby/types/coins.rb', line 37

def add(coins)
  Coins.check_coins(coins)
  Coins.compare_coins_decimals(self, coins)

  @value += coins.value

  self
end

#div(value) ⇒ Object



66
67
68
69
70
71
72
73
74
75
# File 'lib/ton-sdk-ruby/types/coins.rb', line 66

def div(value)
  Coins.check_value(value)
  Coins.check_convertibility(value)

  divider = value.to_s

  @value /= divider.to_i

  self
end

#eq(coins) ⇒ Object



77
78
79
80
81
82
# File 'lib/ton-sdk-ruby/types/coins.rb', line 77

def eq(coins)
  Coins.check_coins(coins)
  Coins.compare_coins_decimals(self, coins)

  @value == coins.value
end

#gt(coins) ⇒ Object



84
85
86
87
88
89
# File 'lib/ton-sdk-ruby/types/coins.rb', line 84

def gt(coins)
  Coins.check_coins(coins)
  Coins.compare_coins_decimals(self, coins)

  @value > coins.value
end

#gte(coins) ⇒ Object



91
92
93
94
95
96
# File 'lib/ton-sdk-ruby/types/coins.rb', line 91

def gte(coins)
  Coins.check_coins(coins)
  Coins.compare_coins_decimals(self, coins)

  @value >= coins.value
end

#lt(coins) ⇒ Object



98
99
100
101
102
103
# File 'lib/ton-sdk-ruby/types/coins.rb', line 98

def lt(coins)
  Coins.check_coins(coins)
  Coins.compare_coins_decimals(self, coins)

  @value < coins.value
end

#lte(coins) ⇒ Object



105
106
107
108
109
110
# File 'lib/ton-sdk-ruby/types/coins.rb', line 105

def lte(coins)
  Coins.check_coins(coins)
  Coins.compare_coins_decimals(self, coins)

  @value <= coins.value
end

#mul(value) ⇒ Object



55
56
57
58
59
60
61
62
63
64
# File 'lib/ton-sdk-ruby/types/coins.rb', line 55

def mul(value)
  Coins.check_value(value)
  Coins.check_convertability(value)

  multiplier = value.to_s

  @value *= multiplier.to_i

  self
end

#negative?Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/ton-sdk-ruby/types/coins.rb', line 112

def negative?
  @value.negative?
end

#positive?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/ton-sdk-ruby/types/coins.rb', line 116

def positive?
  @value.positive?
end

#sub(coins) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/ton-sdk-ruby/types/coins.rb', line 46

def sub(coins)
  Coins.check_coins(coins)
  Coins.compare_coins_decimals(self, coins)

  @value -= coins.value

  self
end

#to_nanoObject



133
134
135
# File 'lib/ton-sdk-ruby/types/coins.rb', line 133

def to_nano
  @value.to_i
end

#to_sObject



124
125
126
127
128
129
130
131
# File 'lib/ton-sdk-ruby/types/coins.rb', line 124

def to_s
  value = (@value / @multiplier.to_f).round(@decimals).to_s

  # Remove all trailing zeroes
  coins = value.sub(/\.0{#{@decimals}}$/, '').sub(/(\.[0-9]*?[0-9])0+$/, '\1')

  coins
end

#zero?Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/ton-sdk-ruby/types/coins.rb', line 120

def zero?
  @value.zero?
end