update number_formattable

This commit is contained in:
Thein Lin Kyaw
2019-11-28 19:25:52 +06:30
parent 3c5755a028
commit 5b88d16485
2 changed files with 33 additions and 28 deletions

View File

@@ -2,44 +2,50 @@ module NumberFormattable
extend ActiveSupport::Concern
def precision
@precision ||= Lookup.number_formats.find { |f| f.name.parameterize.underscore == 'precision'}
return @precision if defined? @precision
@number_formats = Lookup.number_formats if !defined? @number_formats
if @number_formats
@precision = @number_formats.find? { |x| x.name.parameterize.underscore == 'precision'}.value.to_i rescue nil
end
if @precision.nil?
@print_settings ||= PrintSetting.get_precision_delimiter
@print_settings = PrintSetting.get_precision_delimiter if !defined? @number_formats
if @print_settings
@precision = OpenStruct.new(value: @print_settings.precision.to_i)
@precision = @print_settings.precision.to_i
else
@precision = OpenStruct.new(value: 2)
@precision = 2
end
end
@precison_value ||= @precision.value.to_i
end
def delimiter
@delimiter ||= Lookup.number_formats.find { |f| f.name.parameterize.underscore == 'delimiter'}
return @delimiter if defined? @delimiter
@number_formats = Lookup.number_formats if !defined? @number_formats
if @number_formats
@delimiter = @number_formats.find { |f| f.name.parameterize.underscore == 'delimiter'}.value.gsub(/\\u(\h{4})/) { |m| [$1].pack("H*").unpack("n*").pack("U*") } rescue nil
end
if @delimiter.nil?
@print_settings ||= PrintSetting.get_precision_delimiter
@print_settings = PrintSetting.get_precision_delimiter if !defined? @number_formats
if @print_settings && @print_settings.delimiter
@delimiter = OpenStruct.new(value: ",")
@delimiter = ","
else
@delimiter = OpenStruct.new(value: "")
@delimiter = ","
end
end
@delimiter_value ||= @delimiter.value.to_s.gsub(/\\u(\h{4})/) { |m| [$1].pack("H*").unpack("n*").pack("U*") }
end
def strip_insignificant_zeros
@strip_insignificant_zeros ||= Lookup.number_formats.find { |f| f.name.parameterize.underscore == 'strip_insignificant_zeros'}
if @strip_insignificant_zeros.nil?
@strip_insignificant_zeros = OpenStruct.new(value: false)
return @strip_insignificant_zeros if defined? @strip_insignificant_zeros
@number_formats = Lookup.number_formats if !defined? @number_formats
if @number_formats
@strip_insignificant_zeros = @number_formats.find { |f| f.name.parameterize.underscore == 'strip_insignificant_zeros'}.value.in? ['1', 't', 'true', 'on', 'y', 'yes'] rescue false
end
@strip_insignificant_zeros_value ||= ['1', 't', 'true', 'on', 'y', 'yes'].include? @strip_insignificant_zeros.value.to_s
end
def number_format(number, options = {})
options[:precision] = options[:precision] || precision
# options[:delimiter] = options[:delimiter] || delimiter
options[:strip_insignificant_zeros] = options[:strip_insignificant_zeros] || strip_insignificant_zeros
if options[:precision] > 0
if options[:strip_insignificant_zeros]
formatted = "%.12g" % number.round(options[:precision])