rocket_fuel 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +31 -0
  7. data/Rakefile +7 -0
  8. data/bin/rocket_fuel +8 -0
  9. data/lib/rocket_fuel/command_line_interface.rb +40 -0
  10. data/lib/rocket_fuel/fix/abstract_fix.rb +30 -0
  11. data/lib/rocket_fuel/fix/command_line_tool_fix.rb +61 -0
  12. data/lib/rocket_fuel/fix/command_line_tools/dmg_metadata.rb +46 -0
  13. data/lib/rocket_fuel/fix/command_line_tools/download.rb +30 -0
  14. data/lib/rocket_fuel/fix/command_line_tools/download_routine.rb +76 -0
  15. data/lib/rocket_fuel/fix/command_line_tools/install.applescript +58 -0
  16. data/lib/rocket_fuel/fix/command_line_tools/install.rb +31 -0
  17. data/lib/rocket_fuel/fix/file_sanitizer_fix.rb +25 -0
  18. data/lib/rocket_fuel/fix/macports_fix.rb +36 -0
  19. data/lib/rocket_fuel/fix/rbenv_fix.rb +24 -0
  20. data/lib/rocket_fuel/fix/rvm_fix.rb +24 -0
  21. data/lib/rocket_fuel/fix.rb +10 -0
  22. data/lib/rocket_fuel/operating_system.rb +53 -0
  23. data/lib/rocket_fuel/precheck/check.rb +52 -0
  24. data/lib/rocket_fuel/precheck/check_result.rb +17 -0
  25. data/lib/rocket_fuel/precheck/command_line_result_presenter.rb +28 -0
  26. data/lib/rocket_fuel/precheck/command_line_tool_check.rb +43 -0
  27. data/lib/rocket_fuel/precheck/macports_check.rb +48 -0
  28. data/lib/rocket_fuel/precheck/rbenv_check.rb +42 -0
  29. data/lib/rocket_fuel/precheck/run.rb +57 -0
  30. data/lib/rocket_fuel/precheck/rvm_check.rb +41 -0
  31. data/lib/rocket_fuel/precheck.rb +26 -0
  32. data/lib/rocket_fuel/system_details.rb +21 -0
  33. data/lib/rocket_fuel/version.rb +3 -0
  34. data/lib/rocket_fuel.rb +10 -0
  35. data/rocket_fuel.gemspec +28 -0
  36. data/spec/rocket_fuel/fix/command_line_tools/dmg_metadata_spec.rb +19 -0
  37. data/spec/rocket_fuel/fix/command_line_tools/download_spec.rb +12 -0
  38. data/spec/rocket_fuel/fix/macports_fix_spec.rb +23 -0
  39. data/spec/rocket_fuel/fix/rbenv_fix_spec.rb +29 -0
  40. data/spec/rocket_fuel/fix/rvm_fix_spec.rb +29 -0
  41. data/spec/rocket_fuel/operating_system_spec.rb +29 -0
  42. data/spec/rocket_fuel/precheck/check_result_spec.rb +23 -0
  43. data/spec/rocket_fuel/precheck/check_spec.rb +19 -0
  44. data/spec/rocket_fuel/precheck/command_line_result_presenter_spec.rb +32 -0
  45. data/spec/rocket_fuel/precheck/command_line_tool_check_spec.rb +71 -0
  46. data/spec/rocket_fuel/precheck/macports_check_spec.rb +34 -0
  47. data/spec/rocket_fuel/precheck/rbenv_check_spec.rb +35 -0
  48. data/spec/rocket_fuel/precheck/run_spec.rb +10 -0
  49. data/spec/rocket_fuel/precheck/rvm_check_spec.rb +38 -0
  50. data/spec/rocket_fuel/precheck_spec.rb +10 -0
  51. data/spec/spec_helper.rb +34 -0
  52. metadata +195 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b2b732a640edd303e1eb042f58222a07b00c3070
