class Middleman::PreviewServer::ServerInformation

This class holds all information which the preview server needs to setup a listener

Furthermore it probes for a free tcp port, if the default one 4567 is not available.

Attributes

https[W]
informations[R]
network_interface_inventory[R]
resolver[R]
tcp_port_prober[R]
validator[R]

Public Class Methods

new(opts={}) click to toggle source
# File lib/middleman-core/preview_server/server_information.rb, line 25
def initialize(opts={})
  @resolver     = opts.fetch(:resolver, DnsResolver.new)
  @validator    = opts.fetch(:validator, ServerInformationValidator.new)
  @network_interface_inventory = opts.fetch(:network_interface_inventory, NetworkInterfaceInventory.new)
  @tcp_port_prober = opts.fetch(:tcp_port_prober, TcpPortProber.new)

  @informations = []
  @informations << AllInterfaces
  @informations << AllIpv4Interfaces
  @informations << AllIpv6Interfaces
  @informations << ServerNameIsIpInformation
  @informations << ServerNameInformation
  @informations << BindAddressInformation
  @informations << BindAddressAndServerNameInformation
  @informations << DefaultInformation
end

Public Instance Methods

bind_address() click to toggle source

The bind address of server

@return [String]

The bind address of the server
# File lib/middleman-core/preview_server/server_information.rb, line 118
def bind_address
  information.bind_address
end
handler() click to toggle source

Make information of internal server class avaible to make debugging easier. This can be used to log the class which was used to determine the preview server settings

@return [String]

The name of the class
# File lib/middleman-core/preview_server/server_information.rb, line 83
def handler
  information.class.to_s
end
https?() click to toggle source

Is https enabled?

# File lib/middleman-core/preview_server/server_information.rb, line 148
def https?
  @https == true
end
information() click to toggle source

The information

Is cached

# File lib/middleman-core/preview_server/server_information.rb, line 45
def information
  return @information if @information

  # The `DefaultInformation`-class always returns `true`, so there's
  # always a klass available and find will never return nil
  listener_klass = informations.find { |l| l.matches? bind_address: @bind_address, server_name: @server_name }
  @information = listener_klass.new(bind_address: @bind_address, server_name: @server_name)

  @information.show_me_network_interfaces(network_interface_inventory)
  @information.resolve_me(resolver)
  @information.port = tcp_port_prober.port(@port)
  @information.validate_me(validator)

  @information
end
listeners() click to toggle source

A list of listeners

@return [Array]

A list of bind address where the
# File lib/middleman-core/preview_server/server_information.rb, line 143
def listeners
  information.listeners
end
port() click to toggle source

The port on which the server should listen

@return [Integer]

The port number
# File lib/middleman-core/preview_server/server_information.rb, line 126
def port
  information.port
end
reason() click to toggle source

The reason why the information is NOT valid

@return [String]

The reason why the information is not valid
# File lib/middleman-core/preview_server/server_information.rb, line 102
def reason
  information.reason
end
server_name() click to toggle source

The server name

@return [String]

The name of the server
# File lib/middleman-core/preview_server/server_information.rb, line 110
def server_name
  information.server_name
end
site_addresses() click to toggle source

A list of site addresses

@return [Array]

A list of addresses which can be used to access the middleman preview
server
# File lib/middleman-core/preview_server/server_information.rb, line 135
def site_addresses
  information.site_addresses
end
use(config) click to toggle source

Use a middleman configuration to get information

@param [#[]] config

The middleman config
# File lib/middleman-core/preview_server/server_information.rb, line 65
def use(config)
  @bind_address = config[:bind_address]
  @port         = config[:port]
  @server_name  = config[:server_name]
  @https        = config[:https]

  config[:bind_address] = bind_address
  config[:port]         = port
  config[:server_name]  = server_name
  config[:https]        = https?
end
valid?() click to toggle source

Is the server information valid?

This is used to output a helpful error message, which can be stored in ‘#reason`.

@return [TrueClass, FalseClass]

The result
# File lib/middleman-core/preview_server/server_information.rb, line 94
def valid?
  information.valid?
end