lumia-server 1.0.4.alpha → 1.0.5.alpha
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.
- checksums.yaml +4 -4
- data/lib/lumia-server/cli.rb +5 -0
- data/lib/lumia-server/command/build.rb +33 -23
- data/lib/lumia-server/command/command.rb +1 -5
- data/lib/lumia-server/command/exec.rb +4 -4
- data/lib/lumia-server/platform.rb +27 -4
- data/lib/lumia-server/platform/bungeecord.rb +22 -0
- data/lib/lumia-server/platform/paper.rb +3 -3
- data/lib/lumia-server/platform/waterfall.rb +22 -0
- data/lib/lumia-server/plugin.rb +22 -2
- data/lib/lumia-server/provider.rb +4 -1
- data/lib/lumia-server/provider/direct.rb +11 -3
- data/lib/lumia-server/server.rb +3 -4
- data/lib/lumia-server/version.rb +1 -1
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 03e8ad8c87bc37b94d443304ec4273f84b85890290a8f46cd828d7f7688f1c26
         | 
| 4 | 
            +
              data.tar.gz: fb1dfa3bd744e88de8057e3c05378b600fa1fce130bd346bc1ae00dab77d83c8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ad4532457c6d7e84b6e91d4c91939e11b905cf1da369c3f5fce718235e9bf5c41ce9eeb08a79c17747f59f6c942351949bc3e05a88710986032a0ee87ab2e78a
         | 
| 7 | 
            +
              data.tar.gz: 0590c5fbbdf5c191cba84561cf3e5d32d4472f63a3786ccf4d793ed8aa9d1db1128ebd4732208bfa71464f48598222fc2b3b8985372653ffe27b02dae6980a66
         | 
    
        data/lib/lumia-server/cli.rb
    CHANGED
    
    
| @@ -5,38 +5,48 @@ module LumiaServer | |
| 5 5 | 
             
                class Build < Command
         | 
| 6 6 |  | 
| 7 7 | 
             
                  require 'erb'
         | 
| 8 | 
            +
                  require 'yaml'
         | 
| 8 9 |  | 
| 9 10 | 
             
                  def run
         | 
| 10 | 
            -
                    error('server.json was not found') unless File.exist?('server.json')
         | 
| 11 | 
            +
                    LumiaServer::CLI.error('server.json was not found') unless File.exist?('server.json')
         | 
| 11 12 | 
             
                    @data = JSON.parse(File.read('server.json'))
         | 
| 12 13 |  | 
| 13 | 
            -
                     | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                       | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
                        File. | 
| 23 | 
            -
                           | 
| 24 | 
            -
                          File. | 
| 25 | 
            -
             | 
| 14 | 
            +
                    time = Benchmark.realtime {
         | 
| 15 | 
            +
                      puts 'Initialising server..'
         | 
| 16 | 
            +
                      yaml_file = File.join('build', '.lumia', 'server.yml')
         | 
| 17 | 
            +
                      yaml = File.exist?(yaml_file) ? YAML.load(File.open(yaml_file)) : nil
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      @server = Server.new(@data, yaml)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                      puts 'Copying files..'
         | 
| 22 | 
            +
                      Dir.glob("src/**/*").each do |file|
         | 
| 23 | 
            +
                        unless File.directory?(file)
         | 
| 24 | 
            +
                          out = file.sub('src', 'build')
         | 
| 25 | 
            +
                          out = File.join(File.dirname(out), File.basename(out, '.erb'))
         | 
| 26 | 
            +
                          FileUtils.mkdir_p File.dirname(out)
         | 
| 27 | 
            +
                          File.open(file) do |fh|
         | 
| 28 | 
            +
                            erb = ERB.new(fh.read)
         | 
| 29 | 
            +
                            File.open(out, 'w') do |f|
         | 
| 30 | 
            +
                              f.write erb.result(binding)
         | 
| 31 | 
            +
                            end
         | 
| 26 32 | 
             
                          end
         | 
| 27 33 | 
             
                        end
         | 
| 28 34 | 
             
                      end
         | 
| 29 | 
            -
                    end
         | 
| 30 35 |  | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 36 | 
            +
                      @server.install_platform
         | 
| 37 | 
            +
                      @server.install_mods
         | 
| 33 38 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 39 | 
            +
                      update_yaml = {}
         | 
| 40 | 
            +
                      update_yaml[@server.platform.name] = @server.platform.id
         | 
| 41 | 
            +
                      @server.mods.each { |m|
         | 
| 42 | 
            +
                        unless m.provider.nil?
         | 
| 43 | 
            +
                          update_yaml[m.name] = m.id
         | 
| 44 | 
            +
                        end
         | 
| 45 | 
            +
                      }
         | 
| 46 | 
            +
                      FileUtils.mkdir_p File.dirname(yaml_file)
         | 
| 47 | 
            +
                      File.open(yaml_file, 'w') { |f| f.write update_yaml.to_yaml }
         | 
| 48 | 
            +
                    }
         | 
