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
- #normalize_command(cmd) ⇒ Object
- #render_license_partial(partial) ⇒ Object
-
#template_dir(from) ⇒ Object
Get the location of the templates for profile “from”.
- #template_dirs_in(profile) ⇒ Object
-
#titlify(name) ⇒ Object
converts string to constant form: methadone-module_name-class_name => Methadone::ModuleName::ClassName.
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 |
# File 'lib/methadone/cli.rb', line 67 def copy_file(relative_path, = {}) relative_path = File.join(relative_path.split(/\//)) template_path = File.join(template_dir([:from] || :full),relative_path + ".erb") template = ERB.new(File.open(template_path).readlines.join(''), nil ,'-') relative_path_parts = File.split(relative_path) relative_path_parts[-1] = [:as] if [:as] File.open(File.join(relative_path_parts),'w') do |file| file.puts template.result([:binding] || binding) file.chmod(0755) if [:executable] end end |
#gemspec ⇒ Object
113 114 115 |
# File 'lib/methadone/cli.rb', line 113 def gemspec @gemspec || @gemspec=_get_gemspec end |
#normalize_command(cmd) ⇒ Object
104 105 106 107 |
# File 'lib/methadone/cli.rb', line 104 def normalize_command(cmd) #Note: not i18n-safe cmd.tr('A-Z','a-z').gsub(/[^a-z0-9_]/,'_').sub(/^_*/,'') end |
#render_license_partial(partial) ⇒ Object
109 110 111 |
# File 'lib/methadone/cli.rb', line 109 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”
84 85 86 |
# File 'lib/methadone/cli.rb', line 84 def template_dir(from) File.join(File.dirname(__FILE__),'..','..','templates',from.to_s) end |
#template_dirs_in(profile) ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/methadone/cli.rb', line 88 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 |
#titlify(name) ⇒ Object
converts string to constant form:
methadone-module_name-class_name => Methadone::ModuleName::ClassName
100 101 102 |
# File 'lib/methadone/cli.rb', line 100 def titlify(name) name.gsub(/(^|-|_)(.)/) {"#{'::' if $1 == '-'}#{$2.upcase}"} end |