Sha256: 2b59ad5814df69de7f3cd2eb3d4114967ea95e7bd33c2858938cfcc0d3799287

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

require "ipaddr"

class Loadbalancers::CreateForm < MVCLI::Form
  requires :naming

  input :name, String, default: -> {naming.generate_name 'l', 'b'}

  input :port, Integer, default: 80, decode: ->(s) {Integer s}

  input :protocol, String, default: 'HTTP', decode: :upcase

  input :virtual_ips, [String], default: ['PUBLIC']

  input :nodes, [Node], required: true do
    input :address, IPAddr, required: true, decode: ->(s) {IPAddr.new s}
    input :port, Integer, default: 80, decode: ->(s) {Integer s}
    input :type, String, default: 'PRIMARY', decode: :upcase
    input :condition, String, default: 'ENABLED', decode: :upcase

    validates(:port, "port must be between 0 and 65,535") {|port| port >= 0 && port <= 65535}
    validates(:type, "invalid type") {|type| ['PRIMARY', 'SECONDARY'].member? type}
    validates(:condition, "invalid condition") {|c| ['ENABLED', 'DISABLED'].member? c}
  end

  validates(:nodes, "at least one node must be enabled") { |nodes|
    nodes.any? {|n| n.condition == 'ENABLED'}
  }

  output do |form|
    form.attributes.merge attrs = {
      virtual_ips: form.virtual_ips.map {|t| Map(type: t)},
      nodes: form.nodes.map(&:attributes)
    }
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rumm-0.0.3 app/forms/loadbalancers/create_form.rb