Class: Raygun::Runner
- Inherits:
-
Object
- Object
- Raygun::Runner
- Defined in:
- lib/raygun/raygun.rb
Constant Summary collapse
- CARBONFIVE_REPO =
'carbonfive/raygun-rails'
Instance Attribute Summary collapse
-
#app_dir ⇒ Object
Returns the value of attribute app_dir.
-
#app_name ⇒ Object
Returns the value of attribute app_name.
-
#camel_name ⇒ Object
Returns the value of attribute camel_name.
-
#current_ruby_patch_level ⇒ Object
Returns the value of attribute current_ruby_patch_level.
-
#current_ruby_version ⇒ Object
Returns the value of attribute current_ruby_version.
-
#dash_name ⇒ Object
Returns the value of attribute dash_name.
-
#prototype_repo ⇒ Object
Returns the value of attribute prototype_repo.
-
#snake_name ⇒ Object
Returns the value of attribute snake_name.
-
#target_dir ⇒ Object
Returns the value of attribute target_dir.
-
#title_name ⇒ Object
Returns the value of attribute title_name.
Instance Method Summary collapse
- #check_raygun_version ⇒ Object
- #check_target ⇒ Object
- #clean_up_unwanted_files ⇒ Object
- #configure_new_app ⇒ Object
- #copy_prototype ⇒ Object
- #fetch_prototype ⇒ Object
-
#initialize(target_dir, prototype_repo) ⇒ Runner
constructor
A new instance of Runner.
- #initialize_git ⇒ Object
- #print_next_steps ⇒ Object
- #print_next_steps_carbon_five ⇒ Object
- #print_next_steps_for_custom_repo ⇒ Object
- #print_plan ⇒ Object
- #rename_new_app ⇒ Object
- #update_ruby_version ⇒ Object
Constructor Details
#initialize(target_dir, prototype_repo) ⇒ Runner
Returns a new instance of Runner.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/raygun/raygun.rb', line 19 def initialize(target_dir, prototype_repo) @target_dir = target_dir @app_dir = File.(target_dir.strip.to_s) @app_name = File.basename(app_dir).gsub(/\s+/, '-') @dash_name = app_name.gsub('_', '-') @snake_name = app_name.gsub('-', '_') @camel_name = camelize(snake_name) @title_name = titleize(snake_name) @prototype_repo = prototype_repo @current_ruby_version = RUBY_VERSION @current_ruby_patch_level = if RUBY_VERSION < '2.1.0' # Ruby adopted semver starting with 2.1.0. "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" else "#{RUBY_VERSION}" end end |
Instance Attribute Details
#app_dir ⇒ Object
Returns the value of attribute app_dir.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def app_dir @app_dir end |
#app_name ⇒ Object
Returns the value of attribute app_name.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def app_name @app_name end |
#camel_name ⇒ Object
Returns the value of attribute camel_name.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def camel_name @camel_name end |
#current_ruby_patch_level ⇒ Object
Returns the value of attribute current_ruby_patch_level.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def current_ruby_patch_level @current_ruby_patch_level end |
#current_ruby_version ⇒ Object
Returns the value of attribute current_ruby_version.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def current_ruby_version @current_ruby_version end |
#dash_name ⇒ Object
Returns the value of attribute dash_name.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def dash_name @dash_name end |
#prototype_repo ⇒ Object
Returns the value of attribute prototype_repo.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def prototype_repo @prototype_repo end |
#snake_name ⇒ Object
Returns the value of attribute snake_name.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def snake_name @snake_name end |
#target_dir ⇒ Object
Returns the value of attribute target_dir.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def target_dir @target_dir end |
#title_name ⇒ Object
Returns the value of attribute title_name.
16 17 18 |
# File 'lib/raygun/raygun.rb', line 16 def title_name @title_name end |
Instance Method Details
#check_raygun_version ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/raygun/raygun.rb', line 74 def check_raygun_version required_raygun_version = %x{tar xfz #{@prototype} --include "*.raygun-version" -O 2> /dev/null}.chomp || ::Raygun::VERSION if Gem::Version.new(required_raygun_version) > Gem::Version.new(::Raygun::VERSION) puts "" print "Hold up!".colorize(:red) print " This version of the raygun gem (".colorize(:light_red) print "#{::Raygun::VERSION})".colorize(:white) print " is too old to generate this application (needs ".colorize(:light_red) print "#{required_raygun_version}".colorize(:white) puts " or newer).".colorize(:light_red) puts "" print "Please update the gem by running ".colorize(:light_red) print "gem update raygun".colorize(:white) puts ", and try again. Thanks!".colorize(:light_red) puts "" exit 1 end end |
#check_target ⇒ Object
37 38 39 40 41 42 |
# File 'lib/raygun/raygun.rb', line 37 def check_target unless Dir["#{@app_dir}/*"].empty? puts "Misfire! The target directory isn't empty... aim elsewhere." exit 1 end end |
#clean_up_unwanted_files ⇒ Object
135 136 137 |
# File 'lib/raygun/raygun.rb', line 135 def clean_up_unwanted_files FileUtils.rm "#{app_dir}/.raygun-version", force: true end |
#configure_new_app ⇒ Object
127 128 129 130 131 132 133 |
# File 'lib/raygun/raygun.rb', line 127 def configure_new_app clean_up_unwanted_files update_ruby_version initialize_git end |
#copy_prototype ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/raygun/raygun.rb', line 96 def copy_prototype FileUtils.mkdir_p(app_dir) shell "tar xfz #{@prototype} -C \"#{app_dir}\"" # Github includes an extra directory layer in the tag tarball. extraneous_dir = Dir.glob("#{app_dir}/*").first dirs_to_move = Dir.glob("#{extraneous_dir}/*", File::FNM_DOTMATCH) .reject { |d| %w{. ..}.include?(File.basename(d)) } FileUtils.mv dirs_to_move, app_dir FileUtils.remove_dir extraneous_dir end |
#fetch_prototype ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/raygun/raygun.rb', line 44 def fetch_prototype print "Checking for the latest application prototype...".colorize(:yellow) $stdout.flush # Check if we can connect, or fail gracefully and use the latest cached version. repo = TemplateRepo.new(prototype_repo) name = repo.name tarball_url = repo.tarball sha = repo.sha print " #{name}.".colorize(:white) $stdout.flush cached_prototypes_dir = File.join(Dir.home, ".raygun") @prototype = "#{cached_prototypes_dir}/#{name.gsub('/','--')}-#{sha}.tar.gz" # Do we already have the tarball cached under ~/.raygun? if File.exists?(@prototype) puts " Using cached version.".colorize(:yellow) else print " Downloading...".colorize(:yellow) $stdout.flush # Download the tarball and install in the cache. Dir.mkdir(cached_prototypes_dir, 0755) unless Dir.exists?(cached_prototypes_dir) shell "curl -s -L #{tarball_url} -o #{@prototype}" puts " done!".colorize(:yellow) end end |
#initialize_git ⇒ Object
149 150 151 152 153 154 155 |
# File 'lib/raygun/raygun.rb', line 149 def initialize_git Dir.chdir(app_dir) do shell "git init" shell "git add -A ." shell "git commit -m 'Raygun-zapped skeleton.'" end end |
#print_next_steps ⇒ Object
173 174 175 176 177 178 179 |
# File 'lib/raygun/raygun.rb', line 173 def print_next_steps if @prototype_repo == CARBONFIVE_REPO print_next_steps_carbon_five else print_next_steps_for_custom_repo end end |
#print_next_steps_carbon_five ⇒ Object
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/raygun/raygun.rb', line 181 def print_next_steps_carbon_five puts "" puts "Zap! Your application is ready. Next steps...".colorize(:yellow) puts "" puts "# Install updated dependencies and prepare the database".colorize(:light_green) puts "$".colorize(:blue) + " cd #{target_dir}".colorize(:light_blue) puts "$".colorize(:blue) + " bin/setup".colorize(:light_blue) puts "" puts "# Run the specs (they should all pass)".colorize(:light_green) puts "$".colorize(:blue) + " bin/rake".colorize(:light_blue) puts "" puts "# Run the app and check things out".colorize(:light_green) puts "$".colorize(:blue) + " heroku local".colorize(:light_blue) puts "$".colorize(:blue) + " open http://localhost:3000".colorize(:light_blue) puts "" puts "Enjoy your Carbon Five flavored Rails application!".colorize(:yellow) end |
#print_next_steps_for_custom_repo ⇒ Object
199 200 201 202 203 204 |
# File 'lib/raygun/raygun.rb', line 199 def print_next_steps_for_custom_repo puts "" puts "Zap! Your application is ready.".colorize(:yellow) puts "" puts "Enjoy your raygun generated application!".colorize(:yellow) end |
#print_plan ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/raygun/raygun.rb', line 157 def print_plan puts ' ____ '.colorize(:light_yellow) puts ' / __ \____ ___ ______ ___ ______ '.colorize(:light_yellow) puts ' / /_/ / __ `/ / / / __ `/ / / / __ \ '.colorize(:light_yellow) puts ' / _, _/ /_/ / /_/ / /_/ / /_/ / / / / '.colorize(:light_yellow) puts ' /_/ |_|\__,_/\__, /\__, /\__,_/_/ /_/ '.colorize(:light_yellow) puts ' /____//____/ '.colorize(:light_yellow) puts puts "Raygun will create new app in directory:".colorize(:yellow) + " #{target_dir}".colorize(:yellow) + "...".colorize(:yellow) puts puts "-".colorize(:blue) + " Application Name:".colorize(:light_blue) + " #{title_name}".colorize(:light_reen) puts "-".colorize(:blue) + " Project Template:".colorize(:light_blue) + " #{prototype_repo}".colorize(:light_reen) puts "-".colorize(:blue) + " Ruby Version: ".colorize(:light_blue) + " #{@current_ruby_patch_level}".colorize(:light_reen) puts end |
#rename_new_app ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/raygun/raygun.rb', line 110 def rename_new_app Dir.chdir(app_dir) do { 'AppPrototype' => camel_name, 'app-prototype' => dash_name, 'app_prototype' => snake_name, 'App Prototype' => title_name }.each do |proto_name, new_name| shell "find . -type f -print | xargs #{sed_i} 's/#{proto_name}/#{new_name}/g'" end %w(d f).each do |find_type| shell "find . -depth -type #{find_type} -name '*app_prototype*' -exec bash -c 'mv $0 ${0/app_prototype/#{snake_name}}' {} \\;" end end end |
#update_ruby_version ⇒ Object
139 140 141 142 143 144 145 146 147 |
# File 'lib/raygun/raygun.rb', line 139 def update_ruby_version prototype_ruby_patch_level = File.read(File.("#{app_dir}/.ruby-version", __FILE__)).strip prototype_ruby_version = prototype_ruby_patch_level.match(/(\d\.\d\.\d).*/)[1] Dir.chdir(app_dir) do shell "#{sed_i} 's/#{prototype_ruby_patch_level}/#{@current_ruby_patch_level}/g' .ruby-version README.md" shell "#{sed_i} 's/#{prototype_ruby_version}/#{@current_ruby_version}/g' Gemfile" end end |