Class: Subroutine::AssociationFields::Configuration

Inherits:
Fields::Configuration show all
Defined in:
lib/subroutine/association_fields/configuration.rb

Constant Summary

Constants inherited from Fields::Configuration

Fields::Configuration::INHERITABLE_OPTIONS, Fields::Configuration::NO_GROUPS, Fields::Configuration::PROTECTED_GROUP_IDENTIFIERS

Instance Attribute Summary

Attributes inherited from Fields::Configuration

#field_name

Instance Method Summary collapse

Methods inherited from Fields::Configuration

#field_reader?, #field_writer?, from, #get_default, #groups, #has_default?, #in_group?, #inheritable_options, #initialize, #inspect, #mass_assignable?, #merge, #sanitize_options

Constructor Details

This class inherits a constructor from Subroutine::Fields::Configuration

Instance Method Details

#asObject



33
34
35
# File 'lib/subroutine/association_fields/configuration.rb', line 33

def as
  config[:as] || field_name
end

#behaviorObject



69
70
71
# File 'lib/subroutine/association_fields/configuration.rb', line 69

def behavior
  :association
end

#build_foreign_key_fieldObject



57
58
59
# File 'lib/subroutine/association_fields/configuration.rb', line 57

def build_foreign_key_field
  build_child_field(foreign_key_method, type: :integer)
end

#build_foreign_type_fieldObject



61
62
63
# File 'lib/subroutine/association_fields/configuration.rb', line 61

def build_foreign_type_field
  build_child_field(foreign_type_method, type: :string)
end

#class_nameObject



37
38
39
# File 'lib/subroutine/association_fields/configuration.rb', line 37

def class_name
  config[:class_name]&.to_s
end

#foreign_keyObject



45
46
47
# File 'lib/subroutine/association_fields/configuration.rb', line 45

def foreign_key
  config[:foreign_key]
end

#foreign_key_methodObject



49
50
51
# File 'lib/subroutine/association_fields/configuration.rb', line 49

def foreign_key_method
  (foreign_key || "#{field_name}_id").to_sym
end

#foreign_type_methodObject



53
54
55
# File 'lib/subroutine/association_fields/configuration.rb', line 53

def foreign_type_method
  foreign_key_method.to_s.gsub(/_id$/, "_type").to_sym
end

#inferred_class_nameObject



41
42
43
# File 'lib/subroutine/association_fields/configuration.rb', line 41

def inferred_class_name
  class_name || as.to_s.camelize
end

#polymorphic?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/subroutine/association_fields/configuration.rb', line 29

def polymorphic?
  !!config[:polymorphic]
end


22
23
24
25
26
27
# File 'lib/subroutine/association_fields/configuration.rb', line 22

def related_field_names
  out = super
  out << foreign_key_method
  out << foreign_type_method if polymorphic?
  out
end

#required_modulesObject



18
19
20
# File 'lib/subroutine/association_fields/configuration.rb', line 18

def required_modules
  super + [::Subroutine::AssociationFields]
end

#unscoped?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/subroutine/association_fields/configuration.rb', line 65

def unscoped?
  !!config[:unscoped]
end

#validate!Object



10
11
12
13
14
15
16
# File 'lib/subroutine/association_fields/configuration.rb', line 10

def validate!
  super

  if as && foreign_key
    raise ArgumentError, ":as and :foreign_key options should not be provided together to an association invocation"
  end
end