Sha256: 4f17fb8f09dfa0c241ae081715e7b4f991578005eff71f4a3b8c91431fddea59

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

# frozen_string_literal: true

require 'stateful_enum/machine'

module StatefulEnum
  module ActiveRecordEnumExtension
    #   enum status: {unassigned: 0, assigned: 1, resolved: 2, closed: 3} do
    #     event :assign do
    #       transition :unassigned => :assigned
    #     end
    #   end
    if Rails::VERSION::MAJOR >= 7
      def enum(name = nil, values = nil, **options, &block)
        return super unless block

        definitions = super name, values, **options

        if name
          (@_defined_stateful_enums ||= []) << StatefulEnum::Machine.new(self, name, (definitions.is_a?(Hash) ? definitions.keys : definitions), options[:prefix], options[:suffix], &block)
        else
          definitions.each do |column, states|
            (@_defined_stateful_enums ||= []) << StatefulEnum::Machine.new(self, column, (states.is_a?(Hash) ? states.keys : states), options[:_prefix], options[:_suffix], &block)
          end
        end

        definitions
      end
    else
      def enum(definitions, &block)
        return super unless block

        # Preserving prefix and suffix values before calling super because the super destroys the given Hash
        prefix, suffix = definitions[:_prefix], definitions[:_suffix] if Rails::VERSION::MAJOR >= 5
        enum_values = super definitions

        enum_values.each_pair do |column, states|
          (@_defined_stateful_enums ||= []) << StatefulEnum::Machine.new(self, column, (states.is_a?(Hash) ? states.keys : states), prefix, suffix, &block)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
stateful_enum-0.7.0 lib/stateful_enum/active_record_extension.rb