Sha256: 32d4c087e01ce97477cfef27356b9cfdeff1c8b0b5c86860ff185f12db102764

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

require "micro/attributes/with"

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

      OPTIONS = {
        # Features
        'diff' => With::Diff,
        'initialize' => With::Initialize,
        'activemodel_validations' => With::ActiveModelValidations,
        # Combinations
        'diff:initialize' => With::DiffAndInitialize,
        'activemodel_validations:diff' => With::ActiveModelValidationsAndDiff,
        'activemodel_validations:initialize' => With::ActiveModelValidationsAndInitialize,
        'activemodel_validations:diff:initialize' => With::ActiveModelValidationsAndDiffAndInitialize
      }.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
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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