Sha256: bf2887357d56d5f16340a90d11ab9360ed459676b132e872fd670e4ef8355912

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

module GalaxyConverter
  class Note
    PREFIXES = ["how much is", "how many credits is"]
    QUESTION = "?"
    NO_IDEA = "I have no idea what you are talking about"

    def self.from(notes)
      Array(notes).map do |body| 
        klass = body.index(/credits/i) ? Credit : Note
        klass.new(body)
      end
    end

    attr_reader :body, :units, :good

    def initialize(body)
      @body = body.to_s.strip.downcase
      @units, @good = detect
    end

    def question?
      @body.end_with?(QUESTION)
    end

    def answer(total = 0)
      return NO_IDEA if total.zero?
      [].tap do |s|
        s << units
        s << good.to_s.capitalize
        s << "is"
        s << "%g" % total
      end.reject(&:empty?).join(" ")
    end

    private def detect
      return stripped, nil
    end

    private def stripped
      @body.sub(/#{PREFIXES.join("|")}/, "").sub(QUESTION, "").strip
    end
  end

  class Credit < Note
    def answer(total = 0)
      s = super
      s << " Credits"
    end

    private def detect
      tokens = stripped.split
      good = tokens.pop
      [tokens.join(" "), good]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
galaxy_converter-3.1.1 lib/galaxy_converter/note.rb