class JsonTableSchema::Types::Number
Public Class Methods
supported_constraints()
click to toggle source
# File lib/jsontableschema/types/number.rb, line 9 def self.supported_constraints [ 'required', 'pattern', 'enum', 'minimum', 'maximum', ] end
Public Instance Methods
cast_currency(value)
click to toggle source
# File lib/jsontableschema/types/number.rb, line 37 def cast_currency(value) cast_default(value) rescue JsonTableSchema::InvalidCast value = preprocess_value(value) re = Regexp.new currency_symbols.join('|') value.gsub!(re, '') cast_default(value) end
cast_default(value)
click to toggle source
# File lib/jsontableschema/types/number.rb, line 27 def cast_default(value) return value if value.class == type return Float(value) if value.class == ::Fixnum value = preprocess_value(value) return Float(value) rescue ArgumentError raise JsonTableSchema::InvalidCast.new("#{value} is not a #{name}") end
currency_symbols()
click to toggle source
# File lib/jsontableschema/types/number.rb, line 23 def currency_symbols ISO4217::Currency.currencies.to_a.map { |c| Regexp.escape(c.last.symbol) rescue nil }.delete_if { |s| s.nil? } end
name()
click to toggle source
# File lib/jsontableschema/types/number.rb, line 5 def name 'number' end
type()
click to toggle source
# File lib/jsontableschema/types/number.rb, line 19 def type ::Float end
Private Instance Methods
preprocess_value(value)
click to toggle source
# File lib/jsontableschema/types/number.rb, line 48 def preprocess_value(value) group_char = @field.fetch('groupChar', ',') decimal_char = @field.fetch('decimalChar', '.') percent_char = /%|‰|‱|%|﹪|٪/ value.gsub(group_char, '') .gsub(decimal_char, '.') .gsub(percent_char, '') .gsub(Regexp.new(currency_symbols.join '|'), '') end