bukin 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []