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