module Mkdirs
Constants
- Spec
- VERSION
Public Class Methods
apply(yml, root_dir, verbose = true)
click to toggle source
# File lib/mkdirs.rb, line 16 def self.apply(yml, root_dir, verbose = true) specs = load(yml) specs.each do |spec| path = File.join(root_dir, spec.path) dir = File.dirname(path) unless File.exists?(dir) puts "mkdir -p #{dir}".colorize(:green) if verbose mkdir_p(dir) end if spec.cmd if not File.exists?(path) Dir.chdir(dir) do puts spec.cmd.colorize(:green) if verbose system(spec.cmd) exit($?.exitstatus) if $?.exitstatus != 0 end end else puts "mkdir -p #{path}".colorize(:green) if verbose mkdir_p(path) end end end
apply_filename(filename, root_dir)
click to toggle source
# File lib/mkdirs.rb, line 12 def self.apply_filename(filename, root_dir) apply(File.read(filename), root_dir) end
load(yml)
click to toggle source
# File lib/mkdirs.rb, line 40 def self.load(yml) dirs = YAML.load(yml) flatten(dirs) end
Private Class Methods
flatten(o, path = "")
click to toggle source
Take a hash
{a: {b: {x: 'foo', y: 'bar'}}}
and convert it to an array:
[ Spec('a/b/x', 'foo'), Spec('a/b/y', 'bar') ]
# File lib/mkdirs.rb, line 53 def self.flatten(o, path = "") return Spec.new(path, o) unless o.kind_of?(Hash) o.map do |segment, value| flatten(value, File.join(path, segment)) end.flatten end