class SmartCore::Initializer::Attribute::Factory

@api private @since 0.1.0 rubocop:disable Metrics/ClassLength

Public Class Methods

create(name, type, type_system, privacy, finalize, cast, read_only, as, dynamic_options) click to toggle source

@param name [String, Symbol] @param type [String, Symbol, Any] @param type_system [String, Symbol] @param privacy [String, Symbol] @param finalize [String, Symbol, Proc] @param cast [Boolean] @param read_only [Boolean] @param as [String, Symbol, NilClass] @param dynamic_options [Hash<Symbol,Any>] @return [SmartCore::Initializer::Attribute]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 21
def create(name, type, type_system, privacy, finalize, cast, read_only, as, dynamic_options)
  prepared_name            = prepare_name_param(name)
  prepared_privacy         = prepare_privacy_param(privacy)
  prepared_finalize        = prepare_finalize_param(finalize)
  prepared_cast            = prepare_cast_param(cast)
  prepared_type_system     = prepare_type_system_param(type_system)
  prepared_type            = prepare_type_param(type, prepared_type_system)
  prepared_read_only       = prepare_read_only_param(read_only)
  prepared_as              = preapre_as_param(as)
  prepared_dynamic_options = prepare_dynamic_options_param(dynamic_options)

  create_attribute(
    prepared_name,
    prepared_type,
    prepared_type_system,
    prepared_privacy,
    prepared_finalize,
    prepared_cast,
    prepared_read_only,
    prepared_as,
    prepared_dynamic_options
  )
end

Private Class Methods

create_attribute(name, type, type_system, privacy, finalize, cast, read_only, as, dynamic_options) click to toggle source

@param name [String] @param type [SmartCore::Initializer::TypeSystem::Interop] @param type_system [Class<SmartCore::Initializer::TypeSystem::Interop>] @param privacy [Symbol] @param finalize [SmartCore::Initializer::Attribute::Finalizer::AnonymousBlock/InstanceMethod] @param cast [Boolean] @param dynamic_options [Hash<Symbol,String>] @return [SmartCore::Initializer::Attribute]

@api private @since 0.1.0 rubocop:disable Layout/LineLength

# File lib/smart_core/initializer/attribute/factory.rb, line 196
def create_attribute(name, type, type_system, privacy, finalize, cast, read_only, as, dynamic_options)
  SmartCore::Initializer::Attribute.new(
    name, type, type_system, privacy, finalize, cast, read_only, as, dynamic_options
  )
end
preapre_as_param(as) click to toggle source

@param [String, Symbol, NilClass] @return [String, Symbol, NilClass]

@api private @since 0.4.0

# File lib/smart_core/initializer/attribute/factory.rb, line 148
    def preapre_as_param(as)
      unless as.is_a?(NilClass) || as.is_a?(String) || as.is_a?(Symbol)
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          Attribute alias should be a type of String or Symbol
        ERROR_MESSAGE
      end

      as
    end
prepare_cast_param(cast) click to toggle source

@param cast [Boolean] @return [Boolean]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 84
    def prepare_cast_param(cast)
      unless cast.is_a?(TrueClass) || cast.is_a?(FalseClass)
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          Attribute cast should be a type of boolean
        ERROR_MESSAGE
      end

      cast
    end
prepare_dynamic_options_param(dynamic_options) click to toggle source

@param dynamic_options [Hash<Symbol,Any>] @return [Hash<Symbol,Any>]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 163
    def prepare_dynamic_options_param(dynamic_options)
      # :nocov:
      unless dynamic_options.is_a?(Hash)
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          Attribute dynamic options should be a type of Hash
        ERROR_MESSAGE
      end
      # :nocov:

      dynamic_options
    end
prepare_finalize_param(finalize) click to toggle source

@param finalize [String, Symbol, Proc] @return [SmartCore::Initializer::Attribute::Finalizer::AnonymousBlock/InstanceMethod]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 118
    def prepare_finalize_param(finalize)
      unless finalize.is_a?(String) || finalize.is_a?(Symbol) || finalize.is_a?(Proc)
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          Attribute finalizer should be a type of String, Symbol or Proc
        ERROR_MESSAGE
      end

      SmartCore::Initializer::Attribute::Finalizer.create(finalize)
    end
prepare_name_param(name) click to toggle source

@param name [String, Symbol] @return [Symbol]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 52
    def prepare_name_param(name)
      unless name.is_a?(String) || name.is_a?(Symbol)
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          Attribute name should be a type of String or Symbol
        ERROR_MESSAGE
      end

      name.to_sym
    end
prepare_privacy_param(privacy) click to toggle source

@param privacy [String, Symbol] @return [Symbol]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 99
    def prepare_privacy_param(privacy)
      unless privacy.is_a?(String) || privacy.is_a?(Symbol)
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          Attribute privacy should be a type of String or Symbol
        ERROR_MESSAGE
      end

      SmartCore::Initializer::Attribute::Parameters::PRIVACY_MODES.fetch(privacy.to_sym) do
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          Incorrect attribute privacy identifier "#{privacy}"
        ERROR_MESSAGE
      end
    end
prepare_read_only_param(read_only) click to toggle source

@param read_only [Boolean] @return [Boolean]

@api private @since 0.4.0

# File lib/smart_core/initializer/attribute/factory.rb, line 133
    def prepare_read_only_param(read_only)
      unless read_only.is_a?(FalseClass) || read_only.is_a?(TrueClass)
        raise(SmartCore::Initializer::ArgumentError, <<~ERROR_MESSAGE)
          :read_only attribute should be a type of boolean
        ERROR_MESSAGE
      end

      read_only
    end
prepare_type_param(type, type_system) click to toggle source

@param type [String, Symbol, Any] @param type_system [Class<SmartCore::Initializer::TypeSystem::Interop>] @return [SmartCore::Initializer::TypeSystem::Interop]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 68
def prepare_type_param(type, type_system)
  type_primitive =
    if type.is_a?(String) || type.is_a?(Symbol)
      type_system.type_from_alias(type)
    else
      type
    end

  type_system.create(type_primitive)
end
prepare_type_system_param(type_system) click to toggle source

@param type_system [String, Symbol] @return [Class<SmartCore::Initializer::TypeSystem::Interop>]

@api private @since 0.1.0

# File lib/smart_core/initializer/attribute/factory.rb, line 180
def prepare_type_system_param(type_system)
  SmartCore::Initializer::TypeSystem.resolve(type_system)
end