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.
@@ -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 = "bukin"
7
+ gem.name = 'bukin'
8
8
  gem.version = Bukin::VERSION
9
- gem.authors = ["Ryan Mendivil"]
10
- gem.email = ["rsmendivil@gmail.com"]
11
- gem.description = %q{Plugin and server package manager for Minecraft}
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 = "http://github.com/Nullreff/bukin"
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 = ["lib"]
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
@@ -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
- # BukGet api
8
- # Docs: http://bukget.org/pages/docs/API3.html
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 'server NAME', "Download and install Minecraft server software"
32
- option :version, :type => :string,
33
- :default => 'latest-rb',
34
- :aliases => '-v',
35
- :desc => "The version of the server to install"
36
- def server(name)
37
- name = 'craftbukkit' if name == 'bukkit' # Auto rename
38
- name == 'craftbukkit' || abort("Currently only craftbukkit is supported as a sever")
39
-
40
- if @lockfile.server != {}
41
- if @lockfile.server['name'] == name
42
- abort("Server #{name} is already installed")
43
- else
44
- # Uninstall the existing server
45
- file = @lockfile.server['file']
46
- FileUtils.rm_f(file)
47
- end
48
- end
49
-
50
- version = options[:version]
51
- info_url = "#{BUKKIT_API}/projects/#{name}/view/#{version}/"
52
-
53
- begin
54
- shell.say "Retriving the latest information about #{name}..."
55
- info = JSON.parse(open(info_url).read)
56
- url = BUKKIT_BASE + info['file']['url']
57
- server_version = info['version']
58
- server_build = info['build_number']
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
- version = options[:version]
84
- display_version = pretty_version(version)
85
- server = options[:server]
86
- info_url = "#{BUKGET_API}/plugins/#{server}/#{name}/#{version}"
87
-
88
- begin
89
- shell.say "Retriving the latest information about #{name}..."
90
- info = JSON.parse(open(info_url).read)
91
- url = info['versions'][0]['download']
92
- plugin_version = info['versions'][0]['version']
93
-
94
- shell.say "Downloading version #{plugin_version} of #{name}..."
95
- file_name = download_to(url, PLUGINS_PATH)
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
- end
102
-
103
- desc 'uninstall PLUGIN', "Uninstalls a plugin"
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
@@ -1,8 +1,6 @@
1
1
  require 'yaml'
2
- require 'fileutils'
3
2
 
4
- INSTALL_FILE = "Bukfile"
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Bukin
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.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.0.1
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-11 00:00:00.000000000 Z
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: []