module Gapic::Config

def config_attr name, default, *valid_values, &validator

Parameters:
  • valid_values (Array) -- A list of valid types
  • default (Object, nil) -- Initial value (nil is allowed)
  • name (String, Symbol) -- The name of the option
def config_attr name, default, *valid_values, &validator
  name = String(name).to_sym
  name_setter = :"#{name}="
  raise NameError, "invalid config name #{name}" if name !~ /^[a-zA-Z]\w*$/ || name == :parent_config
  raise NameError, "method #{name} already exists" if method_defined? name
  raise NameError, "method #{name_setter} already exists" if method_defined? name_setter
  raise ArgumentError, "validation must be provided" if validator.nil? && valid_values.empty?
  validator ||= ->(value) { valid_values.any? { |v| v === value } }
  name_ivar = :"@#{name}"
  create_getter name_ivar, name, default
  create_setter name_ivar, name_setter, default, validator
end