Module: Retrospec::Plugins::V1::ModuleHelpers
Instance Method Summary collapse
-
#create_content(type, dest, src = nil, overwrite = false) ⇒ Object
creates the content, then notifies the user.
-
#default_retrospec_dir ⇒ Object
the directory where the config, repos, and other info are saved.
-
#notify(dest, overwrite = false) ⇒ Object
notifies the user of what action will be performed + creates a file - + overwrites a file.
-
#overwrite?(dest) ⇒ Boolean
sets @overwrite_all if the user chooses ‘a’ and saves for next time.
-
#overwrite_all ⇒ Boolean
stores the answer if the user wants to overwrite all files.
-
#overwrite_enabled? ⇒ Boolean
True if overwrite mode is enabled.
- #prompt_for_overwrite(dest) ⇒ Object
- #retrospec_repos_dir ⇒ Object
-
#safe_copy_file(src, dest) ⇒ Object
safely copy an existing file to another dest.
-
#safe_create_file(dest, content) ⇒ Object
safely creates a file and does not override the existing file.
-
#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.
-
#safe_create_symlink(src, dest) ⇒ Object
copy the symlink and preserve the link.
-
#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.
-
#safe_mkdir(dir) ⇒ Object
only creates a directory if the directory doesn’t already exist.
-
#safe_move_file(src, dest) ⇒ Object
move the file, safely.
-
#safe_touch(file) ⇒ Object
touch a file, this is useful for setting up trigger files.
Instance Method Details
#create_content(type, dest, src = nil, overwrite = false) ⇒ Object
creates the content, then notifies the user
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 32 def create_content(type, dest, src = nil, overwrite = false) case type when :file File.open(dest, 'w') do |f| f.puts(src) end when :dir FileUtils.mkdir_p(dest) when :link FileUtils.copy_entry(src,dest,false,false,true) # always remove destination when :mv FileUtils.mv(src,dest) when :touch FileUtils.touch(dest) when :cp FileUtils.cp(src,dest) end notify(dest, overwrite) end |
#default_retrospec_dir ⇒ Object
the directory where the config, repos, and other info are saved
138 139 140 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 138 def default_retrospec_dir File.(File.join(ENV['HOME'], '.retrospec' )) end |
#notify(dest, overwrite = false) ⇒ Object
notifies the user of what action will be performed + creates a file
-
+ overwrites a file
23 24 25 26 27 28 29 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 23 def notify(dest, overwrite=false) if overwrite puts " - + #{dest}".info else puts " + #{dest}".info end end |
#overwrite?(dest) ⇒ Boolean
sets @overwrite_all if the user chooses ‘a’ and saves for next time
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 55 def overwrite?(dest) return true if overwrite_all return false unless overwrite_enabled? answer = prompt_for_overwrite(dest) if answer == 'a' print "Are you sure you wish to overwrite all generated files?(y/n): ".fatal sure = gets.chomp.downcase return @@overwrite_all = true if sure == 'y' overwrite?(dest) else answer == 'y' end end |
#overwrite_all ⇒ Boolean
stores the answer if the user wants to overwrite all files
11 12 13 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 11 def overwrite_all @@overwrite_all ||= !ENV['RETROSPEC_OVERWRITE_ALL'].nil? end |
#overwrite_enabled? ⇒ Boolean
Returns true if overwrite mode is enabled.
16 17 18 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 16 def overwrite_enabled? !ENV['RETROSPEC_OVERWRITE_ENABLE'].nil? end |
#prompt_for_overwrite(dest) ⇒ Object
69 70 71 72 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 69 def prompt_for_overwrite(dest) print "Overwrite #{dest}?(y/n/a): ".cyan gets.chomp.downcase end |
#retrospec_repos_dir ⇒ Object
142 143 144 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 142 def retrospec_repos_dir File.join(default_retrospec_dir, 'repos') end |
#safe_copy_file(src, dest) ⇒ Object
safely copy an existing file to another dest
103 104 105 106 107 108 109 110 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 103 def safe_copy_file(src, dest) if File.exists?(dest) and !File.zero?(dest) && !overwrite?(dest) return $stderr.puts "!! #{dest} already exists".warning end return safe_touch(src) unless File.exists?(src) safe_mkdir(File.dirname(dest)) create_content(:cp, dest, src) end |
#safe_create_file(dest, content) ⇒ Object
safely creates a file and does not override the existing file
124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 124 def safe_create_file(dest, content) if File.exists?(dest) && !overwrite?(dest) old_content = File.read(dest) # 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?(dest) $stderr.puts "!! #{dest} already exists and differs from template".warning end else safe_mkdir(File.dirname(dest)) unless File.exists? File.dirname(dest) create_content(:file, dest, content) 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
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 168 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 |
#safe_create_symlink(src, dest) ⇒ Object
copy the symlink and preserve the link
95 96 97 98 99 100 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 95 def safe_create_symlink(src,dest) if File.exists?(dest) && !overwrite?(dest) return $stderr.puts "!! #{dest} already exists and differs from template".warning end create_content(:link, dest, src) 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
149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 149 def safe_create_template_file(path, template, spec_object) # check to ensure parent directory exists file_dir_path = File.(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.(path) safe_create_file(dest_path, content) end end |
#safe_mkdir(dir) ⇒ Object
only creates a directory if the directory doesn’t already exist
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 75 def safe_mkdir(dir) dir = File.(dir) if File.exists? dir unless File.directory? dir $stderr.puts "!! #{dir} already exists and is not a directory".fatal end else create_content(:dir, dir) end end |
#safe_move_file(src, dest) ⇒ Object
move the file, safely
87 88 89 90 91 92 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 87 def safe_move_file(src,dest) if File.exists?(dest) && !overwrite?(dest) return $stderr.puts "!! #{dest} already exists and differs from template".warning end create_content(:mv, dest, src) end |
#safe_touch(file) ⇒ Object
touch a file, this is useful for setting up trigger files
113 114 115 116 117 118 119 120 121 |
# File 'lib/retrospec/plugins/v1/module_helpers.rb', line 113 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 create_content(:touch, file) end end |