Sha256: 6f5a201e8c6ce51ed844dc84709fe75c250c9a78b6fa8007944a982d8fc2d1f2

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true

require "micro/attributes/with"

module Micro
  module Attributes
    module Features
      INVALID_FEATURES = 'Invalid feature name! Available options: :initialize, :strict_initialize, :diff, :activemodel_validations'.freeze

      OPTIONS = {
        # Features
        'diff' => With::Diff,
        'initialize' => With::Initialize,
        'strict_initialize' => With::StrictInitialize,
        'activemodel_validations' => With::ActiveModelValidations,
        # Combinations
        'diff:initialize' => With::DiffAndInitialize,
        'diff:strict_initialize' => With::DiffAndStrictInitialize,
        'activemodel_validations:diff' => With::ActiveModelValidationsAndDiff,
        'activemodel_validations:initialize' => With::ActiveModelValidationsAndInitialize,
        'activemodel_validations:strict_initialize' => With::ActiveModelValidationsAndStrictInitialize,
        'activemodel_validations:diff:initialize' => With::ActiveModelValidationsAndDiffAndInitialize,
        'activemodel_validations:diff:strict_initialize' => With::ActiveModelValidationsAndDiffAndStrictInitialize
      }.freeze

      private_constant :OPTIONS

      def self.all
        With::ActiveModelValidationsAndDiffAndInitialize
      end

      def self.with(names)
        option = OPTIONS[names.map { |name| name.to_s.downcase }.sort.join(':')]
        return option if option
        raise ArgumentError, INVALID_FEATURES
      end

      def self.options(init, diff, activemodel_validations)
        [init].tap do |options|
          options << :diff if diff
          options << :activemodel_validations if activemodel_validations
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
u-attributes-1.0.0 lib/micro/attributes/features.rb