bukin 0.0.1 → 0.1.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/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: []
|