| 49 | 
            +
                    puts "Done. Server has been installed (#{time.round(3)}s)."
         | 
| 40 50 | 
             
                  end
         | 
| 41 51 | 
             
                end
         | 
| 42 52 | 
             
              end
         | 
| @@ -6,6 +6,7 @@ module LumiaServer | |
| 6 6 |  | 
| 7 7 | 
             
                  require 'fileutils'
         | 
| 8 8 | 
             
                  require 'json'
         | 
| 9 | 
            +
                  require 'benchmark'
         | 
| 9 10 |  | 
| 10 11 | 
             
                  attr_reader :args
         | 
| 11 12 | 
             
                  attr_reader :options
         | 
| @@ -15,11 +16,6 @@ module LumiaServer | |
| 15 16 | 
             
                    @options = options
         | 
| 16 17 | 
             
                  end
         | 
| 17 18 |  | 
| 18 | 
            -
                  def error(message)
         | 
| 19 | 
            -
                    puts "Error: #{message}"
         | 
| 20 | 
            -
                    exit 1
         | 
| 21 | 
            -
                  end
         | 
| 22 | 
            -
             | 
| 23 19 | 
             
                  def run; end
         | 
| 24 20 | 
             
                end
         | 
| 25 21 | 
             
              end
         | 
| @@ -3,7 +3,7 @@ module LumiaServer | |
| 3 3 | 
             
                class Exec < Command
         | 
| 4 4 |  | 
| 5 5 | 
             
                  def run
         | 
| 6 | 
            -
                    error('No script name provided') unless @args[0]
         | 
| 6 | 
            +
                    LumiaServer::CLI.error('No script name provided') unless @args[0]
         | 
| 7 7 |  | 
| 8 8 | 
             
                    file = File.join(Dir.pwd, 'scripts', @args[0])
         | 
| 9 9 | 
             
                    server = File.join(Dir.pwd, 'server.json')
         | 
| @@ -12,11 +12,11 @@ module LumiaServer | |
| 12 12 | 
             
                      if File.exist?(file)
         | 
| 13 13 | 
             
                        exec "bash #{file}"
         | 
| 14 14 | 
             
                      else
         | 
| 15 | 
            -
                        error('No script name provided') unless @args[0]
         | 
| 16 | 
            -
                        error('server.json was not found') unless File.exist?(server)
         | 
| 15 | 
            +
                        LumiaServer::CLI.error('No script name provided') unless @args[0]
         | 
| 16 | 
            +
                        LumiaServer::CLI.error('server.json was not found') unless File.exist?(server)
         | 
| 17 17 | 
             
                        @data = JSON.parse(File.read(server))
         | 
| 18 18 | 
             
                        line = @data['scripts'][@args[0]]
         | 
| 19 | 
            -
                        error("Invalid script name: #{@args[0]}") unless line
         | 
| 19 | 
            +
                        LumiaServer::CLI.error("Invalid script name: #{@args[0]}") unless line
         | 
| 20 20 | 
             
                        exec line
         | 
| 21 21 | 
             
                      end
         | 
| 22 22 | 
             
                    end
         | 
| @@ -3,27 +3,50 @@ module LumiaServer | |
| 3 3 |  | 
| 4 4 | 
             
                require 'open-uri'
         | 
| 5 5 |  | 
| 6 | 
            +
                attr_reader :data
         | 
| 7 | 
            +
                attr_reader :server_yaml
         | 
| 8 | 
            +
             | 
| 6 9 | 
             
                attr_reader :name
         | 
| 7 10 | 
             
                attr_reader :version
         | 
| 8 11 | 
             
                attr_reader :provider
         | 
| 12 | 
            +
                attr_reader :id
         | 
