class ActiveModel::Type::Document
Attributes
cast_type[R]
collection[R]
context[R]
document_class[R]
Private Class Methods
new(class_name: nil, cast_type: nil, collection: false, context: nil)
click to toggle source
# File lib/active_model/type/document.rb, line 13 def initialize(class_name: nil, cast_type: nil, collection: false, context: nil) @document_class = resolve_constant class_name, from: context if class_name @cast_type = lookup_or_return cast_type if cast_type @collection = collection @context = context end
Private Instance Methods
cast(value)
click to toggle source
# File lib/active_model/type/document.rb, line 38 def cast(value) return unless value if collection? return value if value.respond_to? :document_class documents = value.map { |attributes| process attributes } collection_class.new(documents) else return value if value.respond_to? :id process value end end
changed_in_place?(old_value, new_value)
click to toggle source
# File lib/active_model/type/document.rb, line 70 def changed_in_place?(old_value, new_value) deserialize(old_value) != new_value end
clean_scope(name)
click to toggle source
# File lib/active_model/type/document.rb, line 95 def clean_scope(name) name.gsub(/^::/, "") end
collection?()
click to toggle source
# File lib/active_model/type/document.rb, line 20 def collection? collection end
collection_class()
click to toggle source
# File lib/active_model/type/document.rb, line 28 def collection_class return unless collection? if default_collection? @collection_class ||= ActiveModel::Embedding::Collection else @collection_class ||= resolve_constant collection, from: context end end
default_collection?()
click to toggle source
# File lib/active_model/type/document.rb, line 24 def default_collection? collection == true end
deserialize(json)
click to toggle source
# File lib/active_model/type/document.rb, line 62 def deserialize(json) return unless json value = ActiveSupport::JSON.decode(json) cast value end
lookup_or_return(cast_type)
click to toggle source
# File lib/active_model/type/document.rb, line 99 def lookup_or_return(cast_type) case cast_type when Symbol begin Type.lookup(cast_type) rescue ActiveRecord::Type.lookup(cast_type) end else cast_type end end
process(value)
click to toggle source
# File lib/active_model/type/document.rb, line 54 def process(value) cast_type ? cast_type.cast(value) : document_class.new(value) end
resolve_constant(name, from: nil)
click to toggle source
# File lib/active_model/type/document.rb, line 76 def resolve_constant(name, from: nil) name = clean_scope(name) if from context = from.split("::") context.each do scope = context.join("::") constant = "::#{scope}::#{name}".constantize rescue nil return constant if constant context.pop end end "::#{name}".constantize end
serialize(value)
click to toggle source
# File lib/active_model/type/document.rb, line 58 def serialize(value) value.to_json end