Module: RbsRails::ActiveRecord::Enum

Defined in:
lib/rbs_rails/active_record/enum.rb,
sig/rbs_rails/active_record/enum.rbs

Constant Summary collapse

IGNORED_ENUM_KEYS =

Returns:

  • (::Array[untyped])
%i[prefix suffix default scopes]

Instance Method Summary collapse

Instance Method Details

#enum(*args, **options) ⇒ Object

@rbs! type definitions = Hash[Symbol, Array[Symbol] | Hash[Symbol, untyped]] type options = Hash[Symbol, untyped] type enum_definitions = Array[[definitions, options]]

@enum_definitions: enum_definitions

Parameters:

  • args (Object)
  • options (Object)

Returns:

  • (Object)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rbs_rails/active_record/enum.rb', line 15

def enum(*args, **options) #: untyped
  result = super  # steep:ignore

  name, values = args #: [Symbol, Array[Symbol]?]
  if values
    # Enum definitions are passed via array argument
    #   ex. enum :status, [:temporary, :accepted]
    definitions = { name => values }
  else
    # Enum definitions are passed via keyword arguments
    #   ex. enum :status, temporary: 1, accepted: 2
    values = options.slice!(*IGNORED_ENUM_KEYS)
    definitions = { name => values }
  end

  @enum_definitions ||= [] #: enum_definitions
  @enum_definitions&.append([definitions, options])

  result
end

#enum_definitionsArray[[ Symbol, String ]]

: Array[[Symbol, String]]

Returns:

  • (Array[[ Symbol, String ]])


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/rbs_rails/active_record/enum.rb', line 36

def enum_definitions #: Array[[Symbol, String]]
  @enum_definitions&.flat_map do |(definitions, options)|
    definitions.flat_map do |name, values|
      labels = case values
               when Array
                 values
               when Hash
                 values.keys
               end
      labels.map do |label|
        [name, enum_method_name(name, label, options)] #: [Symbol, String]
      end
    end
  end.to_a
end