| 9 13 |  | 
| 10 14 | 
             
                autoload :Custom, 'lumia-server/platform/custom'
         | 
| 11 15 | 
             
                autoload :Paper, 'lumia-server/platform/paper'
         | 
| 16 | 
            +
                autoload :BungeeCord, 'lumia-server/platform/bungeecord'
         | 
| 17 | 
            +
                autoload :Waterfall, 'lumia-server/platform/waterfall'
         | 
| 12 18 |  | 
| 13 | 
            -
                def self.new(data)
         | 
| 19 | 
            +
                def self.new(data, server_yaml)
         | 
| 14 20 | 
             
                  return super if self < Platform
         | 
| 15 21 | 
             
                  const = data['id'].to_s.downcase
         | 
| 16 22 | 
             
                  raise format('Unknown platform %p', data['id']) unless (const = constants.detect { |c| c.to_s.downcase == const })
         | 
| 17 | 
            -
                  platform = const_get(const).new(data)
         | 
| 23 | 
            +
                  platform = const_get(const).new(data, server_yaml)
         | 
| 18 24 | 
             
                  platform
         | 
| 19 25 | 
             
                end
         | 
| 20 26 |  | 
| 21 | 
            -
                def initialize(data)
         | 
| 27 | 
            +
                def initialize(data, server_yaml)
         | 
| 22 28 | 
             
                  @data = data
         | 
| 29 | 
            +
                  @server_yaml = server_yaml
         | 
| 30 | 
            +
             | 
| 23 31 | 
             
                  @version = data['version']
         | 
| 24 32 | 
             
                  @provider = data.key?('provider') ? Provider.new(@data['provider']) : nil
         | 
| 33 | 
            +
                  @id = provider.nil? ? version : provider.id
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def install
         | 
| 37 | 
            +
                  if needs_update
         | 
| 38 | 
            +
                    puts "#{name}: updating.."
         | 
| 39 | 
            +
                    install_platform
         | 
| 40 | 
            +
                  else
         | 
| 41 | 
            +
                    puts "#{name}: up-to-date"
         | 
| 42 | 
            +
                  end
         | 
| 25 43 | 
             
                end
         | 
| 26 44 |  | 
| 27 | 
            -
                def  | 
| 45 | 
            +
                def needs_update
         | 
| 46 | 
            +
                  server_yaml.nil? || server_yaml[name] != id
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def install_platform;
         | 
| 50 | 
            +
                end
         | 
| 28 51 | 
             
              end
         | 
| 29 52 | 
             
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            module LumiaServer
         | 
| 2 | 
            +
              class Platform
         | 
| 3 | 
            +
                class BungeeCord < Platform
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  URL = 'https://ci.md-5.net/job/BungeeCord/lastStableBuild/artifact/bootstrap/target/BungeeCord.jar'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def initialize(data, server_yaml)
         | 
| 8 | 
            +
                    super
         | 
| 9 | 
            +
                    @name = 'BungeeCord'
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def install_platform
         | 
| 13 | 
            +
                    file = 'BungeeCord.jar'
         | 
| 14 | 
            +
                    if provider.nil?
         | 
| 15 | 
            +
                      IO.copy_stream(open(URL), File.join('build', file))
         | 
| 16 | 
            +
                    else
         | 
| 17 | 
            +
                      provider.install('build', file)
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| @@ -3,19 +3,19 @@ module LumiaServer | |
| 3 3 | 
             
                class Paper < Platform
         | 
| 4 4 |  | 
| 5 5 | 
             
                  VERSIONS = {
         | 
| 6 | 
            -
                      '1.12.2' => 'https://ci.destroystokyo.com/job/PaperSpigot/ | 
| 6 | 
            +
                      '1.12.2' => 'https://ci.destroystokyo.com/job/PaperSpigot/1294/artifact/paperclip.jar',
         | 
| 7 7 | 
             
                      '1.11.2' => 'https://ci.destroystokyo.com/job/PaperSpigot/1104/artifact/paperclip.jar',
         | 
| 8 8 | 
             
                      '1.10.2' => 'https://ci.destroystokyo.com/job/PaperSpigot/916/artifact/paperclip.jar',
         | 
| 9 9 | 
             
                      '1.9.4' => 'https://ci.destroystokyo.com/job/PaperSpigot/773/artifact/paperclip.jar',
         | 
| 10 10 | 
             
                      '1.8.8' => 'https://ci.destroystokyo.com/job/PaperSpigot/443/artifact/paperclip.jar'
         | 
| 11 11 | 
             
                  }.freeze
         | 
