class Crease::Builder
Public Class Methods
new(before: nil, subject: nil, after: nil, args: [], percent: false, tense: nil)
click to toggle source
# File lib/crease/builder.rb, line 4 def initialize(before: nil, subject: nil, after: nil, args: [], percent: false, tense: nil) @before = before @subject = subject @after = after @args = args @percent = percent @tense = tense self end
Public Instance Methods
by(*args, sigfig: 2)
click to toggle source
# File lib/crease/builder.rb, line 27 def by(*args, sigfig: 2) @after = :by @args = args.map(&:to_f) @sigfig = sigfig self end
change()
click to toggle source
# File lib/crease/builder.rb, line 22 def change @subject = :change self end
increase()
click to toggle source
# File lib/crease/builder.rb, line 15 def increase @tense = :present self end
Also aliased as: decrease
of(*args, sigfig: 2)
click to toggle source
# File lib/crease/builder.rb, line 34 def of(*args, sigfig: 2) @after = :of @args = args.map(&:to_f) @sigfig = sigfig self end
percent()
click to toggle source
# File lib/crease/builder.rb, line 49 def percent @percent = true self end
to_s()
click to toggle source
# File lib/crease/builder.rb, line 41 def to_s if @percent "#{phrase} #{percent_value}%" else "#{phrase} #{value}" end end
Private Instance Methods
after()
click to toggle source
# File lib/crease/builder.rb, line 79 def after @after end
apply_filters(number)
click to toggle source
# File lib/crease/builder.rb, line 135 def apply_filters(number) if Crease.configuration.integer number.to_i else number.round(@sigfig || Crease.configuration.digits) end end
article()
click to toggle source
# File lib/crease/builder.rb, line 60 def article if @before indefinitize(subject) end end
difference()
click to toggle source
# File lib/crease/builder.rb, line 127 def difference if @args.count == 2 (@args.last - @args.first) else @args.first end end
increase_or_decrease()
click to toggle source
# File lib/crease/builder.rb, line 91 def increase_or_decrease if @args.count == 2 @args.last > @args.first ? 'increase' : 'decrease' else @args.first > 0 ? 'increase' : 'decrease' end end
indefinitize(subject)
click to toggle source
# File lib/crease/builder.rb, line 83 def indefinitize(subject) if subject.match /increase/ 'an' elsif subject.match /decrease|change/ 'a' end end
percent_change()
click to toggle source
# File lib/crease/builder.rb, line 115 def percent_change if @args.count == 2 if @args.last > @args.first (@args.last / @args.first).to_f * 100 else ((@args.first - @args.last) / @args.last).to_f * -100 end else @args.first end end
percent_difference()
click to toggle source
# File lib/crease/builder.rb, line 107 def percent_difference if @args.count == 2 (difference / @args.first).to_f * 100 else @args.first end end
percent_value()
click to toggle source
# File lib/crease/builder.rb, line 103 def percent_value apply_filters(@subject.to_s == 'change' ? percent_change : percent_difference.abs) end
phrase()
click to toggle source
# File lib/crease/builder.rb, line 56 def phrase "#{article} #{subject} #{after}".strip end
subject()
click to toggle source
# File lib/crease/builder.rb, line 66 def subject # increase, decrease, or change word = if @subject.to_s == 'change' word = 'change' else increase_or_decrease end if @tense.to_s == 'past' word << 'd' else word end end
value()
click to toggle source
# File lib/crease/builder.rb, line 99 def value apply_filters(@subject.to_s == 'change' ? difference : difference.abs) end