Module: StoreAsInt
- Defined in:
- lib/store_as_int.rb,
lib/store_as_int/base.rb,
lib/store_as_int/money.rb,
lib/store_as_int/exchange_rate.rb
Overview
StoreAsInt
Seamlessly Store Decimal Values as Integers!
Defined Under Namespace
Modules: ActsAsExchangeRateInt, ActsAsMoneyInt Classes: Base, ExchangeRate, Money
Class Method Summary collapse
-
.exchange_rate(val) ⇒ Object
Create a new ::ExchangRate.
-
.money(val) ⇒ Object
Create a new ::Money.
-
.register(under_scored_class_name, accuracy = 0, number_of_decimals = 0, symbol_to_use = '', &block) ⇒ Object
Register a new StoreAsInt type.
Class Method Details
.exchange_rate(val) ⇒ Object
Create a new ::ExchangRate
Args
- val
-
value to use with the exchange rate
Examples
er = StoreAsInt.exchange_rate(1.234567890)
OR
er = StoreAsInt.exchange_rate('1.234567890')
OR
er = StoreAsInt.exchange_rate(1234567890)
er.to_s => '1.2345'
er.to_s(true) => '%1.2345'
er.inspect => '%1.2345'
er.to_d => 1.234567890
er.value => 1234567890
26 27 28 |
# File 'lib/store_as_int.rb', line 26 def self.exchange_rate(val) ExchangeRate.new(val) end |
.money(val) ⇒ Object
Create a new ::Money
Args
- val
-
value to use with the money
Examples
er = StoreAsInt.money(1001.23)
OR
er = StoreAsInt.money("1001.23")
OR
er = StoreAsInt.money(100123)
er.to_s => '1001.23'
er.to_s(true) => '$1,001.23'
er.inspect => '$1,001.23'
er.to_d => 1001.23
er.value => 100123
48 49 50 |
# File 'lib/store_as_int.rb', line 48 def self.money(val) Money.new(val) end |
.register(under_scored_class_name, accuracy = 0, number_of_decimals = 0, symbol_to_use = '', &block) ⇒ Object
Register a new StoreAsInt type
Args
- under_scored_class_name
-
@string - method name to use when initializing
- accuracy
-
@integer - power of ten base accuracy when doing conversions
- number_of_decimals
-
@integer - number of decimals to include in to_s method
- symbol_to_use
-
@string - symbol to use in to_s method
- &block
-
@block - override to_s method with a block. called with arguments (self, w_sym) where w_sym is a boolean for whether to include symbol in the returned string
Examples
StoreAsInt.register 'accurate_money', 10000, 2, '$'
am = StoreAsInt::AccurateMoney.new(1.2345)
am.to_s(true) => $1.23
am.value => 12345
StoreAsInt.register 'custom_to_s', 100, 2, '$' do |passed, w_sym|
"CUSTOM_STR #{passed.negative_sign}#{passed.sym}#{sprintf("%0.0#{passed.decimals}f", passed.to_d.abs)}"
end
cts = StoreAsInt.custom_to_s(-1.23)
cts.to_s(true) => CUSTOM_STR -$1.23
cts.to_s => CUSTOM_STR -$1.23
cts.value => -123
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/store_as_int.rb', line 82 def self.register(under_scored_class_name, accuracy = 0, number_of_decimals = 0, symbol_to_use = '', &block) const_name = under_scored_class_name.split('_').map(&:capitalize).join('') begin const_get(const_name) puts "WARNING - #{const_name} Already Registered. Nothing has been done" rescue NameError puts " - Registering StoreAsInt::#{const_name}" const_set const_name, Class.new(StoreAsInt::Base) puts " - Registering local constants for StoreAsInt::#{const_name}" const_get(const_name).const_set 'ACCURACY', (accuracy && accuracy.to_i) || 1 const_get(const_name).const_set 'DECIMALS', number_of_decimals.to_i const_get(const_name).const_set 'SYM', symbol_to_use.to_s const_get(const_name).const_set 'STR_FORMAT', block || nil puts " - Registering shortcut method: StoreAsInt.#{under_scored_class_name}(value)" define_singleton_method under_scored_class_name.to_sym do |val| const_get(const_name).new(val) end puts " - StoreAsInt::#{const_name} registered" end const_get(const_name) end |