| 12 12 |  | 
| 13 | 
            -
                  def initialize(data)
         | 
| 13 | 
            +
                  def initialize(data, server_yaml)
         | 
| 14 14 | 
             
                    super
         | 
| 15 15 | 
             
                    @name = 'Paper'
         | 
| 16 16 | 
             
                  end
         | 
| 17 17 |  | 
| 18 | 
            -
                  def  | 
| 18 | 
            +
                  def install_platform
         | 
| 19 19 | 
             
                    if provider.nil?
         | 
| 20 20 | 
             
                      if VERSIONS.key?(version)
         | 
| 21 21 | 
             
                        file = 'paperclip.jar'
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            module LumiaServer
         | 
| 2 | 
            +
              class Platform
         | 
| 3 | 
            +
                class Waterfall < Platform
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  URL = 'https://ci.destroystokyo.com/job/Waterfall/lastStableBuild/artifact/Waterfall-Proxy/bootstrap/target/Waterfall.jar'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def initialize(data, server_yaml)
         | 
| 8 | 
            +
                    super
         | 
| 9 | 
            +
                    @name = 'Waterfall'
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def install_platform
         | 
| 13 | 
            +
                    file = 'Waterfall.jar'
         | 
| 14 | 
            +
                    if provider.nil?
         | 
| 15 | 
            +
                      IO.copy_stream(open(URL), File.join('build', file))
         | 
| 16 | 
            +
                    else
         | 
| 17 | 
            +
                      provider.install('build', file)
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        data/lib/lumia-server/plugin.rb
    CHANGED
    
    | @@ -1,21 +1,41 @@ | |
| 1 1 | 
             
            module LumiaServer
         | 
| 2 2 | 
             
              class Plugin
         | 
| 3 3 |  | 
| 4 | 
            +
                attr_reader :data
         | 
| 5 | 
            +
                attr_reader :server_yaml
         | 
| 6 | 
            +
             | 
| 4 7 | 
             
                attr_reader :name
         | 
| 5 8 | 
             
                attr_reader :version
         | 
| 6 9 | 
             
                attr_reader :provider
         | 
| 10 | 
            +
                attr_reader :id
         | 
| 7 11 |  | 
| 8 | 
            -
                def initialize(data)
         | 
| 12 | 
            +
                def initialize(data, server_yaml)
         | 
| 9 13 | 
             
                  @data = data
         | 
| 14 | 
            +
                  @server_yaml = server_yaml
         | 
| 15 | 
            +
             | 
| 10 16 | 
             
                  @name = data['name']
         | 
| 11 17 | 
             
                  @version = data['version']
         | 
| 12 18 | 
             
                  @provider = data.key?('provider') ? Provider.new(@data['provider']) : nil
         | 
| 19 | 
            +
                  @id = provider.nil? ? version : provider.id
         | 
| 13 20 | 
             
                end
         | 
| 14 21 |  | 
| 15 22 | 
             
                def install
         | 
| 16 23 | 
             
                  unless provider.nil?
         | 
| 17 | 
            -
                     | 
| 24 | 
            +
                    if needs_update
         | 
| 25 | 
            +
                      puts "#{name}: updating.."
         | 
| 26 | 
            +
                      install_mod
         | 
| 27 | 
            +
                    else
         | 
| 28 | 
            +
                      puts "#{name}: up-to-date"
         | 
| 29 | 
            +
                    end
         | 
| 18 30 | 
             
                  end
         | 
| 19 31 | 
             
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def needs_update
         | 
| 34 | 
            +
                  server_yaml.nil? || server_yaml[name] != id
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                def install_mod
         | 
| 38 | 
            +
                  provider.install(File.join('build', 'plugins'))
         | 
| 39 | 
            +
                end
         | 
| 20 40 | 
             
              end
         | 
| 21 41 | 
             
            end
         | 
| @@ -5,6 +5,9 @@ module LumiaServer | |
| 5 5 |  | 
| 6 6 | 
             
                autoload :Direct, 'lumia-server/provider/direct'
         | 
| 7 7 |  | 
| 8 | 
            +
                attr_reader :data
         | 
| 9 | 
            +
                attr_reader :id
         | 
| 10 | 
            +
             | 
