Method: Rails::Generators::GeneratedAttribute.parse

Defined in:
railties/lib/rails/generators/generated_attribute.rb

.parse(column_definition) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'railties/lib/rails/generators/generated_attribute.rb', line 35

def parse(column_definition)
  name, type, index_type = column_definition.split(":")

  # if user provided "name:index" instead of "name:string:index"
  # type should be set blank so GeneratedAttribute's constructor
  # could set it to :string
  index_type, type = type, nil if valid_index_type?(type)

  type, attr_options = *parse_type_and_options(type)
  type = type.to_sym if type

  if dangerous_name?(name)
    raise Error, "Could not generate field '#{name}', as it is already defined by Active Record."
  end

  if type && !valid_type?(type)
    raise Error, "Could not generate field '#{name}' with unknown type '#{type}'."
  end

  if index_type && !valid_index_type?(index_type)
    raise Error, "Could not generate field '#{name}' with unknown index '#{index_type}'."
  end

  if type && reference?(type)
    if UNIQ_INDEX_OPTIONS.include?(index_type)
      attr_options[:index] = { unique: true }
    end
  end

  new(name, type, index_type, attr_options)
end