Module: Methadone::CLI
- Defined in:
- lib/methadone/cli.rb
Overview
Methadone Internal - treat as private
Stuff to implement methadone’s CLI app. These stuff isn’t generally for your use and it’s not included when you require ‘methadone’
Instance Method Summary collapse
-
#add_to_file(file, lines, options = {}) ⇒ Object
Add content to a file.
-
#check_and_prepare_basedir!(basedir, force) ⇒ Object
Checks that the basedir can be used, either by not existing, or by existing and force is true.
-
#copy_file(relative_path, options = {}) ⇒ Object
Copies a file, running it through ERB.
- #gemspec ⇒ Object
- #render_license_partial(partial) ⇒ Object
-
#template_dir(from) ⇒ Object
Get the location of the templates for profile “from”.
- #template_dirs_in(profile) ⇒ Object
Instance Method Details
#add_to_file(file, lines, options = {}) ⇒ Object
Add content to a file
file
-
path to the file
lines
-
Array of String representing the lines to add
options
-
Hash of options:
:before
-
A regexp that will appear right after the new content. i.e. this is where to insert said content.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/methadone/cli.rb', line 37 def add_to_file(file,lines, = {}) new_lines = [] found_line = false File.open(file).readlines.each do |line| line.chomp! if [:before] && [:before] === line found_line = true new_lines += lines end new_lines << line end raise "No line matched #{[:before]}" if [:before] && !found_line new_lines += lines unless [:before] File.open(file,'w') do |fp| new_lines.each { |line| fp.puts line } end end |
#check_and_prepare_basedir!(basedir, force) ⇒ Object
Checks that the basedir can be used, either by not existing, or by existing and force is true. In that case, we clean it out entirely
basedir
-
base directory where the user wants to create a new project
force
-
if true, and
basedir
exists, delete it before proceeding
This will exit the app if the dir exists and force is false
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/methadone/cli.rb', line 19 def check_and_prepare_basedir!(basedir,force) if File.exists? basedir if force rm_rf basedir, :verbose => true, :secure => true else exit_now! 1,"error: #{basedir} exists, use --force to override" end end mkdir_p basedir end |
#copy_file(relative_path, options = {}) ⇒ Object
Copies a file, running it through ERB
relative_path
-
path to the file, relative to the project root, minus the .erb extension You should use forward slashes to separate paths; this method will handle making the ultimate path OS independent.
options
-
Options to affect how the copy is done:
:from
-
The name of the profile from which to find the file, “full” by default
:as
-
The name the file should get if not the one in relative_path
:executable
-
true if this file should be set executable
:binding
-
the binding to use for the template
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/methadone/cli.rb', line 67 def copy_file(relative_path, = {}) [:from] ||= :full relative_path = File.join(relative_path.split(/\//)) template_path = File.join(template_dir([:from]),relative_path + ".erb") template = ERB.new(File.open(template_path).readlines.join('')) relative_path_parts = File.split(relative_path) relative_path_parts[-1] = [:as] if [:as] erb_binding = [:binding] or binding File.open(File.join(relative_path_parts),'w') do |file| file.puts template.result(erb_binding) file.chmod(0755) if [:executable] end end |
#gemspec ⇒ Object
105 106 107 |
# File 'lib/methadone/cli.rb', line 105 def gemspec @gemspec || @gemspec=_get_gemspec end |
#render_license_partial(partial) ⇒ Object
101 102 103 |
# File 'lib/methadone/cli.rb', line 101 def render_license_partial(partial) ERB.new(File.read(template_dir('full/'+partial))).result(binding).strip end |
#template_dir(from) ⇒ Object
Get the location of the templates for profile “from”
87 88 89 |
# File 'lib/methadone/cli.rb', line 87 def template_dir(from) File.join(File.dirname(__FILE__),'..','..','templates',from.to_s) end |
#template_dirs_in(profile) ⇒ Object
91 92 93 94 95 96 97 98 99 |
# File 'lib/methadone/cli.rb', line 91 def template_dirs_in(profile) template_dir = template_dir(profile) Dir["#{template_dir}/**/*"].select { |x| File.directory? x }.map { |dir| dir.gsub(/^#{template_dir}\//,'') } end |