class SmartCore::Initializer::Attribute

@api private @since 0.5.0

@api private @since 0.5.0

Constants

PRIVACY_MODES

@return [Hash<Symbol,Symbol>]

@api private @since 0.5.0

Attributes

finalizer[R]

@return [SmartCore::Initializer::Attribute::ValueFinalizer::Lambda] @return [SmartCore::Initializer::Attribute::ValueFinalizer::Method]

@api private @since 0.5.0

name[R]

@return [Symbol]

@api private @since 0.5.0

options[R]

@return [Hash<Symbol,Any>]

@api private @since 0.5.0

privacy[R]

@return [Symbol]

@api private @since 0.5.0

type[R]

@return [String, Symbol]

@api private @since 0.5.0

Public Class Methods

new(name, type, privacy, finalizer, **options) click to toggle source

@param name [String, Symbol] @param type [Symbol] (see SmartCore::Initializer::TypeSet, SmartCore::Initializer::Type) @param privacy [Symbol @param finalizer [SmartCore::Initializer::Attribute::ValueFinalizer::Lambda/Method] @param options [HAsh<Symbol,Any>] Supported options:

- :default [Proc] see #default_value

@return [void]

@api private @since 0.5.0

# File lib/smart_core/initializer/attribute.rb, line 61
def initialize(name, type, privacy, finalizer, **options)
  @name = name
  @type = type
  @privacy = privacy
  @finalizer = finalizer
  @options = options
end

Public Instance Methods

default_value() click to toggle source

@return [Any]

@raise [SmartCore::Initializer::ArgumentError]

@api private @since 0.5.0

# File lib/smart_core/initializer/attribute.rb, line 98
def default_value
  default_value = options.fetch(:default) do
    raise(SmartCore::Initializer::ArgumentError, 'Default value is not provided.')
  end

  default_value.is_a?(Proc) ? default_value.call : default_value
end
dup() click to toggle source

@return [SmartCore::Intializer::Attribute]

@api private @since 0.5.0

# File lib/smart_core/initializer/attribute.rb, line 120
def dup
  self.class.new(name, type, privacy, finalizer, **options)
end
finalize(value, instance) click to toggle source

@param value [Any] @param instance [Any] @return [Any]

@api private @since 0.5.0

# File lib/smart_core/initializer/attribute.rb, line 112
def finalize(value, instance)
  finalizer.finalize(value, instance)
end
has_default_value?() click to toggle source

@return [Boolean]

@api private @since 0.5.0

# File lib/smart_core/initializer/attribute.rb, line 73
def has_default_value?
  options.key?(:default)
end
validate_value_type!(value) click to toggle source

@param value [Any] @return [void]

@api private @since 0.5.0

# File lib/smart_core/initializer/attribute.rb, line 82
def validate_value_type!(value)
  type_checker = SmartCore::Initializer.get_type(type)

  raise(
    SmartCore::Initializer::ArgumentError,
    "Incorrect type of <#{name}> attribute " \
    "(given: #{value.class}, expected: :#{type_checker.name})"
  ) unless type_checker.comparable?(value)
end