4
+ data.tar.gz: cb1593ddd42da275b2d15724d0f4d36ee934f7a3
5
+ SHA512:
6
+ metadata.gz: 21f0ed99469e6f0ca1b470713b51f1a27588f6dcd9ba257c075e7dd37c7220594ebe826fcc30535f939fccf4406ea23f0b40a82ea513fe700d288897f3350853
7
+ data.tar.gz: 6882d0a7211428262167273e4a8b75b542cdfe141c9180d5643f04c4df7995663f2e43d23f10742ea35081b38be9d18c3f989ecdd7066ec3374dc53e085d6f73
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rocket_fuel.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'pry'
8
+ gem 'simplecov',
9
+ require: false
10
+ gem 'coveralls',
11
+ require: false
12
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Dan Pickett
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # RocketFuel
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'rocket_fuel'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install rocket_fuel
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/rocket_fuel/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ require 'rspec/core'
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
data/bin/rocket_fuel ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thor'
4
+ require 'rocket_fuel'
5
+
6
+ require 'rocket_fuel/command_line_interface'
7
+
8
+ RocketFuel::CommandLineInterface.start(ARGV)
@@ -0,0 +1,40 @@
1
+ module RocketFuel
2
+ class CommandLineInterface < Thor
3
+ package_name 'rocket_fuel'
4
+
5
+ desc 'precheck', 'check for requirements prior to installation'
6
+ def precheck
7
+ require 'rocket_fuel/precheck'
8
+ say '***Rocket Fuel: Checking prerequisites***', :blue
9
+ say ''
10
+
11
+ RocketFuel::Precheck::Run.new.results
12
+
13
+ end
14
+
15
+ desc 'fix', 'fix problems that can cause issues with running rocket fuel'
16
+ def fix(fix)
17
+ require 'rocket_fuel/precheck'
18
+ require 'rocket_fuel/fix'
19
+ if fix_class = RocketFuel::Precheck.fixes[fix.to_sym]
20
+ the_fix = fix_class.new
21
+ say(the_fix.title)
22
+ say('Fixing...')
23
+ the_fix.run
24
+ say('')
25
+
26
+ if the_fix.check
27
+ if the_fix.check.ok?
28
+ say('Fix successful.', :green)
29
+ else
30
+ say('Fix failed.', :red)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ desc 'install [package]', 'install rocket fuel packages'
37
+ def install
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ require 'rocket_fuel/precheck'
2
+
3
+ module RocketFuel
4
+ module Fix
5
+ class AbstractFix
6
+ class << self
7
+ def fix_name(fix_name)
8
+ @fix_name = fix_name
9
+ end
10
+
11
+ def fix_name_value
12
+ @fix_name
13
+ end
14
+
15
+ def register!
16
+ RocketFuel::Precheck.register_fix(self)
17
+ end
18
+ end
19
+
20
+ def check
21
+ unless @check
22
+ if klass = RocketFuel::Precheck.checks[self.class.fix_name_value]
23
+ @check = klass.new
24
+ end
25
+ end
26
+ @check
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,61 @@
1
+ require 'rocket_fuel/fix/command_line_tools/download_routine'
2
+ require 'rocket_fuel/fix/command_line_tools/install'
3
+ module RocketFuel
4
+ module Fix
5
+ class CommandLineToolFix < AbstractFix
6
+ fix_name :command_line_tools
7
+ register!
8
+
9
+ include Thor::Base
10
+
11
+ ACCOUNT_CREATION_URL = 'https://developer.apple.com/register/index.action'
12
+ APPLESCRIPT_PATH = File.join(File.dirname(__FILE__),
13
+ 'command_line_tools', 'install.applescript')
14
+
15
+ def run
16
+ dev_account = ask('Do you have an apple developer account?',
17
+ :limited_to => ['y', 'n'])
18
+ if dev_account == 'n'
19
+ say("Please register at #{ACCOUNT_CREATION_URL} and rerun " +
20
+ "this command.")
21
+ return false
22
+ else
23
+ routine = CommandLineTools::DownloadRoutine.new
24
+ say('')
25
+ say('Downloading Command Line Tools. ' +
26
+ 'You will be prompted for your Apple account and password. ' +
27
+ 'NOTE: rocket_fuel never stores your Apple account or password.')
28
+ dmg_path = routine.run
29
+ say('Done.')
30
+
31
+ install = CommandLineTools::Install.new(dmg_path)
32
+ say('')
33
+ say("Installing Command Line Tools. " +
34
+ "You will be prompted for your sudo password.")
35
+ install.run
36
+ say('Done.')
37
+ end
38
+ end
39
+
40
+ def title
41
+ 'Command Line Tools must be installed for you to install ruby!'
42
+ end
43
+
44
+ def message
45
+ 'Installing Ruby requires a C compiler. For the Mac, Apple provides ' +
46
+ 'a package known as "Command Line Tools" which includes a C compiler. ' +
47
+ 'In order to download these tools, you must create an Apple Developer ' +
48
+ "account @ #{ACCOUNT_CREATION_URL}. Once " +
49
+ 'you\'ve created an account, you can download the version of command ' +
50
+ 'line tools appropriate for your version of OS X at ' +
51
+ 'https://developer.apple.com/downloads/index.action' +
52
+ 'Our fix is available in an experimental capacity. Once you have ' +
53
+ 'created an Apple Developer account, invoke: ' +
54
+ '`rocket_fuel fix command_line_tools` ' +
55
+ 'The fix involves an experimental script that will ask for your ' +
56
+ 'Apple ID and password. Please note that rocket_fuel NEVER stores ' +
57
+ 'your login information'
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,46 @@
1
+ module RocketFuel
2
+ module Fix
3
+ module CommandLineTools
4
+ class DmgMetadata
5
+ def initialize(dmg_path)
6
+ @dmg_path = dmg_path
7
+ @os = RocketFuel::SystemDetails.os.minor_version
8
+ end
9
+
10
+ def volume_dir
11
+ if map[@os]
12
+ map[@os]['volume_dir']
13
+ end
14
+ end
15
+
16
+ def pkg_name
17
+ if map[@os]
18
+ map[@os]['pkg_name']
19
+ end
20
+ end
21
+
22
+ protected
23
+ def map
24
+ @map ||= {
25
+ '10.10' => {
26
+ 'volume_dir' => 'Command Line Developer Tools',
27
+ 'pkg_name' => 'Command Line Tools (OS X 10.10)'
28
+ },
29
+ '10.9' => {
30
+ 'volume_dir' => 'Command Line Developer Tools',
31
+ 'pkg_name' => 'Command Line Tools (OS X 10.9)'
32
+ },
33
+ '10.8' => {
34
+ 'volume_dir' => 'Command Line Tools (Mountain Lion)',
35
+ 'pkg_name' => 'Command Line Tools (Mountain Lion)'
36
+ },
37
+ '10.7' => {
38
+ 'volume_dir' => 'Command Line Tools (Lion)',
39
+ 'pkg_name' => 'Command Line Tools (Lion)'
40
+ }
41
+ }
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,30 @@
1
+ module RocketFuel
2
+ module Fix
3
+ module CommandLineTools
4
+ class Download
5
+ URLS = {
6
+ '10.10' => '/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_10.10_for_xcode__xcode_6.1/command_line_tools_for_osx_10.10_for_xcode_6.1.dmg',
7
+ '10.9' => '/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_mavericks_for_xcode__april_2014/command_line_tools_for_osx_mavericks_april_2014.dmg',
8
+ '10.8' => '/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_mountain_lion_for_xcode__april_2014/command_line_tools_for_osx_mountain_lion_april_2014.dmg',
9
+ '10.7' => '/downloads/download.action?path=Developer_Tools/command_line_tools_os_x_lion_for_xcode__april_2013/xcode462_cltools_10_76938260a.dmg'
10
+ }
11
+
12
+ FILE_NAME = 'command-line-tools.dmg'
13
+ DEFAULT_DMG_PATH = "/tmp/#{FILE_NAME}"
14
+
15
+ def url
16
+ base_host + URLS[os_minor]
17
+ end
18
+
19
+ protected
20
+ def os_minor
21
+ RocketFuel::SystemDetails.os_version.gsub(/\.*\Z/, '')
22
+ end
23
+
24
+ def base_host
25
+ 'https://developer.apple.com'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,76 @@
1
+ require 'rocket_fuel/fix/command_line_tools/download'
2
+
3
+ module RocketFuel
4
+ module Fix
5
+ module CommandLineTools
6
+ class DownloadRoutine
7
+ include Thor::Base
8
+ PREF_NAMESPACE = File.expand_path("#{ENV['HOME']}/Library/Preferences/com.apple.Safari")
9
+
10
+ def initialize
11
+ @script_path = File.join(File.dirname(__FILE__), 'install.applescript')
12
+ @download = Download.new
13
+ end
14
+
15
+ def run
16
+ whitelist_downloads
17
+ run_applescript
18
+ await_download_completion
19
+ end
20
+
21
+ protected
22
+ def whitelist_downloads
23
+ #only do this once. We don't want the active download to get in the queue, so
24
+ #we memoize
25
+ @downloads ||= Dir.glob(downloading_glob)
26
+ end
27
+
28
+ def downloading_glob
29
+ File.join(download_path, "*.download")
30
+ end
31
+
32
+
33
+ def download_path
34
+ unless @download_path
35
+ @download_path = `defaults read #{PREF_NAMESPACE} DownloadsPath`.chomp
36
+ if @download_path == '' || @download_path.nil?
37
+ @download_path = File.join(ENV["HOME"], "/Downloads")
38
+ end
39
+
40
+ @download_path = File.expand_path(@download_path)
41
+ end
42
+ @download_path
43
+ end
44
+
45
+ def run_applescript
46
+ `osascript #{@script_path} "#{@download.url}"`
47
+ end
48
+
49
+ def download_url
50
+ @download.url
51
+ end
52
+
53
+ def await_download_completion
54
+ puts "Waiting for CLT download to finish..."
55
+ sleep(5)
56
+
57
+ cared_for_downloads = Dir.glob(downloading_glob) - whitelist_downloads
58
+ puts "Ignoring #{whitelist_downloads}"
59
+ puts "Watching #{cared_for_downloads}"
60
+ #wait until all downloads have completed
61
+ while (Dir.glob(downloading_glob) - whitelist_downloads).length > 0 do
62
+ sleep(5)
63
+ end
64
+ puts "Download complete"
65
+
66
+ cared_for_downloads.each do |d|
67
+ dmg_file = d.gsub(/.download\z/, '')
68
+ if FileTest.exists?(dmg_file) && File.extname(dmg_file) == '.dmg'
69
+ return dmg_file
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,58 @@
1
+ on run argv
2
+ tell application "Safari"
3
+ activate
4
+
5
+ set apple_id to the text returned of (display dialog "Rocket Fuel: please enter your AppleID email:" with title "Apple ID" default answer "" buttons {"OK"} default button 1)
6
+ set apple_password to the text returned of (display dialog "Rocket Fuel: please enter your AppleID password:" with title "Password" with icon caution default answer "" buttons {"OK"} default button 1 with hidden answer)
7
+
8
+ open location "https://developer.apple.com/downloads/index.action"
9
+ delay 3 -- this is a delay to allow the page to start loading
10
+ --wait till it's loaded
11
+ set pageLoaded to false -- this initialises the pageLoaded variable that gets set below
12
+ repeat while not pageLoaded -- keep doing this loop until loading complete
13
+ if (do JavaScript "document.readyState" in current tab of window 1) is "complete" then
14
+ set pageLoaded to true
15
+ else
16
+ delay 3 -- you can try adjusting this delay
17
+ end if
18
+ end repeat
19
+ delay 3
20
+ do JavaScript "
21
+ function fillInForm(){
22
+ //https://developer.apple.com/downloads/index.action
23
+ if(jQuery('#accountname').length > 0){
24
+ jQuery('#accountname').val('" & apple_id & "');
25
+ jQuery('#accountpassword').prop('type', 'hidden');
26
+ jQuery('#accountpassword').val('" & apple_password & "');
27
+ jQuery('#accountname').parents('form')[0].submit();
28
+ }
29
+ }
30
+
31
+
32
+ //script courtesy of http://remysharp.com/2007/04/12/how-to-detect-when-an-external-library-has-loaded/
33
+ function loadExtScript(src, test, callback) {
34
+ var s = document.createElement('script');
35
+ s.src = src;
36
+ document.body.appendChild(s);
37
+
38
+ var callbackTimer = setInterval(function() {
39
+ var call = false;
40
+ try {
41
+ call = test.call();
42
+ } catch (e) {}
43
+
44
+ if (call) {
45
+ clearInterval(callbackTimer);
46
+ callback.call();
47
+ }
48
+ }, 100);
49
+ }
50
+
51
+ loadExtScript('https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js',
52
+ function(){ return typeof jQuery == 'function'},
53
+ fillInForm);
54
+ " in current tab of window 1
55
+ open location item 1 of argv
56
+ display dialog "Download initiated...navigate back to your terminal and await completion"
57
+ end tell
58
+ end run
@@ -0,0 +1,31 @@
1
+ require 'rocket_fuel/fix/command_line_tools/dmg_metadata'
2
+
3
+ module RocketFuel
4
+ module Fix
5
+ module CommandLineTools
6
+ class Install
7
+ def initialize(dmg_path)
8
+ @dmg_path = dmg_path
9
+ @metadata = DmgMetadata.new(dmg_path)
10
+ end
11
+
12
+ def run
13
+ #sudo before the work needs to be done to improve clarity of prompt
14
+ `sudo echo `
15
+ `echo Y | PAGER=true hdiutil attach '#{@dmg_path}' -quiet `
16
+ `sudo installer -pkg '/Volumes/#{volumes_dir}/#{pkg_name}.pkg' -target /`
17
+ `hdiutil detach '/Volumes/#{volumes_dir}' || hdiutil detach '/Volumes/#{volume_dir}' -force`
18
+ end
19
+
20
+ protected
21
+ def volume_dir
22
+ @metadata.volume_dir
23
+ end
24
+
25
+ def pkg_name
26
+ @metadata.pkg_name
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ require 'fileutils'
2
+ module RocketFuel
3
+ module Fix
4
+ class FileSanitizerFix < AbstractFix
5
+ def run
6
+ self.class.files_to_remove.each do |path|
7
+ if FileTest.exist?(path)
8
+ FileUtils.rm_rf(path)
9
+ end
10
+ end
11
+ end
12
+
13
+ class << self
14
+ def remove_file(file)
15
+ @files_to_remove ||= []
16
+ @files_to_remove << file
17
+ end
18
+
19
+ def files_to_remove
20
+ @files_to_remove
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ require 'rocket_fuel/fix/file_sanitizer_fix'
2
+ module RocketFuel
3
+ module Fix
4
+ class MacportsFix < FileSanitizerFix
5
+ UNINSTALL_URL = 'https://guide.macports.org/chunked/' +
6
+ 'installing.macports.uninstalling.html'
7
+
8
+ fix_name :macports
9
+ register!
10
+
11
+ #file manifest retrieved from
12
+ #https://guide.macports.org/chunked/installing.macports.uninstalling.html
13
+ remove_file '/opt/local'
14
+ remove_file '/Applications/DarwinPorts'
15
+ remove_file '/Applications/MacPorts'
16
+ remove_file '/Library/LaunchDaemons/org.macports.*'
17
+ remove_file '/Library/Receipts/DarwinPorts*.pkg'
18
+ remove_file '/Library/Receipts/MacPorts*.pkg'
19
+ remove_file '/Library/StartupItems/DarwinPortsStartup'
20
+ remove_file '/Library/Tcl/darwinports1.0'
21
+ remove_file '/Library/Tcl/macports1.0'
22
+ remove_file File.join(ENV['HOME'], '.macports')
23
+
24
+ def title
25
+ 'macports must be removed for Rocket Fuel to function properly'
26
+ end
27
+
28
+ def message
29
+ 'Rocket Fuel installs a package manager, homebrew, which will ' +
30
+ 'not play nicely with macports. You can follow uninstallation ' +
31
+ "instructions at #{UNINSTALL_URL}" +
32
+ 'to remove macports.'
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,24 @@
1
+ require 'rocket_fuel/fix/file_sanitizer_fix'
2
+ module RocketFuel
3
+ module Fix
4
+ class RbenvFix < FileSanitizerFix
5
+ fix_name :rbenv
6
+ register!
7
+
8
+ remove_file RocketFuel::Precheck::RbenvCheck.home_path
9
+ remove_file RocketFuel::Precheck::RbenvCheck.global_path
10
+
11
+ def title
12
+ 'rbenv must be removed for Rocket Fuel to function properly'
13
+ end
14
+
15
+ def message
16
+ 'Rocket Fuel installs a ruby version manager, chruby, which will ' +
17
+ 'not play nicely with rbenv. To remove it, you can invoke the command ' +
18
+ '`rm -rf ~/.rbenv && rm -rf /usr/local/var/rbenv`. ' +
19
+ 'Note that once Rocket Fuel has installed successfully, ' +
20
+ 'you will likely have to reinstall ruby gems previously installed.'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'rocket_fuel/fix/file_sanitizer_fix'
2
+
3
+ module RocketFuel
4
+ module Fix
5
+ class RvmFix < FileSanitizerFix
6
+ fix_name :rvm
7
+ register!
8
+
9
+ remove_file RocketFuel::Precheck::RvmCheck.home_path
10
+ remove_file RocketFuel::Precheck::RvmCheck.global_path
11
+
12
+ def title
13
+ 'RVM must be removed for Rocket Fuel to function properly'
14
+ end
15
+
16
+ def message
17
+ 'Rocket Fuel installs a ruby version manager, chruby, which will ' +
18
+ 'not play nicely with RVM. To remove it, you can invoke the command ' +
19
+ '`rvm implode`. Note that once Rocket Fuel has installed successfully, ' +
20
+ 'you will likely have to reinstall ruby gems previously installed.'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ module RocketFuel
2
+ module Fix
3
+ end
4
+ end
5
+
6
+ require 'rocket_fuel/fix/abstract_fix'
7
+ require 'rocket_fuel/fix/command_line_tool_fix'
8
+ require 'rocket_fuel/fix/rvm_fix'
9
+ require 'rocket_fuel/fix/rbenv_fix'
10
+ require 'rocket_fuel/fix/macports_fix'
@@ -0,0 +1,53 @@
1
+ require 'rbconfig'
2
+
3
+ module RocketFuel
4
+ class OperatingSystem
5
+ attr_reader :raw_name, :version
6
+
7
+ def initialize(os = nil, version = nil)
8
+ @raw_name, @version = os, version
9
+ if @raw_name.nil?
10
+ derive_raw_name
11
+ end
12
+
13
+ if @version.nil?
14
+ derive_version
15
+ end
16
+ end
17
+
18
+
19
+ #cribbed from Selenium
20
+ def name
21
+ case @raw_name
22
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
23
+ :windows
24
+ when /darwin|mac os/
25
+ :mac
26
+ when /linux/
27
+ :linux
28
+ when /solaris|bsd/
29
+ :unix
30
+ end
31
+ end
32
+
33
+ def platform_family?(platform)
34
+ name == platform.to_sym
35
+ end
36
+
37
+ #strip the patch level
38
+ def minor_version
39
+ /\A(\d+\.\d+)/.match(@version)[0]
40
+ end
41
+
42
+ protected
43
+ def derive_raw_name
44
+ @raw_name = RbConfig::CONFIG['host_os']
45
+ end
46
+
47
+ def derive_version
48
+ if platform_family?(:mac)
49
+ @version = `sw_vers -productVersion`.chomp
50
+ end
51
+ end
52
+ end
53
+ end