bukin 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bukin.gemspec +9 -6
- data/lib/bukin/bukfile.rb +22 -0
- data/lib/bukin/cli.rb +51 -134
- data/lib/bukin/lockfile.rb +2 -8
- data/lib/bukin/providers/bukget.rb +30 -0
- data/lib/bukin/providers/bukkit_dl.rb +36 -0
- data/lib/bukin/utils.rb +52 -0
- data/lib/bukin/version.rb +1 -1
- metadata +39 -3
data/bukin.gemspec
CHANGED
@@ -4,16 +4,19 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'bukin/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
7
|
+
gem.name = 'bukin'
|
8
8
|
gem.version = Bukin::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
11
|
-
gem.description =
|
9
|
+
gem.authors = ['Ryan Mendivil']
|
10
|
+
gem.email = ['rsmendivil@gmail.com']
|
11
|
+
gem.description = 'Plugin and server package manager for Minecraft'
|
12
12
|
gem.summary = gem.description
|
13
|
-
gem.homepage =
|
13
|
+
gem.homepage = 'http://github.com/Nullreff/bukin'
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
-
gem.require_paths = [
|
18
|
+
gem.require_paths = ['lib']
|
19
|
+
|
20
|
+
gem.add_dependency('thor', '~> 0.18.1')
|
21
|
+
gem.add_dependency('json', '~> 1.7.7')
|
19
22
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
class Bukin::Bukfile
|
3
|
+
NAME = 'Bukfile'
|
4
|
+
|
5
|
+
attr_accessor :server_info, :plugins_info
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@plugins_info = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def server(name, version = 'latest-rb')
|
12
|
+
unless @server_info
|
13
|
+
@server_info = { name: name, version: version }
|
14
|
+
else
|
15
|
+
abort("Error: There is more than one server declared in your #{INSTALL_FILE}")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def plugin(name, version = 'latest')
|
20
|
+
@plugins_info << { name: name, version: version }
|
21
|
+
end
|
22
|
+
end
|
data/lib/bukin/cli.rb
CHANGED
@@ -1,19 +1,8 @@
|
|
1
1
|
require 'thor'
|
2
|
-
require 'open-uri'
|
3
|
-
require 'fileutils'
|
4
|
-
require 'json'
|
5
2
|
require 'bukin/lockfile'
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
BUKGET_API = "http://api.bukget.org/3"
|
10
|
-
|
11
|
-
# Bukkit download api
|
12
|
-
# Docs: http://dl.bukkit.org/about/
|
13
|
-
BUKKIT_API = "http://dl.bukkit.org/api/1.0/downloads"
|
14
|
-
|
15
|
-
# Base url used for bukkit downloads
|
16
|
-
BUKKIT_BASE = "http://dl.bukkit.org"
|
3
|
+
require 'bukin/bukfile'
|
4
|
+
require 'bukin/providers/bukget'
|
5
|
+
require 'bukin/providers/bukkit_dl'
|
17
6
|
|
18
7
|
# Path to install plugins to
|
19
8
|
PLUGINS_PATH = "plugins"
|
@@ -25,92 +14,59 @@ class Bukin::CLI < Thor
|
|
25
14
|
|
26
15
|
def initialize(*)
|
27
16
|
@lockfile = Bukin::Lockfile.new
|
17
|
+
@bukget = Bukin::Bukget.new
|
18
|
+
@bukkit_dl = Bukin::BukkitDl.new
|
28
19
|
super
|
29
20
|
end
|
30
21
|
|
31
|
-
desc '
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
shell.say "Downloading version #{server_version} of #{name}..."
|
61
|
-
file_name = download_to(url, SERVER_PATH)
|
62
|
-
@lockfile.set_server(name, "build-#{server_build}", file_name)
|
63
|
-
shell.say "Saved to #{file_name}"
|
64
|
-
rescue OpenURI::HTTPError => ex
|
65
|
-
abort("Error: #{ex}")
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
desc 'install PLUGIN', "Download and install a plugin from bukkit dev"
|
70
|
-
option :version, :type => :string,
|
71
|
-
:default => 'latest',
|
72
|
-
:aliases => '-v',
|
73
|
-
:desc => "The version of the plugin to install"
|
74
|
-
option :server, :type => :string,
|
75
|
-
:default => 'bukkit',
|
76
|
-
:aliases => '-s',
|
77
|
-
:desc => "The server type this plugin works with"
|
78
|
-
def install(name)
|
79
|
-
if @lockfile.plugins.has_key?(name)
|
80
|
-
abort("The plugin #{name} is already installed")
|
22
|
+
desc 'install', "Download and install the resources specified in a Bukfile"
|
23
|
+
def install
|
24
|
+
say 'Parsing Bukfile... '
|
25
|
+
contents = File.read(Bukin::Bukfile::NAME)
|
26
|
+
bukfile = Bukin::Bukfile.new
|
27
|
+
bukfile.instance_eval(contents)
|
28
|
+
say 'Done', :green
|
29
|
+
|
30
|
+
server = bukfile.server_info
|
31
|
+
plugins = bukfile.plugins_info
|
32
|
+
|
33
|
+
say "Fetching information from #{@bukkit_dl.api_url}... "
|
34
|
+
server[:download_version] = @bukkit_dl.resolve_version(
|
35
|
+
server[:name],
|
36
|
+
server[:version]
|
37
|
+
)
|
38
|
+
server[:download_build] = @bukkit_dl.resolve_build(
|
39
|
+
server[:name],
|
40
|
+
server[:version]
|
41
|
+
)
|
42
|
+
say 'Done', :green
|
43
|
+
|
44
|
+
say "Fetching information from #{@bukget.api_url}... "
|
45
|
+
plugins.each do |plugin|
|
46
|
+
plugin[:download_version] = @bukget.resolve_version(
|
47
|
+
plugin[:name],
|
48
|
+
plugin[:version],
|
49
|
+
server[:name]
|
50
|
+
)
|
81
51
|
end
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
@lockfile.add_plugin(name, plugin_version, file_name)
|
97
|
-
shell.say "Saved to #{file_name}"
|
98
|
-
rescue OpenURI::HTTPError => ex
|
99
|
-
abort("Error: #{ex}")
|
52
|
+
say 'Done', :green
|
53
|
+
|
54
|
+
say "Downloading #{server[:name]} (#{server[:download_version]})... "
|
55
|
+
data, file_name = @bukkit_dl.download(server[:name], server[:download_build])
|
56
|
+
save_download(data, file_name, SERVER_PATH)
|
57
|
+
@lockfile.set_server(server[:name], server[:download_build], file_name)
|
58
|
+
say 'Done', :green
|
59
|
+
|
60
|
+
plugins.each do |plugin|
|
61
|
+
say "Downloading #{plugin[:name]} (#{plugin[:download_version]})... "
|
62
|
+
data, file_name = @bukget.download(plugin[:name], plugin[:download_version], server[:name])
|
63
|
+
save_download(data, file_name, PLUGINS_PATH)
|
64
|
+
@lockfile.add_plugin(plugin[:name], plugin[:download_version], file_name)
|
65
|
+
say 'Done', :green
|
100
66
|
end
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
def uninstall(name)
|
105
|
-
if not @lockfile.plugins.has_key?(name)
|
106
|
-
abort("The plugin #{name} is not currently installed")
|
107
|
-
end
|
108
|
-
|
109
|
-
version = @lockfile.plugins[name]['version']
|
110
|
-
files = @lockfile.plugins[name]['files']
|
111
|
-
files.each {|file| FileUtils.rm_f("#{PLUGINS_PATH}/#{file}")}
|
112
|
-
@lockfile.remove_plugin(name)
|
113
|
-
shell.say "Uninstalled version #{version} of #{name}"
|
67
|
+
rescue Exception => ex
|
68
|
+
say('Error', :red)
|
69
|
+
raise ex
|
114
70
|
end
|
115
71
|
|
116
72
|
def help(*)
|
@@ -118,43 +74,4 @@ class Bukin::CLI < Thor
|
|
118
74
|
shell.say
|
119
75
|
super
|
120
76
|
end
|
121
|
-
|
122
|
-
private
|
123
|
-
|
124
|
-
def download_to(url, path, content_disposition = false)
|
125
|
-
open(url) do |download|
|
126
|
-
file_name = if content_disposition
|
127
|
-
download.meta['content-disposition']
|
128
|
-
.match(/filename=(\"?)(.+)\1/)[2]
|
129
|
-
else
|
130
|
-
File.basename(url)
|
131
|
-
end
|
132
|
-
|
133
|
-
FileUtils.mkdir_p(path)
|
134
|
-
open("#{path}/#{file_name}", "wb") do |file|
|
135
|
-
file.print download.read
|
136
|
-
end
|
137
|
-
|
138
|
-
file_name
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def pretty_version(version)
|
143
|
-
case version
|
144
|
-
when 'latest'
|
145
|
-
"the latest version"
|
146
|
-
when 'latest-rb'
|
147
|
-
"the latest recommended build"
|
148
|
-
when 'latest-beta'
|
149
|
-
"the latest beta build"
|
150
|
-
when 'latest-dev'
|
151
|
-
"the latest development build"
|
152
|
-
when /^git-(.*)$/
|
153
|
-
"git commit #{$1}"
|
154
|
-
when /^build-(.*)$/
|
155
|
-
"build \##{$1}"
|
156
|
-
else
|
157
|
-
"version #{version}"
|
158
|
-
end
|
159
|
-
end
|
160
77
|
end
|
data/lib/bukin/lockfile.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
require 'fileutils'
|
3
2
|
|
4
|
-
|
5
|
-
LOCK_FILE = "#{INSTALL_FILE}.lock"
|
3
|
+
LOCK_FILE = 'Bukfile.lock'
|
6
4
|
|
7
5
|
class Bukin::Lockfile
|
8
6
|
|
@@ -30,6 +28,7 @@ class Bukin::Lockfile
|
|
30
28
|
'version' => version,
|
31
29
|
'files' => files
|
32
30
|
}
|
31
|
+
save
|
33
32
|
end
|
34
33
|
|
35
34
|
def remove_plugin(name)
|
@@ -41,11 +40,6 @@ class Bukin::Lockfile
|
|
41
40
|
@lockfile['plugins']
|
42
41
|
end
|
43
42
|
|
44
|
-
def plugins=(value)
|
45
|
-
@lockfile['plugins'] = value
|
46
|
-
save
|
47
|
-
end
|
48
|
-
|
49
43
|
def server
|
50
44
|
@lockfile['server']
|
51
45
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'bukin/utils'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
# BukGet api
|
5
|
+
# Docs: http://bukget.org/pages/docs/API3.html
|
6
|
+
BUKGET_API = "http://api.bukget.org/3"
|
7
|
+
|
8
|
+
class Bukin::Bukget
|
9
|
+
attr_accessor :api_url
|
10
|
+
|
11
|
+
def initialize(url = BUKGET_API)
|
12
|
+
@api_url = url
|
13
|
+
end
|
14
|
+
|
15
|
+
def download(name, version, server)
|
16
|
+
server = 'bukkit' if server == 'craftbukkit'
|
17
|
+
url = "#{@api_url}/plugins/#{server}/#{name}/#{version}/download"
|
18
|
+
download_file(url, true)
|
19
|
+
end
|
20
|
+
|
21
|
+
def info(name, version, server)
|
22
|
+
server = 'bukkit' if server == 'craftbukkit'
|
23
|
+
url = "#{@api_url}/plugins/#{server}/#{name}/#{version}"
|
24
|
+
JSON.parse(open(url).read)
|
25
|
+
end
|
26
|
+
|
27
|
+
def resolve_version(name, version, server)
|
28
|
+
info(name, version, server)['versions'][0]['version']
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'bukin/utils'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
# Base url used for bukkit downloads
|
5
|
+
BUKKIT_DL_BASE = "http://dl.bukkit.org"
|
6
|
+
|
7
|
+
# Bukkit download api
|
8
|
+
# Docs: http://dl.bukkit.org/about/
|
9
|
+
BUKKIT_DL_API = "#{BUKKIT_DL_BASE}/api/1.0/downloads"
|
10
|
+
|
11
|
+
|
12
|
+
class Bukin::BukkitDl
|
13
|
+
attr_accessor :api_url
|
14
|
+
|
15
|
+
def initialize(url = BUKKIT_DL_API)
|
16
|
+
@api_url = url
|
17
|
+
end
|
18
|
+
|
19
|
+
def download(name, version)
|
20
|
+
url = BUKKIT_DL_BASE + info(name, version)['file']['url']
|
21
|
+
download_file(url)
|
22
|
+
end
|
23
|
+
|
24
|
+
def info(name, version)
|
25
|
+
url = "#{@api_url}/projects/#{name}/view/#{version}/"
|
26
|
+
JSON.parse(open(url).read)
|
27
|
+
end
|
28
|
+
|
29
|
+
def resolve_build(name, version)
|
30
|
+
"build-#{info(name, version)['build_number']}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def resolve_version(name, version)
|
34
|
+
info(name, version)['version']
|
35
|
+
end
|
36
|
+
end
|
data/lib/bukin/utils.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
3
|
+
def save_download(data, name, path)
|
4
|
+
FileUtils.mkdir_p(path)
|
5
|
+
open("#{path}/#{name}", "wb") do |file|
|
6
|
+
file.print data
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def download_file(url, content_disposition = false)
|
11
|
+
open(url) do |download|
|
12
|
+
file_name = if content_disposition
|
13
|
+
download.meta['content-disposition']
|
14
|
+
.match(/filename=(\"?)(.+)\1/)[2]
|
15
|
+
.force_encoding("UTF-8")
|
16
|
+
else
|
17
|
+
File.basename(url)
|
18
|
+
end
|
19
|
+
data = download.read
|
20
|
+
return data, file_name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def install_plugin(name, version, server)
|
26
|
+
return false if @lockfile.plugins.has_key?(name)
|
27
|
+
|
28
|
+
download_version = @bukget.resolve_version(name, version, server)
|
29
|
+
data, file_name = @bukget.download(name, download_version, server)
|
30
|
+
save_download(data, file_name, PLUGINS_PATH)
|
31
|
+
@lockfile.add_plugin(name, download_version, file_name)
|
32
|
+
return file_name, download_version
|
33
|
+
end
|
34
|
+
|
35
|
+
def pretty_version(version)
|
36
|
+
case version
|
37
|
+
when 'latest'
|
38
|
+
"the latest version"
|
39
|
+
when 'latest-rb'
|
40
|
+
"the latest recommended build"
|
41
|
+
when 'latest-beta'
|
42
|
+
"the latest beta build"
|
43
|
+
when 'latest-dev'
|
44
|
+
"the latest development build"
|
45
|
+
when /^git-(.*)$/
|
46
|
+
"git commit #{$1}"
|
47
|
+
when /^build-(.*)$/
|
48
|
+
"build \##{$1}"
|
49
|
+
else
|
50
|
+
"version #{version}"
|
51
|
+
end
|
52
|
+
end
|
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.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03
|
13
|
-
dependencies:
|
12
|
+
date: 2013-04-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thor
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.18.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.18.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: json
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.7.7
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.7.7
|
14
46
|
description: Plugin and server package manager for Minecraft
|
15
47
|
email:
|
16
48
|
- rsmendivil@gmail.com
|
@@ -27,8 +59,12 @@ files:
|
|
27
59
|
- bin/bukin
|
28
60
|
- bukin.gemspec
|
29
61
|
- lib/bukin.rb
|
62
|
+
- lib/bukin/bukfile.rb
|
30
63
|
- lib/bukin/cli.rb
|
31
64
|
- lib/bukin/lockfile.rb
|
65
|
+
- lib/bukin/providers/bukget.rb
|
66
|
+
- lib/bukin/providers/bukkit_dl.rb
|
67
|
+
- lib/bukin/utils.rb
|
32
68
|
- lib/bukin/version.rb
|
33
69
|
homepage: http://github.com/Nullreff/bukin
|
34
70
|
licenses: []
|