spigoter 0.3.0 → 0.4.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.
@@ -1,26 +1,89 @@
1
1
  require 'open-uri'
2
2
 
3
3
  module Spigoter
4
- module Utils
5
- def self.download(url)
6
- begin
7
- file = open(url).read
8
- rescue
9
- raise "Can't download anything from #{url}, check internet?"
10
- end
11
- return file
12
- end
13
-
14
- def self.which(cmd)
15
- # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
16
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
17
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
18
- exts.each { |ext|
19
- exe = File.join(path, "#{cmd}#{ext}")
20
- return exe if File.executable?(exe) && !File.directory?(exe)
21
- }
22
- end
23
- return nil
24
- end
25
- end
26
- end
4
+ # Module with some methods commons to everyone.
5
+ # @author Daniel Ramos Acosta <danielramosacosta@hotmail.com>
6
+ module Utils
7
+ def self.download(url)
8
+ open(url).read
9
+ rescue
10
+ raise "Can't download anything from #{url}, check internet or URL?"
11
+ end
12
+
13
+ def self.loadyaml(path)
14
+ raise "File #{path} doesn't exists" unless File.exist?(path)
15
+
16
+ opts = YAML.load(File.open(path).read)
17
+
18
+ raise "Malformed YAML file #{path}" unless opts.class == Hash
19
+ opts
20
+ end
21
+
22
+ def self.which(cmd)
23
+ # http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
24
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
25
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
26
+ exts.each do |ext|
27
+ exe = File.join(path, "#{cmd}#{ext}")
28
+ return exe if File.executable?(exe) && !File.directory?(exe)
29
+ end
30
+ end
31
+ nil
32
+ end
33
+
34
+ def self.symbolize(hash)
35
+ new_hash = {}
36
+ hash.each { |k, v| new_hash[k.to_sym] = v }
37
+ new_hash
38
+ end
39
+
40
+ def self.fill_opts_config
41
+ raise "spigoter.yml doesn't exists, do 'spigoter init'" unless File.exist?('spigoter.yml')
42
+
43
+ opts = loadyaml('spigoter.yml')
44
+
45
+ opts = {} if opts.nil?
46
+ opts['Spigoter'] = {} if opts['Spigoter'].nil?
47
+ opts = Spigoter::Utils.symbolize(opts['Spigoter'])
48
+ default_opts(opts)
49
+ end
50
+
51
+ def self.default_opts(opts)
52
+ opts[:build_dir] = 'build' if opts[:build_dir].nil?
53
+ opts[:plugins_dir] = 'plugins' if opts[:plugins_dir].nil?
54
+ opts[:javaparams] = '-Xms1G -Xmx2G' if opts[:javaparams].nil?
55
+ opts[:spigot_version] = Spigoter::SPIGOT_VERSION if opts[:spigot_version].nil?
56
+ opts
57
+ end
58
+
59
+ def self.get_plugins(opts = {})
60
+ raise "spigoter.yml doesn't exists, do 'spigoter init'" unless File.exist?('plugins.yml')
61
+
62
+ plugins_data = loadyaml('plugins.yml')['Plugins']
63
+ plugins_data = normalize_plugins(plugins_data)
64
+ truncate_to_list(plugins_data, opts)
65
+ end
66
+
67
+ def self.normalize_plugins(plugins)
68
+ plugins = symbolize(plugins)
69
+
70
+ plugins.each do |key, plugin|
71
+ plugins[key] = symbolize(plugin)
72
+ plugins[key][:type] = plugins[key][:type].to_sym
73
+ end
74
+ end
75
+
76
+ def self.truncate_to_list(plugin, opts)
77
+ leftovers = {}
78
+ if !opts[:list].nil? && !opts[:list].empty?
79
+ list = opts[:list] # If a list cames in opts, use it
80
+ list.each do |key|
81
+ leftovers[key] = plugin[key]
82
+ end
83
+ else
84
+ leftovers = plugin
85
+ end
86
+ leftovers
87
+ end
88
+ end
89
+ end
@@ -1,3 +1,3 @@
1
1
  module Spigoter
2
- VERSION = "0.3.0"
2
+ VERSION = '0.4.0'.freeze
3
3
  end
@@ -2,34 +2,36 @@ require 'open-uri'
2
2
  require 'logging'
