Module: Retrospec::Plugins::V1::ModuleHelpers

Included in:
Config, Plugin
Defined in:
lib/retrospec/plugins/v1/module_helpers.rb

Instance Method Summary collapse

Instance Method Details

#default_retrospec_dirObject

the directory where the config, repos, and other info are saved



85
86
87
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 85

def default_retrospec_dir
  File.expand_path(File.join(ENV['HOME'], '.retrospec' ))
end

#retrospec_repos_dirObject



89
90
91
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 89

def retrospec_repos_dir
  File.join(default_retrospec_dir, 'repos')
end

#safe_copy_file(src, dest) ⇒ Object

safely copy and existing file to another dest



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 41

def safe_copy_file(src, dest)
  if File.exists?(dest) and not File.zero?(dest)
    $stderr.puts "!! #{dest} already exists".warning
  else
    if not File.exists?(src)
      safe_touch(src)
    else
      safe_mkdir(File.dirname(dest))
      FileUtils.cp(src,dest)
    end
    puts " + #{dest}".info
  end
end

#safe_create_file(filepath, content) ⇒ Object

safely creates a file and does not override the existing file



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 68

def safe_create_file(filepath, content)
  if File.exists? filepath
    old_content = File.read(filepath)
    # if we did a better comparison of content we could be smarter about when we create files
    if old_content != content or not File.zero?(filepath)
      $stderr.puts "!! #{filepath} already exists and differs from template".warning
    end
  else
    safe_mkdir(File.dirname(filepath)) unless File.exists? File.dirname(filepath)
    File.open(filepath, 'w') do |f|
      f.puts content
    end
    puts " + #{filepath}".info
  end
end

#safe_create_module_files(template_dir, module_path, spec_object) ⇒ Object

creates any file that is contained in the templates/modules_files directory structure loops through the directory looking for erb files or other files. strips the erb extension and renders the template to the current module path filenames must named how they would appear in the normal module path. The directory structure where the file is contained



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 115

def safe_create_module_files(template_dir, module_path, spec_object)
  templates = Find.find(File.join(template_dir,'module_files')).sort
  templates.each do |template|
    dest = template.gsub(File.join(template_dir,'module_files'), module_path)
    if File.symlink?(template)
      safe_create_symlink(template, dest)
    elsif File.directory?(template)
      safe_mkdir(dest)
    else
      # because some plugins contain erb files themselves any erb file will be copied only
      # so we need to designate which files should be rendered with .retrospec.erb
      if template =~ /\.retrospec\.erb/
        # render any file ending in .retrospec_erb as a template
        dest = dest.gsub(/\.retrospec\.erb/, '')
        safe_create_template_file(dest, template, spec_object)
      else
        safe_copy_file(template, dest)
      end
    end
  end
end

copy the symlink and preserve the link



31
32
33
34
35
36
37
38
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 31

def safe_create_symlink(src,dest)
  if File.exists? dest
    $stderr.puts "!! #{dest} already exists and differs from template".warning
  else
    FileUtils.copy_entry(src,dest)
    puts " + #{dest}".info
  end
end

#safe_create_template_file(path, template, spec_object) ⇒ Object

path is the full path of the file to create template is the full path to the template file spec_object is any bindable object which the templates uses for context



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 96

def safe_create_template_file(path, template, spec_object)
  # check to ensure parent directory exists
  file_dir_path = File.expand_path(File.dirname(path))
  if ! File.exists?(file_dir_path)
    safe_mkdir(file_dir_path)
  end
  File.open(template) do |file|
    renderer = ERB.new(file.read, 0, '-')
    content = renderer.result spec_object.get_binding
    dest_path = File.expand_path(path)
    safe_create_file(dest_path, content)
  end
end

#safe_mkdir(dir) ⇒ Object

only creates a directory if the directory doesn’t already exist



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 9

def safe_mkdir(dir)
  dir = File.expand_path(dir)
  if File.exists? dir
    unless File.directory? dir
      $stderr.puts "!! #{dir} already exists and is not a directory".fatal
    end
  else
    FileUtils.mkdir_p dir
    puts " + #{dir}/".info
  end
end

#safe_move_file(src, dest) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 21

def safe_move_file(src,dest)
  if File.exists?(dest)
    $stderr.puts "!! #{dest} already exists and differs from template".warning
  else
    FileUtils.mv(src,dest)
    puts " + #{dest}".info
  end
end

#safe_touch(file) ⇒ Object

touch a file, this is useful for setting up trigger files



56
57
58
59
60
61
62
63
64
65
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 56

def safe_touch(file)
  if File.exists? file
    unless File.file? file
      $stderr.puts "!! #{file} already exists and is not a regular file".fatal
    end
  else
    FileUtils.touch file
    puts " + #{file}".info
  end
end