class Rack::TrafficSignal::Config

Attributes

default_body[RW]
default_content_type[RW]
default_status[RW]
internal_ips[RW]
maintenance_group[R]
secret_word[RW]
skip_paths[RW]
skip_proc[RW]
skip_with_warning_proc[RW]

Public Class Methods

new() click to toggle source
# File lib/rack/traffic_signal/config.rb, line 17
def initialize
  @internal_ips = []
  @maintenance_group = { }
  @default_status = 503
  @default_content_type = 'application/json'
  @default_body = ''
  @secret_word = ''
  @skip_paths = [/^\/assets/]
  @maintenance_status_proc = ->{ [] }
  @skip_proc = ->(env){ false }
  @skip_with_warning_proc = ->(env){ false }
end

Public Instance Methods

maintenance_group=(mg) click to toggle source
# File lib/rack/traffic_signal/config.rb, line 30
def maintenance_group=(mg)
  raise Rack::TrafficSignal::Exceptions::InvalidMaintenanceGroup unless valid_maintenance_group?(mg)
  @maintenance_group = mg
end
maintenance_status() click to toggle source
# File lib/rack/traffic_signal/config.rb, line 39
def maintenance_status
  @maintenance_status_proc.call.tap do |status|
    raise Rack::TrafficSignal::Exceptions::InvalidMaintenanceStatus unless status.is_a? Array
    raise Rack::TrafficSignal::Exceptions::InvalidMaintenanceStatus unless status.all? do |state|
      state.is_a?(Symbol) && (state == :all || state.to_s =~ /\A[A-Za-z0-9]+_[A-Za-z0-9]+\z/)
    end
  end
end
maintenance_status_by(&block) click to toggle source
# File lib/rack/traffic_signal/config.rb, line 35
def maintenance_status_by(&block)
  @maintenance_status_proc = block
end
skip_by(&block) click to toggle source
# File lib/rack/traffic_signal/config.rb, line 48
def skip_by(&block)
  @skip_proc = block
end
skip_with_warning_by(&block) click to toggle source
# File lib/rack/traffic_signal/config.rb, line 52
def skip_with_warning_by(&block)
  @skip_with_warning_proc = block
end

Private Instance Methods

valid_maintenance_group?(mg) click to toggle source
# File lib/rack/traffic_signal/config.rb, line 57
def valid_maintenance_group?(mg)
  return false unless mg.is_a? Hash

  mg.values.each do |group|
    return false unless group.is_a? Hash
    group.values.each do |igroup|
      return false unless igroup.is_a? Array
      igroup.each do |setting|
        return false unless setting.key?(:methods)
        return false unless setting.key? :path
      end
    end
  end

  true

rescue
  false
end