kosmos 0.0.1 → 0.0.2.pre.test2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +109 -8
- data/bin/kosmos +6 -79
- data/kosmos.gemspec +4 -1
- data/lib/kosmos.rb +18 -4
- data/lib/kosmos/download_url.rb +4 -0
- data/lib/kosmos/git_adapter.rb +5 -3
- data/lib/kosmos/package.rb +41 -57
- data/lib/kosmos/package_attrs.rb +79 -0
- data/lib/kosmos/package_downloads.rb +80 -0
- data/lib/kosmos/packages/achievements.rb +8 -0
- data/lib/kosmos/packages/active_texture_management.rb +1 -1
- data/lib/kosmos/packages/advanced_animator.rb +9 -0
- data/lib/kosmos/packages/advanced_jet_engine.rb +9 -0
- data/lib/kosmos/packages/aerojet_kerbodyne.rb +9 -0
- data/lib/kosmos/packages/aies_aerospace.rb +9 -0
- data/lib/kosmos/packages/ambient_light_adjustment.rb +9 -0
- data/lib/kosmos/packages/amok_dynamics.rb +9 -0
- data/lib/kosmos/packages/antenna_range.rb +10 -0
- data/lib/kosmos/packages/asmis_eclss_mod.rb +9 -0
- data/lib/kosmos/packages/astronomers_visual_pack.rb +5 -0
- data/lib/kosmos/packages/atmospheric_sound_enhancement.rb +9 -0
- data/lib/kosmos/packages/auto_asparagus.rb +9 -0
- data/lib/kosmos/packages/aviation_lights.rb +9 -0
- data/lib/kosmos/packages/b9_aerospace_pack.rb +11 -0
- data/lib/kosmos/packages/b9_cockpit_extended.rb +9 -0
- data/lib/kosmos/packages/b9_iva_extension.rb +9 -0
- data/lib/kosmos/packages/baha_extraplanetary_parts.rb +9 -0
- data/lib/kosmos/packages/better_rove_mates.rb +9 -0
- data/lib/kosmos/packages/better_than_starting_manned.rb +9 -0
- data/lib/kosmos/packages/bob_catind_soviet_american_packs.rb +10 -0
- data/lib/kosmos/packages/bolt_on_mission_probe.rb +9 -0
- data/lib/kosmos/packages/cargo_transfer_bagsand_tanks.rb +9 -0
- data/lib/kosmos/packages/celestial_body_science_multiplier_editor.rb +9 -0
- data/lib/kosmos/packages/celss_greenhouse.rb +9 -0
- data/lib/kosmos/packages/chatterer.rb +9 -0
- data/lib/kosmos/packages/coffee_industries_modular_airliner.rb +9 -0
- data/lib/kosmos/packages/conics_configurator.rb +9 -0
- data/lib/kosmos/packages/connected_living_space_api.rb +9 -0
- data/lib/kosmos/packages/constellation_essentials.rb +9 -0
- data/lib/kosmos/packages/cross_feed_enabler.rb +9 -0
- data/lib/kosmos/packages/custom_asteroids.rb +9 -0
- data/lib/kosmos/packages/dang_it.rb +9 -0
- data/lib/kosmos/packages/dark_multi_player.rb +10 -0
- data/lib/kosmos/packages/davon_supply.rb +9 -0
- data/lib/kosmos/packages/davon_throttle_controlsystems.rb +9 -0
- data/lib/kosmos/packages/dmagic_orbital_science.rb +9 -0
- data/lib/kosmos/packages/down_under_aerospace.rb +9 -0
- data/lib/kosmos/packages/editor_extensions.rb +9 -0
- data/lib/kosmos/packages/editor_part_highlighter.rb +9 -0
- data/lib/kosmos/packages/engine_ignitor.rb +9 -0
- data/lib/kosmos/packages/fasa.rb +18 -0
- data/lib/kosmos/packages/flight_managerfor_reusable_stages.rb +9 -0
- data/lib/kosmos/packages/fus_tek_station_parts.rb +9 -0
- data/lib/kosmos/packages/fusebox.rb +9 -0
- data/lib/kosmos/packages/gimbal_auto_trim.rb +9 -0
- data/lib/kosmos/packages/ginger_corp_station_hubs.rb +9 -0
- data/lib/kosmos/packages/glow_strips.rb +9 -0
- data/lib/kosmos/packages/habitat_pack.rb +9 -0
- data/lib/kosmos/packages/hangar_extender.rb +9 -0
- data/lib/kosmos/packages/home_grown_rockets.rb +10 -0
- data/lib/kosmos/packages/hooligan_labs.rb +26 -0
- data/lib/kosmos/packages/hullcam_vds.rb +8 -0
- data/lib/kosmos/packages/kerbal_attachment_system.rb +1 -1
- data/lib/kosmos/packages/kerbal_engineer_redux.rb +11 -0
- data/lib/kosmos/packages/launch_countdown.rb +9 -0
- data/lib/kosmos/packages/remote_tech.rb +1 -11
- data/lib/kosmos/packages/void.rb +9 -0
- data/lib/kosmos/user_interface.rb +120 -0
- data/lib/kosmos/util.rb +5 -1
- data/lib/kosmos/version.rb +1 -1
- data/lib/kosmos/versioner.rb +3 -3
- data/lib/kosmos/web/app.rb +36 -0
- data/lib/kosmos/web/public/css/main.css +69 -0
- data/lib/kosmos/web/public/css/normalize.css +527 -0
- data/lib/kosmos/web/public/index.html +107 -0
- data/lib/kosmos/web/public/js/main.js +125 -0
- data/lib/kosmos/web/public/js/plugins.js +24 -0
- data/lib/kosmos/web/public/js/vendor/jquery-1.10.2.min.js +6 -0
- data/lib/kosmos/web/public/js/vendor/modernizr-2.6.2.min.js +4 -0
- data/lib/kosmos/web/public/js/vendor/underscore.js +5 -0
- data/package_generator.rb +197 -0
- data/spec/package_spec.rb +32 -1
- data/spec/spec_helper.rb +6 -0
- data/spec/versioner_spec.rb +2 -21
- metadata +113 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8000615d26f3885d770b8ca1dfd6da6ba94f5a25
|
4
|
+
data.tar.gz: dfb4bccece00fc1ead2a60c80b56d46b5c365474
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d47f76253588612ce48c3bc45a0d42c14f44ac21615c0dadf4b2716d665a8f8b34441dc3e40e0a317fb00a35e5b0b78936ac9d5edbea1ce0f20e0d3fe94f4ed
|
7
|
+
data.tar.gz: 082ac15a0c4dcb4884975b8013934a70b9c016dce178f31f05eac7216cadda8e0fee874221fa39e228551be61108c06d29c4dc53c534de0f5167f864bb23a45a
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,21 +1,122 @@
|
|
1
1
|
# Kosmos
|
2
2
|
|
3
|
-
|
3
|
+
A simple package manager for Kerbal Space Program. Install any mod by simply
|
4
|
+
saying `kosmos install name-of-mod`. For example, install Mechjeb by issuing the
|
5
|
+
command:
|
6
|
+
|
7
|
+
```
|
8
|
+
kosmos install mechjeb
|
9
|
+
```
|
10
|
+
|
11
|
+
*Note:* Kosmos is still in active development, and is not meant for serious use
|
12
|
+
unless you're brave or stupid.
|
4
13
|
|
5
14
|
## Installation
|
6
15
|
|
7
|
-
|
16
|
+
*Note:* Kosmos is indeed not super easy to install if you're not used to
|
17
|
+
installing things by hand. When Kosmos is ready for "production" use, one-click
|
18
|
+
installers will be added.
|
19
|
+
|
20
|
+
Kosmos has three dependencies, all of which are currently expected to be on your
|
21
|
+
`PATH`. They are:
|
22
|
+
|
23
|
+
* Ruby version 2.0+,
|
24
|
+
* Git, and
|
25
|
+
* PhantomJS
|
26
|
+
|
27
|
+
### Installing Ruby
|
28
|
+
|
29
|
+
Kosmos has been tested on Ruby 2.0.0, and it is recommended that you use Ruby
|
30
|
+
2.0.0 or greater. Check your version of Ruby using:
|
31
|
+
|
32
|
+
```sh
|
33
|
+
ruby -v
|
34
|
+
```
|
35
|
+
|
36
|
+
If you need to update Ruby, use one of the following tools:
|
37
|
+
|
38
|
+
* *Mac*: [RVM](https://rvm.io/) is the recommended tool for the job, but not
|
39
|
+
everyone is comfortable with it. If you prefer, you may use
|
40
|
+
[Homebrew](http://brew.sh) and install Ruby 2.0 with: `brew install ruby20`.
|
41
|
+
* *Windows*: Install Ruby 2.0+ with [Ruby Installer](http://rubyinstaller.org/).
|
42
|
+
* *Linux*: Use [RVM](https://rvm.io/).
|
43
|
+
|
44
|
+
Verify that you're running Ruby 2.0+ by running:
|
45
|
+
|
46
|
+
```sh
|
47
|
+
ruby -v
|
48
|
+
```
|
49
|
+
|
50
|
+
### Installing Git
|
51
|
+
|
52
|
+
* *Mac*: Use the [Mac Git installer][mac-git], or use Homebrew. Remember to
|
53
|
+
check any box asking to add Git to your path.
|
54
|
+
* *Windows*: Install Git using [this installer][win-git]. Remember to check any
|
55
|
+
box asking to add Git to your path.
|
56
|
+
* *Linux*: Run the command:
|
57
|
+
* `yum install git-core` on Fedora, or
|
58
|
+
* `apt-get install git` on Debian / Ubuntu.
|
59
|
+
|
60
|
+
Verify that Git is installed properly by running:
|
8
61
|
|
9
|
-
|
62
|
+
```sh
|
63
|
+
git --version
|
64
|
+
```
|
10
65
|
|
11
|
-
|
66
|
+
### Installing PhantomJS
|
12
67
|
|
13
|
-
|
68
|
+
Install PhantomJS [here][phantom]. You will need to add PhantomJS to your path
|
69
|
+
manually. Verify that PhantomJS is installed properly by running:
|
14
70
|
|
15
|
-
|
71
|
+
```sh
|
72
|
+
phantomjs --version
|
73
|
+
```
|
16
74
|
|
17
|
-
|
75
|
+
### Installing Kosmos itself
|
76
|
+
|
77
|
+
Just run:
|
78
|
+
|
79
|
+
```sh
|
80
|
+
gem install kosmos
|
81
|
+
```
|
82
|
+
|
83
|
+
And it'll be ready to go.
|
18
84
|
|
19
85
|
## Usage
|
20
86
|
|
21
|
-
|
87
|
+
Install any command by running:
|
88
|
+
|
89
|
+
```
|
90
|
+
kosmos install name-of-the-mod-goes-here
|
91
|
+
```
|
92
|
+
|
93
|
+
Uninstall any mod by running:
|
94
|
+
|
95
|
+
```
|
96
|
+
kosmos uninstall name-of-the-mod-goes-here
|
97
|
+
```
|
98
|
+
|
99
|
+
You can install multiple mods by separating the names by spaces:
|
100
|
+
|
101
|
+
```
|
102
|
+
kosmos install mod-a mod-b mod-c
|
103
|
+
```
|
104
|
+
|
105
|
+
You can ask Kosmos what mods it's installed by running:
|
106
|
+
|
107
|
+
```
|
108
|
+
kosmos list
|
109
|
+
```
|
110
|
+
|
111
|
+
### A complete example
|
112
|
+
|
113
|
+
Almost all of the mods Scott Manley uses in Interstellar Quest are available
|
114
|
+
through Kosmos. You can install them all by running:
|
115
|
+
|
116
|
+
```
|
117
|
+
kosmos install active-texture-management b9 b9-fix b9-modzero kerbal-alarm-clock kw-rocketry ksp-interstellar ferram deadly-reentry kethane infernal-robotics distant-object-enhancement better-atmospheres remote-tech-2 remote-tech-2-fixpack tac-life-support enhanced-navball kerbal-joint-reinforcement docking-port-alignment-indicator safe-chute kerbal-attachment-system real-chute tac-fuel-balancer
|
118
|
+
```
|
119
|
+
|
120
|
+
[mac-git]: http://sourceforge.net/projects/git-osx-installer/
|
121
|
+
[win-git]: http://git-scm.com/download/win
|
122
|
+
[phantom]: http://phantomjs.org/download.html
|
data/bin/kosmos
CHANGED
@@ -6,88 +6,15 @@ Kosmos.configure do |config|
|
|
6
6
|
config.verbose = true
|
7
7
|
end
|
8
8
|
|
9
|
-
def pretty_print_list(list)
|
10
|
-
list.each { |value| puts " * #{value}" }
|
11
|
-
end
|
12
|
-
|
13
|
-
def load_packages(package_names)
|
14
|
-
packages = Hash[package_names.map do |name|
|
15
|
-
[name, Kosmos::Package.find(name)]
|
16
|
-
end]
|
17
|
-
|
18
|
-
unknown_packages = packages.select { |_, package| package.nil? }
|
19
|
-
|
20
|
-
if unknown_packages.any?
|
21
|
-
puts "Error: Kosmos couldn't find any packages with the following names:"
|
22
|
-
pretty_print_list(unknown_packages.keys)
|
23
|
-
exit
|
24
|
-
end
|
25
|
-
|
26
|
-
packages.values
|
27
|
-
end
|
28
|
-
|
29
|
-
def check_installed_packages(ksp_path, packages)
|
30
|
-
installed_titles = Kosmos::Versioner.installed_packages(ksp_path)
|
31
|
-
|
32
|
-
installed_packages = packages.select do |package|
|
33
|
-
installed_titles.include?(package.title)
|
34
|
-
end
|
35
|
-
|
36
|
-
if installed_packages.any?
|
37
|
-
puts "Error: You have already installed the following packages using Kosmos:"
|
38
|
-
pretty_print_list(installed_packages.map(&:title))
|
39
|
-
exit
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
9
|
case ARGV.shift
|
44
10
|
when 'init'
|
45
|
-
|
46
|
-
|
47
|
-
puts "Initializing Kosmos into #{ksp_path} (This will take a sec) ..."
|
48
|
-
|
49
|
-
Kosmos::Versioner.init_repo(ksp_path)
|
50
|
-
Kosmos.save_ksp_path(ksp_path)
|
51
|
-
|
52
|
-
puts "Done! You're ready to begin installing mods."
|
53
|
-
puts
|
54
|
-
puts "Install your first mod by running the command:"
|
55
|
-
puts " kosmos install [name-of-the-mod]"
|
56
|
-
puts
|
57
|
-
|
11
|
+
Kosmos::UserInterface.init(ARGV)
|
58
12
|
when 'install'
|
59
|
-
|
60
|
-
|
61
|
-
packages = load_packages(ARGV)
|
62
|
-
check_installed_packages(ksp_path, packages)
|
63
|
-
|
64
|
-
puts "Kosmos is about to install #{packages.count} package(s):"
|
65
|
-
pretty_print_list(packages.map(&:title))
|
66
|
-
|
67
|
-
packages.each do |package|
|
68
|
-
puts "Installing package #{package.title} ..."
|
69
|
-
package.new.install!(ksp_path)
|
70
|
-
puts "Done!"
|
71
|
-
end
|
72
|
-
|
13
|
+
Kosmos::UserInterface.install(ARGV)
|
73
14
|
when 'uninstall'
|
74
|
-
|
75
|
-
|
76
|
-
package_name = ARGV.shift
|
77
|
-
package = Kosmos::Package.find(package_name)
|
78
|
-
|
79
|
-
if package
|
80
|
-
puts "Preparing to uninstall #{package.title} ..."
|
81
|
-
Kosmos::Versioner.uninstall_package(ksp_path, package)
|
82
|
-
puts "Done! Just uninstalled: #{package.title}."
|
83
|
-
else
|
84
|
-
puts "Error: Kosmos couldn't find any packages with the name #{package_name.inspect}."
|
85
|
-
end
|
86
|
-
|
15
|
+
Kosmos::UserInterface.uninstall(ARGV)
|
87
16
|
when 'list'
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
puts "You have installed #{packages.length} mod(s) using Kosmos:"
|
92
|
-
pretty_print_list(packages)
|
17
|
+
Kosmos::UserInterface.list(ARGV)
|
18
|
+
when 'server'
|
19
|
+
Kosmos::UserInterface.server(ARGV)
|
93
20
|
end
|
data/kosmos.gemspec
CHANGED
@@ -17,8 +17,11 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
+
spec.add_dependency "json_pure"
|
20
21
|
spec.add_dependency "rubyzip"
|
21
|
-
spec.add_dependency "rugged"
|
22
22
|
spec.add_dependency "httparty"
|
23
23
|
spec.add_dependency "nokogiri"
|
24
|
+
spec.add_dependency "damerau-levenshtein"
|
25
|
+
spec.add_dependency "sinatra"
|
26
|
+
spec.add_dependency "thin"
|
24
27
|
end
|
data/lib/kosmos.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
require 'kosmos/package_dsl'
|
2
|
+
require 'kosmos/package_attrs'
|
3
|
+
require 'kosmos/package_downloads'
|
2
4
|
require 'kosmos/package'
|
3
5
|
require 'kosmos/versioner'
|
4
6
|
require 'kosmos/git_adapter'
|
5
7
|
require 'kosmos/download_url'
|
8
|
+
require 'kosmos/user_interface'
|
9
|
+
require 'kosmos/web/app'
|
6
10
|
require 'kosmos/util'
|
7
11
|
require 'kosmos/version'
|
8
12
|
|
9
|
-
require 'json'
|
13
|
+
require 'json/pure'
|
10
14
|
|
11
15
|
module Kosmos
|
12
16
|
class << self
|
@@ -26,16 +30,25 @@ module Kosmos
|
|
26
30
|
read_config[:ksp_path]
|
27
31
|
end
|
28
32
|
|
33
|
+
def cache_dir
|
34
|
+
read_config[:cache_dir]
|
35
|
+
end
|
36
|
+
|
29
37
|
private
|
30
38
|
|
31
39
|
def write_config(opts)
|
32
|
-
File.open(config_path, "
|
40
|
+
File.open(config_path, "r+") do |file|
|
33
41
|
file.write JSON.pretty_generate(read_config.merge(opts))
|
34
42
|
end
|
35
43
|
end
|
36
44
|
|
37
45
|
def read_config
|
38
|
-
|
46
|
+
config = File.read(config_path)
|
47
|
+
if config.empty?
|
48
|
+
{}
|
49
|
+
else
|
50
|
+
JSON.parse(config, symbolize_names: true)
|
51
|
+
end
|
39
52
|
end
|
40
53
|
|
41
54
|
def config_path
|
@@ -44,11 +57,12 @@ module Kosmos
|
|
44
57
|
end
|
45
58
|
|
46
59
|
class Configuration
|
47
|
-
attr_accessor :verbose, :post_processors
|
60
|
+
attr_accessor :verbose, :post_processors, :output_method
|
48
61
|
|
49
62
|
def initialize
|
50
63
|
@verbose = false
|
51
64
|
@post_processors = [Kosmos::PostProcessors::ModuleManagerResolver]
|
65
|
+
@output_method = Proc.new { |str| puts str }
|
52
66
|
end
|
53
67
|
end
|
54
68
|
end
|
data/lib/kosmos/download_url.rb
CHANGED
data/lib/kosmos/git_adapter.rb
CHANGED
@@ -6,6 +6,10 @@ module Kosmos
|
|
6
6
|
def init_repo(path)
|
7
7
|
Dir.chdir(path) do
|
8
8
|
`git init`
|
9
|
+
|
10
|
+
File.open('.gitignore', 'w') do |file|
|
11
|
+
file.write "!*\n"
|
12
|
+
end
|
9
13
|
end
|
10
14
|
end
|
11
15
|
|
@@ -16,11 +20,9 @@ module Kosmos
|
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
|
-
def revert_commit(repo_path, commit
|
23
|
+
def revert_commit(repo_path, commit)
|
20
24
|
Dir.chdir(repo_path) do
|
21
25
|
`git revert --no-commit #{commit.sha}`
|
22
|
-
`git add -A -f`
|
23
|
-
`git commit --allow-empty -m #{commit_message.shellescape}`
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
data/lib/kosmos/package.rb
CHANGED
@@ -2,50 +2,46 @@ require 'pathname'
|
|
2
2
|
require 'httparty'
|
3
3
|
require 'zip'
|
4
4
|
require 'tmpdir'
|
5
|
+
require 'damerau-levenshtein'
|
5
6
|
|
6
7
|
module Kosmos
|
7
8
|
class Package
|
8
9
|
include PackageDsl
|
10
|
+
include PackageAttrs
|
9
11
|
|
10
12
|
attr_reader :ksp_path, :download_dir
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
instance_variable_set("@#{param}", value)
|
16
|
-
else
|
17
|
-
instance_variable_get("@#{param}")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# Internal version of the `install` method, which saves before actually
|
23
|
-
# performing the installation.
|
14
|
+
# Internal version of the `install` method, which handles procedures commong
|
15
|
+
# to all packages, such as saving work before and after installation, as
|
16
|
+
# well as downloading and unzipping packages and running post-processors.
|
24
17
|
def install!(ksp_path)
|
25
18
|
@ksp_path = ksp_path
|
19
|
+
|
20
|
+
install_prerequisites!
|
21
|
+
|
26
22
|
@download_dir = self.class.unzip!
|
27
23
|
|
28
24
|
Util.log "Saving your work before installing ..."
|
29
|
-
Versioner.mark_preinstall(ksp_path, self
|
25
|
+
Versioner.mark_preinstall(ksp_path, self)
|
30
26
|
|
31
|
-
Util.log "Installing #{
|
27
|
+
Util.log "Installing #{title} ..."
|
32
28
|
install
|
33
29
|
|
34
30
|
Util.log "Cleaning up ..."
|
35
|
-
|
31
|
+
Util.run_post_processors!(ksp_path)
|
36
32
|
|
37
|
-
Versioner.mark_postinstall(ksp_path, self
|
33
|
+
Versioner.mark_postinstall(ksp_path, self)
|
34
|
+
|
35
|
+
install_postrequisites!
|
38
36
|
end
|
39
37
|
|
40
38
|
class << self
|
41
|
-
def
|
42
|
-
|
39
|
+
def unzip!
|
40
|
+
PackageDownloads.download_and_unzip_package(self)
|
41
|
+
end
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
else
|
47
|
-
@aliases
|
48
|
-
end
|
43
|
+
def download!
|
44
|
+
PackageDownloads.download_package(self)
|
49
45
|
end
|
50
46
|
|
51
47
|
# a callback for when a subclass of this class is created
|
@@ -57,52 +53,40 @@ module Kosmos
|
|
57
53
|
name.downcase.gsub(' ', "-")
|
58
54
|
end
|
59
55
|
|
56
|
+
def normalized_title
|
57
|
+
normalize_for_find(title)
|
58
|
+
end
|
59
|
+
|
60
60
|
def find(name)
|
61
61
|
@@packages.find do |package|
|
62
|
-
|
62
|
+
package.names.any? do |candidate_name|
|
63
63
|
normalize_for_find(candidate_name) == normalize_for_find(name)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
def
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
output_path = Pathname.new(download_file.path).parent.to_s
|
74
|
-
|
75
|
-
Zip::File.open(download_file.path) do |zip_file|
|
76
|
-
zip_file.each do |entry|
|
77
|
-
destination = File.join(output_path, entry.name)
|
78
|
-
parent_dir = File.expand_path('..', destination)
|
79
|
-
|
80
|
-
FileUtils.mkdir_p(parent_dir) unless File.exists?(parent_dir)
|
81
|
-
|
82
|
-
entry.extract(destination)
|
83
|
-
end
|
68
|
+
def search(name)
|
69
|
+
@@packages.min_by do |package|
|
70
|
+
package.names.map do |candidate_name|
|
71
|
+
DamerauLevenshtein.distance(name, candidate_name)
|
72
|
+
end.min
|
84
73
|
end
|
85
|
-
|
86
|
-
File.delete(File.absolute_path(download_file))
|
87
|
-
|
88
|
-
output_path
|
89
74
|
end
|
75
|
+
end
|
90
76
|
|
91
|
-
|
92
|
-
Util.log "The package is found at #{url}. Finding the download URL ..."
|
93
|
-
download_url = DownloadUrl.new(url).resolve_download_url
|
94
|
-
|
95
|
-
|
96
|
-
Util.log "Found it. Downloading from #{download_url} ..."
|
97
|
-
downloaded_file = HTTParty.get(download_url)
|
98
|
-
|
99
|
-
tmpdir = Dir.mktmpdir
|
77
|
+
private
|
100
78
|
|
101
|
-
|
102
|
-
|
103
|
-
|
79
|
+
def install_prerequisites!
|
80
|
+
resolve_prerequisites.each do |package|
|
81
|
+
Util.log "#{title} has prerequisite #{package.title}."
|
82
|
+
package.new.install!(ksp_path)
|
83
|
+
end
|
84
|
+
end
|
104
85
|
|
105
|
-
|
86
|
+
def install_postrequisites!
|
87
|
+
resolve_postrequisites.each do |package|
|
88
|
+
Util.log "#{title} has postrequisite #{package.title}."
|
89
|
+
package.new.install!(ksp_path)
|
106
90
|
end
|
107
91
|
end
|
108
92
|
|