| 8 11 | 
             
                def self.new(data)
         | 
| 9 12 | 
             
                  return super if self < Provider
         | 
| 10 13 | 
             
                  const = data['id'].to_s.downcase
         | 
| @@ -17,6 +20,6 @@ module LumiaServer | |
| 17 20 | 
             
                  @data = data
         | 
| 18 21 | 
             
                end
         | 
| 19 22 |  | 
| 20 | 
            -
                def install(dir, force = true); end
         | 
| 23 | 
            +
                def install(dir, file = nil, force = true); end
         | 
| 21 24 | 
             
              end
         | 
| 22 25 | 
             
            end
         | 
| @@ -2,10 +2,18 @@ module LumiaServer | |
| 2 2 | 
             
              class Provider
         | 
| 3 3 | 
             
                class Direct < Provider
         | 
| 4 4 |  | 
| 5 | 
            -
                  def  | 
| 6 | 
            -
                     | 
| 5 | 
            +
                  def initialize(data)
         | 
| 6 | 
            +
                    super
         | 
| 7 | 
            +
                    @id = data['url']
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def install(dir, file = nil, force = true)
         | 
| 11 | 
            +
                    name = data['file'].nil? ? file : data['file']
         | 
| 12 | 
            +
                    LumiaServer::CLI.error('No file name provided for provider \'direct\'') if name.nil?
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    file = dir.nil? ? name : File.join(dir, name)
         | 
| 7 15 | 
             
                    if !File.exist?(file) || force
         | 
| 8 | 
            -
                      IO.copy_stream(open( | 
| 16 | 
            +
                      IO.copy_stream(open(data['url']), file)
         | 
| 9 17 | 
             
                    end
         | 
| 10 18 | 
             
                  end
         | 
| 11 19 | 
             
                end
         | 
    
        data/lib/lumia-server/server.rb
    CHANGED
    
    | @@ -10,12 +10,12 @@ module LumiaServer | |
| 10 10 | 
             
                attr_reader :platform
         | 
| 11 11 | 
             
                attr_reader :mods
         | 
| 12 12 |  | 
| 13 | 
            -
                def initialize(data)
         | 
| 14 | 
            -
                  @platform = Platform.new(data['platform'])
         | 
| 13 | 
            +
                def initialize(data, server_yaml)
         | 
| 14 | 
            +
                  @platform = Platform.new(data['platform'], server_yaml)
         | 
| 15 15 | 
             
                  @mods = []
         | 
| 16 16 | 
             
                  if data.key?('mods')
         | 
| 17 17 | 
             
                    data['mods'].each do |mod|
         | 
| 18 | 
            -
                      @mods << Plugin.new(mod)
         | 
| 18 | 
            +
                      @mods << Plugin.new(mod, server_yaml)
         | 
| 19 19 | 
             
                    end
         | 
| 20 20 | 
             
                  end
         | 
| 21 21 | 
             
                end
         | 
| @@ -39,7 +39,6 @@ module LumiaServer | |
| 39 39 |  | 
| 40 40 | 
             
                def install_mods
         | 
| 41 41 | 
             
                  mods.each do |mod|
         | 
| 42 | 
            -
                    puts "Installing #{mod.name}.."
         | 
| 43 42 | 
             
                    mod.install
         | 
| 44 43 | 
             
                  end
         | 
| 45 44 | 
             
                end
         | 
    
        data/lib/lumia-server/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: lumia-server
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.5.alpha
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Conreptio
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2018-01-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         | 
| @@ -54,8 +54,10 @@ files: | |
| 54 54 | 
             
            - lib/lumia-server/command/exec.rb
         | 
| 55 55 | 
             
            - lib/lumia-server/command/start.rb
         | 
| 56 56 | 
             
            - lib/lumia-server/platform.rb
         | 
| 57 | 
            +
            - lib/lumia-server/platform/bungeecord.rb
         | 
| 57 58 | 
             
            - lib/lumia-server/platform/custom.rb
         | 
| 58 59 | 
             
            - lib/lumia-server/platform/paper.rb
         | 
| 60 | 
            +
            - lib/lumia-server/platform/waterfall.rb
         | 
| 59 61 | 
             
            - lib/lumia-server/plugin.rb
         | 
| 60 62 | 
             
            - lib/lumia-server/provider.rb
         | 
| 61 63 | 
             
            - lib/lumia-server/provider/direct.rb
         |