class Pineapples::Actions::Directory

Attributes

source[R]

Public Class Methods

new(generator, source, target, options, &block) click to toggle source
Calls superclass method
# File lib/pineapples/actions/directory.rb, line 52
def initialize(generator, source, target, options, &block)
  super(generator, target, {recursive: true}.merge(options))

  @source = File.expand_path(generator.find_in_source_paths(source.to_s))
  @block  = block
end

Public Instance Methods

invoke!() click to toggle source
# File lib/pineapples/actions/directory.rb, line 59
def invoke!
  generator.empty_directory(target.given, options)
  execute!
end
revoke!() click to toggle source
# File lib/pineapples/actions/directory.rb, line 64
def revoke!
  execute!
end

Protected Instance Methods

escape_globs(path) click to toggle source
# File lib/pineapples/actions/directory.rb, line 109
def escape_globs(path)
  path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
end
execute!() click to toggle source
# File lib/pineapples/actions/directory.rb, line 70
def execute!
  lookup = escape_globs(source)
  lookup = options[:recursive] ? File.join(lookup, '**') : lookup
  lookup = file_level_lookup(lookup)

  excluded_files = Array(options[:exclude])
  exclude_pattern = options[:exclude_pattern]

  files(lookup).sort.each do |file_source|
    next if File.directory?(file_source)
    next if exclude_pattern && file_source.match(exclude_pattern)
    next if excluded_files.any? do |excluded_file|
      File.basename(excluded_file) == File.basename(file_source)
    end

    file_target = File.join(target.given, file_source.gsub(source, '.'))
    file_target.gsub!('/./', '/')

    case file_source
    when /\.empty_directory$/
      dirname = File.dirname(file_target).gsub(/\/\.$/, '')
      next if dirname == target.given
      generator.empty_directory(dirname, options)
    when /#{TEMPLATE_EXTNAME}$/
      generator.template(file_source, file_target[0..-4], options, &@block)
    else
      generator.copy_file(file_source, file_target, options, &@block)
    end
  end
end
file_level_lookup(previous_lookup) click to toggle source
# File lib/pineapples/actions/directory.rb, line 101
def file_level_lookup(previous_lookup)
  File.join(previous_lookup, '*')
end
files(lookup) click to toggle source
# File lib/pineapples/actions/directory.rb, line 105
def files(lookup)
  Dir.glob(lookup, File::FNM_DOTMATCH)
end