class Marv::Server::Create

Public Class Methods

new(server) click to toggle source

Initialize server creator

# File lib/marv/server/create.rb, line 8
def initialize(server)
  @server = server
  @task = server.task
  @global = Marv::Global.new(server.task)
  @name = server.name
  @path = server.path
  @database = server.database
  @config = server.config

  create_server
end

Public Instance Methods

add_config_files() click to toggle source

Add configuration files

# File lib/marv/server/create.rb, line 100
def add_config_files
  layouts = ::File.join(Marv.root, 'layouts', 'config')

  @global.template ::File.join(layouts, 'server.rb'), ::File.join(@path, 'config.rb'), @server.context
  @global.template ::File.join(layouts, 'router.php'), ::File.join(@path, 'router.php'), @server.context
  @global.template ::File.join(layouts, 'wp-config.php'), ::File.join(@path, 'wp-config.php'), @server.context
end
copy_wordpress_files() click to toggle source

Copy WordPress files

# File lib/marv/server/create.rb, line 82
def copy_wordpress_files
  package = download_wordpress
  tmp_dir = ::File.expand_path "/tmp/wordpress-latest-#{Time.now.to_i}"
  @task.empty_directory tmp_dir unless ::File.directory?(tmp_dir)

  # Extract package to temporary dir
  ::Zip.on_exists_proc = true
  ::Zip::File.open(package) do |zip_file|
    zip_file.each do |entry|
      entry.extract(::File.join(tmp_dir, entry.to_s))
    end
  end

  @task.directory ::File.join(tmp_dir, 'wordpress'), @path
  @task.remove_dir tmp_dir
end
create_hotel_server() click to toggle source

Create hotel server

# File lib/marv/server/create.rb, line 109
def create_hotel_server
  @task.say_warning "Hotel package detected on your system.", false

  if @task.yes?("Would you like to create a hotel server?")
    begin
      `hotel add 'php -S 127.0.0.1:$PORT' --port #{@server.port} --dir #{@server.path}`
      @task.say_success "Hotel server created successfully!", false
    rescue Exception => e
      @task.say_error "There was an error while creating hotel server:", e.message, false
    end
  end
end
create_server() click to toggle source

Create server

# File lib/marv/server/create.rb, line 21
def create_server
  if ::File.exists?(@server.config_file)
    @task.say_error "A server with the name #{@name} already exists!"
    abort
  end

  @config.merge! @server.server_options

  begin
    @task.shell.mute do
      create_server_dir
      copy_wordpress_files
      @server.create_database
      add_config_files
    end
  rescue Exception => e
    @task.say_error "Error while creating server:", e.message
    abort
  end

  @task.say_success "Server #{@name} created successfully!"

  if @task.exec_exixts?('hotel')
    create_hotel_server
  else
    start_server
  end
end
create_server_dir() click to toggle source

Creates a directory for a new server

# File lib/marv/server/create.rb, line 59
def create_server_dir
  @task.remove_dir @path
  @task.empty_directory @path
end
download_wordpress() click to toggle source

Downloads WordPress from wordpress.org

# File lib/marv/server/create.rb, line 65
def download_wordpress
  package = "/tmp/wordpress-#{@config[:wp_version]}.zip"
  # Download package file
  if ::File.exists?(package)
    @task.say_warning "WordPress is already downloaded...", false, true
  else ::File.exists?(package)
    @task.say_info "Downloading WordPress...", false, true

    @task.get "https://wordpress.org/wordpress-#{@config[:wp_version]}.zip" do |content|
      @task.create_file package, content
    end
  end
  # Return package file
  package
end
start_server() click to toggle source

Starts the new server

# File lib/marv/server/create.rb, line 51
def start_server
  if @task.said_yes?("Would you like to start #{@name} server?")
    action = Marv::Server::Actions.new(@server)
    action.start(false)
  end
end