Sha256: bba721a9d6cfcd676ac19edc00c0d4f36329064a532e4352215ed257a9d174cd

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

class Percent < Numeric
  attr_reader :value

  def initialize(object)
    @value = object
  end

  def f_percent(options={})
    options.reverse_merge! decimal_format: ',', symbol: true

    val = sprintf("%0.03f", @value).gsub('.', options[:decimal_format])
    val = case
      when val[-3,3] == '000' then val[0..-5]
      when val[-1,1] == '0' then val[0..-2]
      else val
    end

    val += '%' if options[:symbol]

    return val
  end

  def mongoize
    @value.to_s.rjust(10, '0')
  end

  def percent
    @value.to_f
  end

  class << self
    def demongoize(object)
      self.new(object.to_f / 1000)
    end

    def evolve(object)
      object.mongoize
    end

    def mongoize(object)
      case object
        when Percent then object.mongoize
        else Percent.new_from_string(object).mongoize
      end
    end

    def new_from_mongo(object)
      Numeric(object.to_f / 1000)
    end

    def new_from_string(object)
      begin
        val = (object.to_s.gsub(',', '.').gsub('%', '').to_f * 1000).to_i
      rescue
        val = 0
      end

      self.new val
    end
  end
end

class Numeric
  def percent
    Percent.new (self * 1000).to_i
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
caisson-0.0.3 lib/caisson/implants/mongoid.rb
caisson-0.0.2 lib/caisson/implants/mongoid.rb