bukin 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +3 -0
- data/lib/bukin.rb +1 -0
- data/lib/bukin/bukfile.rb +16 -6
- data/lib/bukin/cli.rb +14 -10
- data/lib/bukin/exceptions.rb +5 -0
- data/lib/bukin/friendly_errors.rb +2 -0
- data/lib/bukin/installer.rb +5 -4
- data/lib/bukin/lockfile.rb +11 -11
- data/lib/bukin/providers/bukget.rb +29 -7
- data/lib/bukin/providers/bukkit_dl.rb +13 -9
- data/lib/bukin/utils.rb +1 -1
- data/lib/bukin/version.rb +1 -1
- metadata +3 -2
data/README.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
1
|
# Bukin
|
2
2
|
|
3
3
|
Plugin and server package manager for Minecraft
|
4
|
+
|
5
|
+
[![Dependency Status](https://gemnasium.com/Nullreff/bukin.png)](https://gemnasium.com/Nullreff/bukin)
|
6
|
+
[![Code Climate](https://codeclimate.com/github/Nullreff/bukin.png)](https://codeclimate.com/github/Nullreff/bukin)
|
data/lib/bukin.rb
CHANGED
data/lib/bukin/bukfile.rb
CHANGED
@@ -22,15 +22,25 @@ class Bukin::Bukfile
|
|
22
22
|
@plugins_info = []
|
23
23
|
end
|
24
24
|
|
25
|
-
def server(name,
|
26
|
-
|
27
|
-
@server_info = { name: name, version: version }
|
28
|
-
else
|
25
|
+
def server(name, *args)
|
26
|
+
if @server_info
|
29
27
|
abort("Error: There is more than one server declared in your #{FILE_NAME}")
|
30
28
|
end
|
29
|
+
|
30
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
31
|
+
version = args.pop || nil
|
32
|
+
|
33
|
+
@server_info = { name: name, version: version }.merge(options)
|
31
34
|
end
|
32
35
|
|
33
|
-
def plugin(name,
|
34
|
-
@plugins_info
|
36
|
+
def plugin(name, *args)
|
37
|
+
if @plugins_info.find { |p| p[:name] == name }
|
38
|
+
abort("Error: You declared the plugin #{name} more than once in your #{FILE_NAME}")
|
39
|
+
end
|
40
|
+
|
41
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
42
|
+
version = args.pop || nil
|
43
|
+
|
44
|
+
@plugins_info << { name: name, version: version }.merge(options)
|
35
45
|
end
|
36
46
|
end
|
data/lib/bukin/cli.rb
CHANGED
@@ -21,28 +21,26 @@ class Bukin::CLI < Thor
|
|
21
21
|
bukget = Bukin::Bukget.new
|
22
22
|
|
23
23
|
section "Fetching information from #{bukkit_dl.url}" do
|
24
|
-
|
25
|
-
server[:download_version] = info['version']
|
26
|
-
server[:download_build] = "build-#{info['build_number']}"
|
24
|
+
bukkit_dl.resolve_info(server)
|
27
25
|
end
|
28
26
|
|
29
27
|
section "Fetching information from #{bukget.url}" do
|
30
|
-
plugins.
|
31
|
-
|
32
|
-
plugin
|
28
|
+
plugins.map do |plugin|
|
29
|
+
plugin[:server] ||= server[:name]
|
30
|
+
bukget.resolve_info(plugin)
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
36
34
|
# Download and install server and plugins
|
37
35
|
installer = Bukin::Installer.new(Dir.pwd, true)
|
38
36
|
|
39
|
-
|
40
|
-
installer.install(:server, bukkit_dl, server
|
37
|
+
downloading server[:name], server[:display_version] do
|
38
|
+
installer.install(:server, bukkit_dl, server)
|
41
39
|
end
|
42
40
|
|
43
41
|
plugins.each do |plugin|
|
44
|
-
|
45
|
-
installer.install(:plugin, bukget, plugin
|
42
|
+
downloading plugin[:name], plugin[:version] do
|
43
|
+
installer.install(:plugin, bukget, plugin)
|
46
44
|
end
|
47
45
|
end
|
48
46
|
end
|
@@ -63,4 +61,10 @@ private
|
|
63
61
|
say 'Error', :red
|
64
62
|
raise ex
|
65
63
|
end
|
64
|
+
|
65
|
+
def downloading(name, version, &block)
|
66
|
+
msg = "Downloading #{name}"
|
67
|
+
msg << " (#{version})" if version
|
68
|
+
section(msg, &block)
|
69
|
+
end
|
66
70
|
end
|
@@ -3,6 +3,8 @@ require 'socket'
|
|
3
3
|
module Bukin
|
4
4
|
def self.with_friendly_errors
|
5
5
|
yield
|
6
|
+
rescue BukinError => error
|
7
|
+
abort error.message
|
6
8
|
rescue SocketError => error
|
7
9
|
abort "#{error.message}\nCheck that you have a stable connection and the service is online"
|
8
10
|
rescue Errno::ENOENT => error
|
data/lib/bukin/installer.rb
CHANGED
@@ -9,14 +9,15 @@ class Bukin::Installer
|
|
9
9
|
@paths = { server: path, plugin: "#{path}/plugins" }
|
10
10
|
end
|
11
11
|
|
12
|
-
def install(type, provider,
|
12
|
+
def install(type, provider, data)
|
13
13
|
unless @paths.keys.include?(type)
|
14
14
|
raise(ArgumentError, "You must specify one of the following types to install: #{@paths.keys.to_s}")
|
15
15
|
end
|
16
|
-
|
17
|
-
save_download(
|
16
|
+
file_data, file_name = download_file(data[:download])
|
17
|
+
save_download(file_data, file_name, @paths[type])
|
18
18
|
if @lockfile
|
19
|
-
|
19
|
+
data[:file] = file_name
|
20
|
+
@lockfile.add(type, data)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
data/lib/bukin/lockfile.rb
CHANGED
@@ -15,28 +15,28 @@ class Bukin::Lockfile
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def set_server(
|
18
|
+
def set_server(data)
|
19
19
|
self.server = {
|
20
|
-
'name' => name,
|
21
|
-
'version' => version,
|
22
|
-
'file' => file
|
20
|
+
'name' => data[:name],
|
21
|
+
'version' => data[:version],
|
22
|
+
'file' => data[:file]
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
26
|
-
def add_plugin(
|
27
|
-
self.plugins[name] = {
|
28
|
-
'version' => version,
|
29
|
-
'files' => files
|
26
|
+
def add_plugin(data)
|
27
|
+
self.plugins[data[:name]] = {
|
28
|
+
'version' => data[:version],
|
29
|
+
'files' => data[:files] || [data[:file]]
|
30
30
|
}
|
31
31
|
save
|
32
32
|
end
|
33
33
|
|
34
|
-
def add(type,
|
34
|
+
def add(type, data)
|
35
35
|
case type
|
36
36
|
when :server
|
37
|
-
set_server(
|
37
|
+
set_server(data)
|
38
38
|
when :plugin
|
39
|
-
add_plugin(
|
39
|
+
add_plugin(data)
|
40
40
|
else
|
41
41
|
raise(ArgumentError, "You must specify :server or :plugin as the type when adding to a lock file")
|
42
42
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'bukin/utils'
|
2
2
|
require 'json'
|
3
|
+
require 'cgi'
|
3
4
|
|
4
5
|
# BukGet api
|
5
6
|
# Docs: http://bukget.org/pages/docs/API3.html
|
@@ -14,15 +15,36 @@ class Bukin::Bukget
|
|
14
15
|
"#{url}/3"
|
15
16
|
end
|
16
17
|
|
17
|
-
def
|
18
|
+
def resolve_info(data)
|
19
|
+
return data if data[:download]
|
20
|
+
|
21
|
+
name = data[:name]
|
22
|
+
version = data[:version] || 'latest'
|
23
|
+
server = data[:server]
|
18
24
|
server = 'bukkit' if server == 'craftbukkit'
|
19
|
-
|
20
|
-
|
25
|
+
|
26
|
+
url = "#{api_url}/plugins/#{CGI.escape(server)}/#{CGI.escape(name)}/#{CGI.escape(version)}"
|
27
|
+
info = JSON.parse(open(url).read)
|
28
|
+
|
29
|
+
versions = info['versions']
|
30
|
+
if versions.empty?
|
31
|
+
raise Bukin::InstallError, "The plugin #{name} (#{version}) has no available downloads from BukGet."
|
32
|
+
end
|
33
|
+
|
34
|
+
version_data = versions.find {|version_data| jar_extension?(version_data)}
|
35
|
+
if version_data
|
36
|
+
data[:version] = version_data['version']
|
37
|
+
data[:download] = version_data['download']
|
38
|
+
else
|
39
|
+
puts info
|
40
|
+
raise Bukin::InstallError, "The plugin #{name} (#{version}) has no jar files available for download"
|
41
|
+
end
|
42
|
+
|
43
|
+
data
|
21
44
|
end
|
22
45
|
|
23
|
-
def
|
24
|
-
|
25
|
-
url = "#{api_url}/plugins/#{server}/#{name}/#{version}"
|
26
|
-
JSON.parse(open(url).read)
|
46
|
+
def jar_extension?(version_data)
|
47
|
+
File.extname(version_data['filename']) == '.jar'
|
27
48
|
end
|
49
|
+
|
28
50
|
end
|
@@ -14,17 +14,21 @@ class Bukin::BukkitDl
|
|
14
14
|
"#{url}/api/1.0/downloads"
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
17
|
+
def resolve_info(data)
|
18
|
+
if data[:download]
|
19
|
+
data[:display_version] = data[:version]
|
20
|
+
return data
|
21
|
+
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
download_file(url)
|
24
|
-
end
|
23
|
+
name = data[:name]
|
24
|
+
version = data[:version] || 'latest-rb'
|
25
25
|
|
26
|
-
def info(name, version)
|
27
26
|
url = "#{api_url}/projects/#{name}/view/#{version}/"
|
28
|
-
JSON.parse(open(url).read)
|
27
|
+
info = JSON.parse(open(url).read)
|
28
|
+
|
29
|
+
data[:version] = "build-#{info['build_number']}"
|
30
|
+
data[:display_version] = info['version']
|
31
|
+
data[:download] = @url + info['file']['url']
|
32
|
+
data
|
29
33
|
end
|
30
34
|
end
|
data/lib/bukin/utils.rb
CHANGED
@@ -9,7 +9,7 @@ end
|
|
9
9
|
|
10
10
|
def download_file(url, content_disposition = false)
|
11
11
|
open(url) do |download|
|
12
|
-
file_name = if
|
12
|
+
file_name = if download.meta['content-disposition']
|
13
13
|
download.meta['content-disposition']
|
14
14
|
.match(/filename=(\"?)(.+)\1/)[2]
|
15
15
|
.force_encoding("UTF-8")
|
data/lib/bukin/version.rb
CHANGED
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.
|
4
|
+
version: 0.3.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-
|
12
|
+
date: 2013-04-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- lib/bukin.rb
|
62
62
|
- lib/bukin/bukfile.rb
|
63
63
|
- lib/bukin/cli.rb
|
64
|
+
- lib/bukin/exceptions.rb
|
64
65
|
- lib/bukin/friendly_errors.rb
|
65
66
|
- lib/bukin/installer.rb
|
66
67
|
- lib/bukin/lockfile.rb
|