Module: Rip::Setup
- Extended by:
- Setup
- Included in:
- Setup
- Defined in:
- lib/rip/setup.rb
Defined Under Namespace
Classes: InstallationError, StaleEnvironmentError
Constant Summary
collapse
- WEBSITE =
"http://hellorip.com/"
- STARTUP_SCRIPTS =
%w( .bash_profile .bash_login .bashrc .zshenv .profile .zshrc )
- FISH_STARTUP_SCRIPT =
".config/fish/config.fish"
- HOME =
File.expand_path('~')
- USER =
HOME.split('/')[-1]
- BINDIR =
Work around Apple’s Ruby.
if defined? RUBY_FRAMEWORK_VERSION
File.join("/", "usr", "bin")
else
RbConfig::CONFIG["bindir"]
end
- LIBDIR =
RbConfig::CONFIG['sitelibdir']
- RIPDIR =
File.expand_path(ENV['RIPDIR'] || File.join(HOME, '.rip'))
- RIPROOT =
File.expand_path(File.join(__DIR__, '..', '..'))
- RIPINSTALLDIR =
File.join(LIBDIR, 'rip')
Instance Method Summary
collapse
Instance Method Details
#check_installation ⇒ Object
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
|
# File 'lib/rip/setup.rb', line 224
def check_installation
if ENV['RIPDIR'].to_s.empty?
if startup_script_contains_rip_configuration?
raise StaleEnvironmentError, <<-end_error
No $RIPDIR. Rip has been integrated into your shell startup scripts but your
shell hasn't yet picked up the changes.
To complete the installation process please restart your shell or run:
source #{startup_script}
end_error
else
raise InstallationError, <<-end_error
No $RIPDIR. Rip hasn't been integrated into your shell startup scripts yet.
Please run `rip setup` to do so.
end_error
end
end
if !File.exists? File.join(BINDIR, 'rip')
raise InstallationError, "no rip in #{BINDIR}"
end
if !File.exists? File.join(LIBDIR, 'rip')
raise InstallationError, "no rip in #{LIBDIR}"
end
if !File.exists? File.join(LIBDIR, 'rip')
raise InstallationError, "no rip.rb in #{LIBDIR}"
end
true
end
|
#finish_setup ⇒ Object
155
156
157
|
# File 'lib/rip/setup.rb', line 155
def finish_setup
ui.puts finish_setup_banner(startup_script)
end
|
#finish_setup_banner(script = "~/.bash_profile") ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
# File 'lib/rip/setup.rb', line 159
def finish_setup_banner(script = "~/.bash_profile")
<<-EOI.gsub(/^ +/, "")
****************************************************
So far so good...
Rip needs certain env variables to run. We've tried
to install them automatically but may have failed.
Run `rip check` to check the status of your
installation.
Get started: `rip -h` or #{WEBSITE}
****************************************************
EOI
end
|
#fish_startup_script ⇒ Object
209
210
211
|
# File 'lib/rip/setup.rb', line 209
def fish_startup_script
FISH_STARTUP_SCRIPT if fish?
end
|
#install ⇒ Object
52
53
54
55
56
57
58
|
# File 'lib/rip/setup.rb', line 52
def install
install_libs
install_binary
setup_ripenv
setup_startup_script
finish_setup
end
|
#install_binary(verbose = false) ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/rip/setup.rb', line 98
def install_binary(verbose = false)
transaction "installing rip binary" do
src = File.join(RIPROOT, 'bin', 'rip')
dst = File.join(BINDIR, 'rip')
FileUtils.cp src, dst, :verbose => verbose, :preserve => true
ruby_bin = File.expand_path(File.join(BINDIR, RbConfig::CONFIG['ruby_install_name']))
if File.exist? ruby_bin
ui.puts "rip: using Ruby bin: #{ruby_bin}"
rewrite_bang_line(dst, "#!#{ruby_bin}")
end
end
end
|
#install_libs(verbose = false) ⇒ Object
89
90
91
92
93
94
95
96
|
# File 'lib/rip/setup.rb', line 89
def install_libs(verbose = false)
transaction "installing library files" do
riprb = File.join(RIPROOT, 'lib', 'rip.rb')
ripdr = File.join(RIPROOT, 'lib', 'rip')
FileUtils.cp_r riprb, LIBDIR, :verbose => verbose
FileUtils.cp_r ripdr, LIBDIR, :verbose => verbose
end
end
|
#installed? ⇒ Boolean
217
218
219
220
221
222
|
# File 'lib/rip/setup.rb', line 217
def installed?
check_installation
true
rescue
false
end
|
#remove_libs(verbose = false) ⇒ Object
84
85
86
87
|
# File 'lib/rip/setup.rb', line 84
def remove_libs(verbose = false)
FileUtils.rm_rf RIPINSTALLDIR, :verbose => verbose
FileUtils.rm_rf File.join(LIBDIR, 'rip.rb'), :verbose => verbose
end
|
#rewrite_bang_line(file, first_line) ⇒ Object
257
258
259
260
261
262
263
264
|
# File 'lib/rip/setup.rb', line 257
def rewrite_bang_line(file, first_line)
lines = File.readlines(file)[1..-1]
File.open(file, 'w') do |f|
f.puts first_line
f.puts lines.join("\n")
f.flush
end
end
|
#setup_ripenv(ripdir = RIPDIR, verbose = false) ⇒ Object
112
113
114
115
116
117
118
119
|
# File 'lib/rip/setup.rb', line 112
def setup_ripenv(ripdir=RIPDIR, verbose = false)
transaction "setting up ripenv" do
FileUtils.mkdir_p File.join(ripdir, 'rip-packages')
Rip.dir = ripdir
Rip::Env.create 'base'
FileUtils.chown_R USER, nil, ripdir, :verbose => verbose
end
end
|
#setup_startup_script(script = nil) ⇒ Object
Modifies the shell startup script(s) and inserts the Rip configuration statements.
Returns whether a startup script has been modified. If one of the startup scripts already contain the Rip configuration statements, then nothing will be modified and false will be returned.
TODO: Requires the startup script, but probably acceptable for most? –rue
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
# File 'lib/rip/setup.rb', line 131
def setup_startup_script(script = nil)
if script
script = File.expand_path(script)
else
script = startup_script
end
if script.empty? || !File.exists?(script)
ui.puts "rip: please create one of these startup scripts in $HOME and re-run:"
ui.abort STARTUP_SCRIPTS.map { |s| ' ' + s }
end
if File.read(script).include? 'RIPDIR'
ui.puts "rip: env variables already present in startup script"
false
else
ui.puts "rip: adding env variables to #{script}"
File.open(script, 'a+') do |f|
f.puts startup_script_template
end
true
end
end
|
#startup_script ⇒ Object
196
197
198
199
200
201
202
|
# File 'lib/rip/setup.rb', line 196
def startup_script
script = fish_startup_script || STARTUP_SCRIPTS.detect do |script|
File.exists? file = File.join(HOME, script)
end
script ? File.join(HOME, script) : ''
end
|
#startup_script_contains_rip_configuration? ⇒ Boolean
204
205
206
207
|
# File 'lib/rip/setup.rb', line 204
def startup_script_contains_rip_configuration?
filename = startup_script
!filename.empty? && File.read(filename).include?(startup_script_template)
end
|
#startup_script_template ⇒ Object
#transaction(message, &block) ⇒ Object
180
181
182
183
184
185
186
187
188
189
190
|
# File 'lib/rip/setup.rb', line 180
def transaction(message, &block)
ui.puts 'rip: ' + message
block.call
rescue Errno::EACCES
uninstall
ui.abort "access denied. please try running again with `sudo`"
rescue => e
ui.puts "rip: something failed, rolling back..."
uninstall
raise e
end
|
#ui ⇒ Object
266
267
268
|
# File 'lib/rip/setup.rb', line 266
def ui
Rip.ui
end
|
#uninstall(verbose = false) ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/rip/setup.rb', line 66
def uninstall(verbose = false)
FileUtils.rm File.join(BINDIR, 'rip'), :verbose => verbose
remove_libs verbose
FileUtils.rm_rf RIPDIR, :verbose => verbose
gembin = ENV['GEMBIN'] || 'gem'
`#{gembin} uninstall rip 2&> /dev/null`
ui.abort "rip uninstalled" if verbose
rescue Errno::EACCES
ui.abort "uninstall failed. please try again with `sudo`" if verbose
rescue Errno::ENOENT
nil
rescue => e
raise e if verbose
end
|
#upgrade ⇒ Object
60
61
62
63
64
|
# File 'lib/rip/setup.rb', line 60
def upgrade
remove_libs
install_libs
ui.puts "rip upgraded"
end
|