Sha256: 9c5b7d4c09b2e9a18b3de3ea9b37a9497e8203c148a8e6b4b0f470f96e0ee465

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

require 'skippy/error'

class Skippy::Namespace

  def initialize(namespace)
    unless valid?(namespace)
      raise Skippy::Error, "'#{namespace}' is not a valid Ruby namespace"
    end
    @namespace = namespace
  end

  def basename
    to_a.last
  end

  def open
    @open ||= to_a.map { |part| "module #{part}" }.join("\n")
  end

  def close
    @close ||= to_a.reverse.map { |part| "end # module #{part}" }.join("\n")
  end

  def to_a
    parts(@namespace)
  end

  def to_name
    basename_words(basename).join(' ')
  end

  def to_s
    @namespace.dup
  end

  def to_str
    to_s
  end

  def to_underscore
    basename_words(basename).map { |word| word.downcase }.join('_')
  end

  private

  def basename_words(namespace_basename)
    result = namespace_basename.scan(/[[:upper:]]+[[:lower:][:digit:]]*/)
    result.empty? ? [namespace_basename.dup] : result
  end

  def parts(namespace)
    namespace.split('::')
  end

  def valid?(namespace)
    parts(namespace).all? { |part| /^[[:upper:]]/.match(part) }
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
skippy-0.2.0.a lib/skippy/namespace.rb