Sha256: 1e2c7df864ff10319b257353a9b5887e1e260c0c8b59067eba16033ea6e892ed

Contents?: true

Size: 826 Bytes

Versions: 2

Compression:

Stored size: 826 Bytes

Contents

# frozen_string_literal: true

class Cryptoform::Config::Builder
  PORTS = 1..65_535
  Config = Data.define(:port, :states)

  def initialize(cryptofile)
    @port = 3000
    @states = {}

    instance_eval(cryptofile)
  end

  def port(port)
    @port = port
  end

  def state(name, &)
    name = name.to_sym

    raise ArgumentError, "state #{name} already configured" if @states.key?(name)

    @states[name] = Cryptoform::Config::StateConfigBuilder.new(name, &)
  end

  def validate!
    @states.each_value(&:validate!)
    raise Cryptoform::ConfigValidationError, "at least one state must be configured" if @states.empty?
    raise Cryptoform::ConfigValidationError, "port must be an in range 0-65545" unless PORTS.include?(@port)
  end

  def config
    Config.new(@port, @states.transform_values(&:config))
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cryptoform-0.5.1 lib/cryptoform/config/builder.rb
cryptoform-0.5.0 lib/cryptoform/config/builder.rb