Sha256: 5e83e8f58ab73fc8ee222f5098f2fce4507b936544c2985aae04d1ed9b21f24a

Contents?: true

Size: 1.58 KB

Versions: 4

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

4 entries across 4 versions & 1 rubygems

Version Path
ore-0.2.2 lib/ore/template/interpolations.rb
ore-0.2.1 lib/ore/template/interpolations.rb
ore-0.2.0 lib/ore/template/interpolations.rb
ore-0.1.4 lib/ore/template/interpolations.rb