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
decrease()
Alias for: increase
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