3
3
 
4
4
  module Spigoter
5
- class PluginCurse < Plugin
6
- def initialize(website)
7
- super(website)
5
+ # Class that represent a Curse plugin.
6
+ # @author Daniel Ramos Acosta <danielramosacosta@hotmail.com>
7
+ class PluginCurse < Plugin
8
+ def initialize(website)
9
+ raise "Bad URL #{website}" if website.match(%r{^http://mods.curse.com/bukkit-plugins/minecraft/[a-z\-]+$}).nil?
10
+ super(website)
11
+ end
8
12
 
9
- raise "Bad URL #{@url}" if @url.match(/^http:\/\/mods.curse.com\/bukkit-plugins\/minecraft\/[a-z\-]+$/).nil?
10
- end
11
- def download_page
12
- return @download_page unless @download_page.nil?
13
- begin
14
- @download_page = open(@url+'/download').read
15
- rescue
16
- raise "404 Error, that plugin URL doesn't exists"
17
- end
18
- return @download_page
19
- end
20
- def download_url
21
- return @download_url unless @download_url.nil?
22
- download_page
23
- @download_url = /(?<download_url>http:\/\/addons.curse.cursecdn.com.+\.jar)/.match(@download_page)[:download_url]
24
- end
25
- def version
26
- return @version unless @version.nil?
27
- main_page
28
- @version = /Newest File: (?<version>.+)</.match(@main_page)[:version]
29
- end
30
- def name
31
- return @name unless @name.nil?
32
- @name = /minecraft\/(?<name>.+)/.match(@url)[:name]
33
- end
34
- end
35
- end
13
+ def download_page
14
+ return @download_page unless @download_page.nil?
15
+ @download_page = Spigoter::Utils.download("#{@url}/download")
16
+ end
17
+
18
+ def download_url
19
+ return @download_url unless @download_url.nil?
20
+ download_page
21
+ @download_url = %r{(?<download_url>http://addons\.curse\.cursecdn\.com.+\.jar)}
22
+ .match(@download_page)[:download_url]
23
+ end
24
+
25
+ def version
26
+ return @version unless @version.nil?
27
+ @version = /Newest File: (?<version>.+)</.match(@main_page)[:version]
28
+ end
29
+
30
+ def name
31
+ return @name unless @name.nil?
32
+ @name = Regexp.new('Main Title -->\s*<H2 >\s*(?<name>.+)</H2>').match(@main_page)[:name]
33
+ end
34
+
35
+ private :download_page, :download_url
36
+ end
37
+ end
@@ -2,32 +2,36 @@ require 'open-uri'
2
2
  require 'logging'
3
3
 
4
4
  module Spigoter
5
- class PluginBukkit < Plugin
6
- def initialize(website)
7
- super(website)
5
+ # Class that represent a devBukkit plugin.
6
+ # @author Daniel Ramos Acosta <danielramosacosta@hotmail.com>
7
+ class PluginBukkit < Plugin
8
+ def initialize(website)
9
+ raise "Bad URL #{website}" if website.match(%r{http://dev.bukkit.org/bukkit-plugins/[a-z\-]+/?}).nil?
10
+ super(website)
11
+ end
8
12
 
9
- raise "Bad URL #{@url}" if @url.match(/http:\/\/dev.bukkit.org\/bukkit-plugins\/[a-z\-]+\/?/).nil?
10
- end
11
- def download_page
12
- return @download_page unless @download_page.nil?
13
- main_page
14
- url_download_page = @main_page.match(/<a href="(?<download_page_url>.+)">Download/)[:download_page_url]
15
- @download_page = open("http://dev.bukkit.org/#{url_download_page}").read
16
- # Don't need to begin-rescue, it's done by main_page
17
- end
18
- def download_url
19
- return @download_url unless @download_url.nil?
20
- download_page
21
- @download_url = /href="(?<download_url>.+)">Download/.match(@download_page)[:download_url]
22
- end
23
- def version
24
- return @version unless @version.nil?
25
- download_page
26
- @version = /3">\s*<h1>\s+(?<version>.+)\s+<\/h1>/.match(@download_page)[:version]
27
- end
28
- def name
29
- return @name unless @name.nil?
30
- @name = /ins\/(?<name>[a-z\-]+)\/?/.match(@url)[:name]
31
- end
32
- end
33
- end
13
+ def download_page
14
+ return @download_page unless @download_page.nil?
15
+ matches = @main_page.match(/"user-action user-action-download">\s+<a href="(?<download_page_url>.+)">Download/)
16
+ url_download_page = matches[:download_page_url]
17
+ @download_page = open("http://dev.bukkit.org/#{url_download_page}").read
18
+ end
19
+
20
+ def download_url
21
+ return @download_url unless @download_url.nil?
22
+ download_page
23
+ @download_url = /href="(?<download_url>.+)">Download/.match(@download_page)[:download_url]
24
+ end
25
+
26
+ def version
27
+ return @version unless @version.nil?
28
+ download_page
29
+ @version = %r{3">\s*<h1>\s+(?<version>.+)\s+</h1>}.match(@download_page)[:version]
30
+ end
31
+
32
+ def name
33
+ return @name unless @name.nil?
34
+ @name = %r{</div>\s*<h1>\s*(?<name>.+)\s*</h1>\s*</header>}.match(@main_page)[:name]
35
+ end
36
+ end
37
+ end
@@ -2,28 +2,40 @@ require 'open-uri'
2
2
  require 'logging'
3
3
 
4
4
  module Spigoter
5
- class Plugin
6
- def initialize(website)
7
- @url = website # Url of the plugin
8
- #@main_page # Mainpage content
9
- #@name # Name of the plugin
10
- #@download_page # Content of the download page
11
- #@download_url # Download url of the plugin
12
- #@regexp # Regexp that matches the URL
13
- #@file # Where the file is stored
14
- end
15
- def main_page
16
- return @main_page unless @main_page.nil?
17
- begin
18
- @main_page = open(@url).read
19
- rescue
20
- raise "404 Error, that plugin URL doesn't exists"
21
- end
22
- return @main_page
23
- end
24
- def file
25
- return @file unless @file.nil?
26
- @file = Spigoter::Utils.download(download_url) # download_url is implemented in child class
27
- end
28
- end
29
- end
5
+ # Generalized plugin.
6
+ # @author Daniel Ramos Acosta <danielramosacosta@hotmail.com>
7
+ class Plugin
8
+ def initialize(website)
9
+ @url = website # Url of the plugin
10
+ # @main_page # Mainpage content
11
+ # @name # Name of the plugin
12
+ # @download_page # Content of the download page
13
+ # @download_url # Download url of the plugin
14
+ # @regexp # Regexp that matches the URL
15
+ # @file # Where the file is stored
16
+ main_page # preload main_page
17
+ end
18
+
19
+ def main_page
20
+ return @main_page unless @main_page.nil?
21
+ @main_page = Spigoter::Utils.download(@url)
22
+ end
23
+
24
+ def download_url
25
+ @url # Dummy method, just to test
26
+ end
27
+
28
+ def file
29
+ return @file unless @file.nil?
30
+ @file = Spigoter::Utils.download(download_url) # download_url is implemented in child class
31
+ end
32
+
33
+ def self.list
34
+ {
35
+ curse: Spigoter::PluginCurse,
36
+ devbukkit: Spigoter::PluginBukkit,
37
+ spigot: Spigoter::PluginSpigot
38
+ }
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,29 @@
1
+ require 'open-uri'
2
+ require 'logging'
3
+
4
+ module Spigoter
5
+ # Class that represent a devBukkit plugin.
6
+ # @author Daniel Ramos Acosta <danielramosacosta@hotmail.com>
7
+ class PluginSpigot < Plugin
8
+ def initialize(website)
9
+ raise "Bad URL #{website}" if website.match(%r{https://www.spigotmc.org/resources/[a-z0-9\-]+/?}).nil?
10
+ super(website)
11
+ end
12
+
13
+ def download_url
14
+ return @download_url unless @download_url.nil?
15
+ uri = /<a href="(?<download_url>resources.+)" class="inner">/.match(@main_page)[:download_url]
16
+ @download_url = "https://www.spigotmc.org/#{uri}"
17
+ end
18
+
19
+ def version
20
+ return @version unless @version.nil?
21
+ @version = %r{class="muted">(?<version>.+)</span>}.match(@main_page)[:version]
22
+ end
23
+
24
+ def name
25
+ return @name unless @name.nil?
26
+ @name = /<h1>(?<name>.+?)\s*<span class="muted">/.match(@main_page)[:name]
27
+ end
28
+ end
29
+ end
data/lib/spigoter.rb CHANGED
@@ -1,15 +1,16 @@
1
- require "spigoter/version"
2
- require "spigoter/log/log"
1
+ require 'spigoter/version'
2
+ require 'spigoter/log/log'
3
3
  require 'spigoter/utils'
4
- require 'spigoter/plugins'
5
4
  require 'spigoter/webapi/plugin'
6
5
  require 'spigoter/webapi/curse'
7
6
  require 'spigoter/webapi/devbukkit'
7
+ require 'spigoter/webapi/spigot'
8
8
  require 'spigoter/cli/cli'
9
9
  require 'spigoter/cli/cli_update'
10
10
  require 'spigoter/cli/cli_compile'
11
11
  require 'spigoter/cli/cli_start'
12
+ require 'spigoter/cli/cli_init'
12
13
 
13
14
  module Spigoter
14
- # Your code goes here...
15
+ SPIGOT_VERSION = 'latest'.freeze
15
16
  end
data/spigoter.gemspec CHANGED
@@ -14,6 +14,8 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/DanielRamosAcosta/spigoter"
15
15
  spec.license = "MIT"
16
16
 
17
+ spec.required_ruby_version = '>= 2.2.4'
18
+
17
19
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
20
  # delete this section to allow pushing this gem to any host.
19
21
  if spec.respond_to?(:metadata)
@@ -36,6 +38,7 @@ Gem::Specification.new do |spec|
36
38
  spec.add_development_dependency "coveralls", "~> 0.8"
37
39
  spec.add_development_dependency "yard", "~> 0.8"
38
40
  spec.add_development_dependency "codeclimate-test-reporter", "~> 0.5.0"
41
+ spec.add_development_dependency "rubocop", "~> 0.39.0"
39
42
 
40
43
  spec.add_runtime_dependency "logging", "~> 2.1"
41
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spigoter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Ramos
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-03 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.5.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.39.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.39.0
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: logging
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -159,6 +173,7 @@ extensions: []
159
173
  extra_rdoc_files: []
160
174
  files:
161
175
  - ".codeclimate.yml"
176
+ - ".editorconfig"
162
177
  - ".gitignore"
163
178
  - ".rspec"
164
179
  - ".rubocop.yml"
@@ -175,15 +190,16 @@ files:
175
190
  - lib/spigoter.rb
176
191
  - lib/spigoter/cli/cli.rb
177
192
  - lib/spigoter/cli/cli_compile.rb
193
+ - lib/spigoter/cli/cli_init.rb
178
194
  - lib/spigoter/cli/cli_start.rb
179
195
  - lib/spigoter/cli/cli_update.rb
180
196
  - lib/spigoter/log/log.rb
181
- - lib/spigoter/plugins.rb
182
197
  - lib/spigoter/utils.rb
183
198
  - lib/spigoter/version.rb
184
199
  - lib/spigoter/webapi/curse.rb
185
200
  - lib/spigoter/webapi/devbukkit.rb
186
201
  - lib/spigoter/webapi/plugin.rb
202
+ - lib/spigoter/webapi/spigot.rb
187
203
  - pkg/.gitignore
188
204
  - spigoter.gemspec
189
205
  - tmp/.gitignore
@@ -200,7 +216,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
216
  requirements:
201
217
  - - ">="
202
218
  - !ruby/object:Gem::Version
203
- version: '0'
219
+ version: 2.2.4
204
220
  required_rubygems_version: !ruby/object:Gem::Requirement
205
221
  requirements:
206
222
  - - ">="
@@ -1,17 +0,0 @@
1
- module Spigoter
2
- module Plugins
3
- def self.get_plugin(name, data)
4
- f = nil
5
- case data['type']
6
- when 'curse'
7
- f = Spigoter::PluginCurse.new(data['url']).file
8
- when 'devbukkit'
9
- f = Spigoter::PluginBukkit.new(data['url']).file
10
- else
11
- raise "Unkown source"
12
- end
13
- hash = {:name => "#{name}.jar", :file => f}
14
- return hash
15
- end
16
- end
17
- end