Class: Railsmith::BaseService::InputDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/railsmith/base_service/input_definition.rb

Overview

Value object representing a single declared input on a service.

Constant Summary collapse

UNSET =

Sentinel distinguishing “no default set” from “default: nil”. Not private — referenced as the keyword-arg default in InputDsl#input.

Object.new.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, type, **options) ⇒ InputDefinition

Returns a new instance of InputDefinition.

Parameters:

  • name (Symbol, String)

    input key

  • type (Class, Symbol)

    expected type (e.g. String, Integer, :boolean)

  • required (Boolean)

    whether absence is a validation error

  • default (Object, Proc)

    static value or lambda called to produce default

  • options (Hash)

    supported keys: :required, :default, :in, :transform



18
19
20
21
22
23
24
25
26
# File 'lib/railsmith/base_service/input_definition.rb', line 18

def initialize(name, type, **options)
  @name      = name.to_sym
  @type      = type
  @required  = options.fetch(:required, false)
  @default   = options.fetch(:default, UNSET)
  @in_values = options[:in]
  @transform = options[:transform]
  freeze
end

Instance Attribute Details

#defaultObject (readonly)

Returns the value of attribute default.



11
12
13
# File 'lib/railsmith/base_service/input_definition.rb', line 11

def default
  @default
end

#in_valuesObject (readonly)

Returns the value of attribute in_values.



11
12
13
# File 'lib/railsmith/base_service/input_definition.rb', line 11

def in_values
  @in_values
end

#nameObject (readonly)

Returns the value of attribute name.



11
12
13
# File 'lib/railsmith/base_service/input_definition.rb', line 11

def name
  @name
end

#requiredObject (readonly)

Returns the value of attribute required.



11
12
13
# File 'lib/railsmith/base_service/input_definition.rb', line 11

def required
  @required
end

#transformObject (readonly)

Returns the value of attribute transform.



11
12
13
# File 'lib/railsmith/base_service/input_definition.rb', line 11

def transform
  @transform
end

#typeObject (readonly)

Returns the value of attribute type.



11
12
13
# File 'lib/railsmith/base_service/input_definition.rb', line 11

def type
  @type
end

Instance Method Details

#default?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/railsmith/base_service/input_definition.rb', line 28

def default?
  !@default.equal?(UNSET)
end

#resolve_defaultObject



32
33
34
# File 'lib/railsmith/base_service/input_definition.rb', line 32

def resolve_default
  default.respond_to?(:call) ? default.call : default
end