Sha256: a3c8b08bcf5688608f2be66864774b49dcb917d75a32a37b26bf7842fa3d0485

Contents?: true

Size: 1.58 KB

Versions: 2

Compression:

Stored size: 1.58 KB

Contents

module Ore
  module Template
    #
    # Handles the expansion of paths and substitution of path keywords.
    # The following keywords are supported:
    #
    # * `[name]` - The name of the project.
    # * `[project_dir]` - The directory base-name derived from the project
    #   name.
    # * `[namespace_dir]` - The full directory path derived from the
    #   project name.
    #
    module Interpolations
      # The accepted interpolation keywords that may be used in paths
      @@keywords = %w[
        name
        project_dir
        namespace_dir
      ]

      protected

      #
      # Expands the given path by substituting the interpolation keywords
      # for the related instance variables.
      #
      # @param [String] path
      #   The path to expand.
      #
      # @return [String]
      #   The expanded path.
      #
      # @example Assuming `@project_dir` contains `my_project`.
      #   interpolate("lib/[project_dir].rb")
      #   # => "lib/my_project.rb"
      #
      # @example Assuming `@namespace_dir` contains `my/project`.
      #   interpolate("spec/[namespace_dir]_spec.rb")
      #   # => "spec/my/project_spec.rb"
      #
      def interpolate(path)
        dirs = path.split(File::SEPARATOR)

        dirs.each do |dir|
          dir.gsub!(/(\[[a-z_]+\])/) do |capture|
            keyword = capture[1..-2]

            if @@keywords.include?(keyword)
              instance_variable_get("@#{keyword}")
            else
              capture
            end
          end
        end

        return File.join(dirs.reject { |dir| dir.empty? })
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ore-0.3.0 lib/ore/template/interpolations.rb
ore-0.2.3 lib/ore/template/interpolations.rb