module Ore::Naming
Provides methods for guessing the namespaces and directories of projects. {Naming} uses the naming conventions of project names defined by the [Ruby Packaging Standard (RPS)](chneukirchen.github.com/rps/).
@since 0.9.0
Constants
- BIN_DIR
The directory which contains executables for a project
- COMMON_ABBREVIATIONS
Common abbrevations used in namespaces
- COMMON_NAMESPACES
Common project prefixes and namespaces
- DATA_DIR
The directory which contains data files for a project
- EXT_DIR
The directory which contains C extension code for a project
- IGNORE_NAMESPACES
Words used in project names, but never in directory names
- LIB_DIR
The directory which contains the code for a project
- PKG_DIR
The directory which contains built packages
- SPEC_DIR
The directory which contains spec-tests for a project
- TEST_DIR
The directory which contains unit-tests for a project
Public Instance Methods
Guesses the module name for a word within a project name.
@param [String] word
The word within a project name.
@return [String]
The module name.
@since 0.1.1
# File lib/ore/naming.rb, line 74 def module_of(word) if COMMON_NAMESPACES.has_key?(word) COMMON_NAMESPACES[word] elsif COMMON_ABBREVIATIONS.has_key?(word) COMMON_ABBREVIATIONS[word] else word.capitalize end end
Guesses the module names from a project name.
@param [String] name
The name of the project.
@return [Array<String>]
The module names for a project.
# File lib/ore/naming.rb, line 93 def modules_of(name) names_in(name).map do |words| words.split('_').map { |word| module_of(word) }.join end end
Splits the project name into individual names.
@param [String] name
The name to split.
@return [Array<String>]
The individual names of the project name.
# File lib/ore/naming.rb, line 57 def names_in(name) name.split('-').reject do |word| IGNORE_NAMESPACES.include?(word) end end
Guesses the namespace directories within ‘lib/` for a project.
@param [String] name
The name of the project.
@return [Array<String>]
The namespace directories for the project.
# File lib/ore/naming.rb, line 136 def namespace_dirs_of(name) names_in(name).map { |word| underscore(word) } end
Guesses the full namespace for a project.
@param [String] name
The name of the project.
@return [String]
The full module namespace for a project.
# File lib/ore/naming.rb, line 108 def namespace_of(name) modules_of(name).join('::') end
Guesses the namespace directory within ‘lib/` for a project.
@param [String] name
The name of the project.
@return [String]
The namespace directory for the project.
# File lib/ore/naming.rb, line 149 def namespace_path_of(name) File.join(namespace_dirs_of(name)) end
Converts a camel-case name to an underscored file name.
@param [String] name
The name to underscore.
@return [String]
The underscored version of the name.
# File lib/ore/naming.rb, line 121 def underscore(name) name.gsub(/[^A-Z_][A-Z][^A-Z_]/) { |cap| cap[0,1] + '_' + cap[1..-1] }.downcase end