Class: Middleman::PreviewServer::ServerInformation

Inherits:
Object
  • Object
show all
Defined in:
middleman-core/lib/middleman-core/preview_server/server_information.rb

Overview

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

  • server name
  • bind address
  • port

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options_hash = ::Middleman::EMPTY_HASH) ⇒ ServerInformation


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 25

def initialize(options_hash = ::Middleman::EMPTY_HASH)
  @resolver     = options_hash.fetch(:resolver, DnsResolver.new)
  @validator    = options_hash.fetch(:validator, ServerInformationValidator.new)
  @network_interface_inventory = options_hash.fetch(:network_interface_inventory, NetworkInterfaceInventory.new)
  @tcp_port_prober = options_hash.fetch(:tcp_port_prober, TcpPortProber.new)

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

Instance Attribute Details

#https=(value) ⇒ Object (writeonly)

Sets the attribute https


23
24
25
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 23

def https=(value)
  @https = value
end

Instance Method Details

#bind_addressString

The bind address of server


118
119
120
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 118

def bind_address
  information.bind_address
end

#handlerString

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


83
84
85
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 83

def handler
  information.class.to_s
end

#https?Boolean

Is https enabled?


148
149
150
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 148

def https?
  @https == true
end

#informationObject

The information

Is cached


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'middleman-core/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

#listenersArray

A list of listeners


143
144
145
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 143

def listeners
  information.listeners
end

#portInteger

The port on which the server should listen


126
127
128
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 126

def port
  information.port
end

#reasonString

The reason why the information is NOT valid


102
103
104
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 102

def reason
  information.reason
end

#server_nameString

The server name


110
111
112
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 110

def server_name
  information.server_name
end

#site_addressesArray

A list of site addresses


135
136
137
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 135

def site_addresses
  information.site_addresses
end

#use(config) ⇒ Object

Use a middleman configuration to get information


65
66
67
68
69
70
71
72
73
74
75
# File 'middleman-core/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?TrueClass, FalseClass

Is the server information valid?

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


94
95
96
# File 'middleman-core/lib/middleman-core/preview_server/server_information.rb', line 94

def valid?
  information.valid?
end