Sha256: b7c82ea5cc392d1f502c35961adecded8a8e9376c161c20eb9324c5298112263

Contents?: true

Size: 1.41 KB

Versions: 8

Compression:

Stored size: 1.41 KB

Contents

module Vedeu

  # Take a collection of words (elements) and form a sentence from them.
  #
  # @example
  #   elements = ['Hydrogen', 'Helium', 'Lithium']
  #   Vedeu::Sentence.construct(elements) # => 'Hydrogen, Helium and Lithium'
  #
  class Sentence

    class << self

      # @param elements [Array]
      # @param label [String]
      # @return [String]
      def construct(elements, label = 'elements')
        new(elements, label).construct
      end

    end

    # @param elements [Array]
    # @param label [String]
    # @return [Vedeu::Sentence]
    def initialize(elements, label)
      @elements, @label = elements, label
    end

    # @return [String]
    def construct
      if one?
        first

      elsif two?
        elements.join(' and ')

      elsif many?
        [but_last, last].join(' and ')

      else
        "No #{label} have been assigned."

      end
    end

    private

    attr_reader :elements, :label

    # @return [Boolean]
    def one?
      count == 1
    end

    # @return [Boolean]
    def two?
      count == 2
    end

    # @return [Boolean]
    def many?
      count > 2
    end

    # @return [String]
    def but_last
      elements[0...-1].join(', ')
    end

    # @return [String]
    def first
      elements.first
    end

    # @return [String]
    def last
      elements[-1]
    end

    # @return [Fixnum]
    def count
      elements.size
    end

  end # Sentence

end # Vedeu

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
vedeu-0.4.2 lib/vedeu/support/sentence.rb
vedeu-0.4.1 lib/vedeu/support/sentence.rb
vedeu-0.4.0 lib/vedeu/support/sentence.rb
vedeu-0.3.5 lib/vedeu/support/sentence.rb
vedeu-0.3.4 lib/vedeu/support/sentence.rb
vedeu-0.3.3 lib/vedeu/support/sentence.rb
vedeu-0.3.2 lib/vedeu/support/sentence.rb
vedeu-0.3.1 lib/vedeu/support/sentence.rb