Sha256: 6bc1147ccf629d503e50d24deb09a7f4a8d2c6dea1224e77b2563ee1cbe8d550
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
module Percentable class Percent < ::Numeric def initialize(value) @value = value.to_f 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 coerce other method = caller[0].match("`(.+)'")[1].to_sym case other when Numeric case method when :+ [to_f * other, other] when :- [other, to_f * other] else [other, to_f] end else fail TypeError, "#{self.class} can't be coerced into #{other.class}" end 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) when Numeric self.class.new(value * other) 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 self.from_numeric(numeric) case numeric when Numeric Percent.new(numeric*100) else fail TypeError, 'must inherit from Numeric' end end end end Percent = Percentable::Percent
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
percentable-0.1.0 | lib/percentable/percent.rb |