Class: Juicer::Install::RhinoInstaller

Inherits:
Base
  • Object
show all
Defined in:
lib/juicer/install/rhino_installer.rb

Overview

Install and uninstall routines for the Mozilla Rhino jar.

Instance Attribute Summary

Attributes inherited from Base

#install_dir

Instance Method Summary collapse

Methods inherited from Base

#bin_path, #dependencies, #dependency, #download, #installed?, #log, #name, #path

Constructor Details

#initialize(install_dir = Juicer.home) ⇒ RhinoInstaller

Returns a new instance of RhinoInstaller.



11
12
13
14
15
# File 'lib/juicer/install/rhino_installer.rb', line 11

def initialize(install_dir = Juicer.home)
  super(install_dir)
  @latest = nil
  @website = "http://ftp.mozilla.org/pub/mozilla.org/js/"
end

Instance Method Details

#install(version = nil) ⇒ Object

Install Rhino. Downloads the jar file and stores it in the installation directory along with the License text.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/juicer/install/rhino_installer.rb', line 21

def install(version = nil)
  version = super((version || latest).gsub(/\./, "_"))
  base = "rhino#{version}"
  filename = download(File.join(@website, "#{base}.zip"))
  target = File.join(@install_dir, path)

  Zip::ZipFile.open(filename) do |file|
    FileUtils.mkdir_p(File.join(target, version))

    begin
      file.extract("#{base.sub(/-RC\d/, "")}/LICENSE.txt", File.join(target, version, "LICENSE.txt"))
    rescue Exception
      # Fail silently, some releases don't carry the license
    end

    file.extract("#{base.sub(/-RC\d/, "")}/js.jar", File.join(target, "bin", "#{base}.jar"))
  end
end

#latestObject



50
51
52
53
54
55
# File 'lib/juicer/install/rhino_installer.rb', line 50

def latest
  return @latest if @latest
  webpage = Nokogiri::HTML(open(@website).read)
  versions = (webpage / "td a").to_a.find_all { |a| a.attr("href") =~ /rhino\d_/ }
  @latest = versions.collect { |n| n.attr("href") }.sort.last.match(/rhino(\d_.*)\.zip/)[1]
end

#uninstall(version = nil) ⇒ Object

Uninstalls Rhino



43
44
45
46
47
48
# File 'lib/juicer/install/rhino_installer.rb', line 43

def uninstall(version = nil)
  super((version || latest).gsub(/\./, "_")) do |dir, version|
    base = "rhino#{version}"
    File.delete(File.join(dir, "bin/", "#{base}.jar"))
  end
end