123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::ModelSchema::SchemaContext::Attributes

Do not use. This class is for internal use only.
Relationships & Source Files
Inherits: Object
Defined in: activerecord/lib/active_record/model_schema/schema_context.rb

Overview

Attributes owns a model's attribute-derived state: attribute defaults, attribute types, and column defaults.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(context) ⇒ Attributes

[ GitHub ]

  
# File 'activerecord/lib/active_record/model_schema/schema_context.rb', line 15

def initialize(context)
  attribute_set = context.attribute_set
  context.model_class.apply_pending_attribute_modifications(attribute_set)

  @defaults = attribute_set
  @context = context
end

Instance Attribute Details

#context (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/model_schema/schema_context.rb', line 13

attr_reader :context, :defaults

#defaults (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/model_schema/schema_context.rb', line 13

attr_reader :context, :defaults

Instance Method Details

#builder

[ GitHub ]

  
# File 'activerecord/lib/active_record/model_schema/schema_context.rb', line 29

def builder
  primary_key_defaults = defaults.except(*(context.model_class.column_names - Array(context.model_class.primary_key)))
  ActiveModel::AttributeSet::Builder.new(types, primary_key_defaults)
end

#column_defaults

[ GitHub ]

  
# File 'activerecord/lib/active_record/model_schema/schema_context.rb', line 34

def column_defaults
  @column_defaults ||= defaults.deep_dup.to_hash.freeze
end

#types

[ GitHub ]

  
# File 'activerecord/lib/active_record/model_schema/schema_context.rb', line 23

def types
  @types ||= defaults.cast_types.tap do |hash|
    hash.default = ActiveModel::Type.default_value
  end
end