bukin 0.2.0 → 0.3.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 +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
|
+
[](https://gemnasium.com/Nullreff/bukin)
|
6
|
+
[](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
|