bukin 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -1,6 +1,41 @@
1
- # Bukin
1
+ Bukin
2
+ =====
2
3
 
3
- Plugin and server package manager for Minecraft
4
+ Plugin and server installer for Minecraft similar to [Bundler](http://gembundler.com/). Still a work in progress...
4
5
 
5
6
  [![Dependency Status](https://gemnasium.com/Nullreff/bukin.png)](https://gemnasium.com/Nullreff/bukin)
6
7
  [![Code Climate](https://codeclimate.com/github/Nullreff/bukin.png)](https://codeclimate.com/github/Nullreff/bukin)
8
+
9
+ Installation
10
+ ------------
11
+
12
+ Install [rubygems](http://docs.rubygems.org/read/chapter/3) then:
13
+
14
+ gem install bukin
15
+
16
+
17
+ Usage
18
+ -----
19
+
20
+ Bukin works by reading a list of dependencies from a `Bukfile`. The most basic usage would be:
21
+
22
+ echo "server 'craftbukkit'" > Bukfile
23
+ bukin install
24
+
25
+ Currently only [Craftbukkit](http://bukkit.org/) is available as a server and [BukkitDev](http://dev.bukkit.org/) is the only plugin api supported. Specify a server using the `server` keyword and a plugin using the `plugin` keyword.
26
+
27
+ server 'craftbukkit'
28
+ plugin 'worldedit'
29
+ plugin 'worldguard'
30
+
31
+ You can specify specific versions of a plugin or server to install. Craftbukkit uses its own [special version naming](http://dl.bukkit.org/about/) (artifact slugs).
32
+
33
+ server 'craftbukkit', 'build-2754'
34
+ plugin 'worldedit', '5.5.5'
35
+ plugin 'worldguard', '5.7.3'
36
+
37
+ Need something custom? Use the `download` option. Version is optional but will display when the plugin is downloading.
38
+
39
+ server 'craftbukkit', 'spigot-735', download: 'http://ci.md-5.net/job/Spigot/735/artifact/Spigot-Server/target/spigot.jar'
40
+ plugin 'mycustomplugin', '2.4', download: 'http://example.com/My-Custom-Plugin.jar'
41
+
data/bukin.gemspec CHANGED
@@ -19,4 +19,5 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_dependency('thor', '~> 0.18.1')
21
21
  gem.add_dependency('json', '~> 1.7.7')
22
+ gem.add_dependency('rubyzip', '~> 0.9.9')
22
23
  end
data/lib/bukin/cli.rb CHANGED
@@ -27,7 +27,11 @@ class Bukin::CLI < Thor
27
27
  section "Fetching information from #{bukget.url}" do
28
28
  plugins.map do |plugin|
29
29
  plugin[:server] ||= server[:name]
30
- bukget.resolve_info(plugin)
30
+ begin
31
+ bukget.resolve_info(plugin)
32
+ rescue OpenURI::HTTPError => ex
33
+ raise Bukin::BukinError, "There was an error downloading #{plugin[:name]} (#{plugin[:version]}).\n#{ex.message}"
34
+ end
31
35
  end
32
36
  end
33
37
 
@@ -3,7 +3,7 @@ require 'socket'
3
3
  module Bukin
4
4
  def self.with_friendly_errors
5
5
  yield
6
- rescue BukinError => error
6
+ rescue Bukin::BukinError => error
7
7
  abort error.message
8
8
  rescue SocketError => error
9
9
  abort "#{error.message}\nCheck that you have a stable connection and the service is online"
@@ -1,4 +1,5 @@
1
1
  require 'bukin/lockfile'
2
+ require 'zip/zip'
2
3
 
3
4
  class Bukin::Installer
4
5
 
@@ -13,11 +14,49 @@ class Bukin::Installer
13
14
  unless @paths.keys.include?(type)
14
15
  raise(ArgumentError, "You must specify one of the following types to install: #{@paths.keys.to_s}")
15
16
  end
17
+
16
18
  file_data, file_name = download_file(data[:download])
17
- save_download(file_data, file_name, @paths[type])
18
- if @lockfile
19
- data[:file] = file_name
20
- @lockfile.add(type, data)
19
+ if File.extname(file_name) == '.zip'
20
+ match = data[:extract] || /\.jar$/
21
+ file_names = extract_files(file_data, @paths[type], match)
22
+ if file_names.empty?
23
+ raise(Bukin::InstallError, "The plugin #{data[:name]} (#{data[:version]}) has no jar files in it's download (zip file).")
24
+ end
25
+ if @lockfile
26
+ if file_names.size == 1
27
+ data[:file] = file_names.first
28
+ else
29
+ data[:files] = file_names
30
+ end
31
+ @lockfile.add(type, data)
32
+ end
33
+ else
34
+ save_download(file_data, file_name, @paths[type])
35
+ if @lockfile
36
+ data[:file] = file_name
37
+ @lockfile.add(type, data)
38
+ end
39
+ end
40
+ end
41
+
42
+ def extract_files(file_data, path, match)
43
+ file_names = []
44
+ file = Tempfile.new('bukin')
45
+ begin
46
+ file.write(file_data)
47
+ file.close
48
+
49
+ Zip::ZipFile.open(file.path) do |zipfile|
50
+ jars = zipfile.find_all {|file| file.name =~ match}
51
+ jars.each do |file|
52
+ file.extract(path + '/' + file.name) { true }
53
+ file_names << file.name
54
+ end
55
+ end
56
+ ensure
57
+ file.close
58
+ file.unlink
21
59
  end
60
+ file_names
22
61
  end
23
62
  end
@@ -36,8 +36,8 @@ class Bukin::Bukget
36
36
  data[:version] = version_data['version']
37
37
  data[:download] = version_data['download']
38
38
  else
39
- puts info
40
- raise Bukin::InstallError, "The plugin #{name} (#{version}) has no jar files available for download"
39
+ data[:version] = versions.first['version']
40
+ data[:download] = versions.first['download']
41
41
  end
42
42
 
43
43
  data
data/lib/bukin/utils.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'bukin/version'
1
2
  require 'open-uri'
2
3
 
3
4
  def save_download(data, name, path)
@@ -8,7 +9,7 @@ def save_download(data, name, path)
8
9
  end
9
10
 
10
11
  def download_file(url, content_disposition = false)
11
- open(url) do |download|
12
+ open(url, "User-Agent" => "Bukin #{Bukin::VERSION}") do |download|
12
13
  file_name = if download.meta['content-disposition']
13
14
  download.meta['content-disposition']
14
15
  .match(/filename=(\"?)(.+)\1/)[2]
data/lib/bukin/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bukin
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bukin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-27 00:00:00.000000000 Z
12
+ date: 2013-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 1.7.7
46
+ - !ruby/object:Gem::Dependency
47
+ name: rubyzip
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.9.9
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.9
46
62
  description: Plugin and server package manager for Minecraft
47
63
  email:
48
64
  - rsmendivil@gmail.com