Sha256: 16397f5e08f7a80e38f458d34af4d18a205caaed68f378ccbf79cc336e7d96ca
Contents?: true
Size: 1.48 KB
Versions: 1
Compression:
Stored size: 1.48 KB
Contents
module Percentable class Percent < ::Numeric def initialize(value) if value.is_a? Percent @value = value.value else @value = value.to_f end end def value @value ||= 0.to_f end def to_s '%g%%' % value end def to_f value/100 end def to_i value.to_i end def == other (other.class == self.class && other.value == self.value) || other == self.to_f end def eql? other self.send(:==, other) end def <=> other to_f <=> other.to_f end def * other case other when Percent self.class.new(to_f * other.value) else self.class.new(value * other.to_f) end end [:+, :-, :/].each do |operator| define_method operator do |other| case other when Percent self.class.new(value.public_send(operator, other.value)) when Numeric self.class.new(value.public_send(operator, other)) end end end def to_percent self end def self.from_numeric(numeric) case numeric when Numeric Percent.new(numeric*100) else fail TypeError, 'must inherit from Numeric' end end def coerce other case other when Numeric [CoercedPercent.new(self), other] else fail TypeError, "#{self.class} can't be coerced into #{other.class}" end end end end Percent = Percentable::Percent
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
percentable-1.0.1 | lib/percentable/percent.rb |