module MongoidNestedFields::NestedFieldSetter::ClassMethods
Public Instance Methods
_allowed_types_in_field(field)
click to toggle source
# File lib/mongoid_nested_fields/nested_field_setter.rb, line 54 def _allowed_types_in_field(field) field = field.to_sym @_allowed_types_in_field ||= {} return @_allowed_types_in_field[field] || [] end
_is_allowed_type?(field, type)
click to toggle source
# File lib/mongoid_nested_fields/nested_field_setter.rb, line 59 def _is_allowed_type?(field, type) field = field.to_sym _allowed_types_in_field(field).include?(type) end
_set_allowed_types_in_field(field, type)
click to toggle source
# File lib/mongoid_nested_fields/nested_field_setter.rb, line 46 def _set_allowed_types_in_field(field, type) field = field.to_sym @_allowed_types_in_field ||= {} @_allowed_types_in_field[field] ||= [] @_allowed_types_in_field[field] << type @_allowed_types_in_field[field].flatten! @_allowed_types_in_field[field].uniq! unless @_allowed_types_in_field[field].nil? end
_set_serialization()
click to toggle source
# File lib/mongoid_nested_fields/nested_field_setter.rb, line 37 def _set_serialization before_save :_serialize_nested_fields after_save :_restore_nested_fields end
_set_validations()
click to toggle source
# File lib/mongoid_nested_fields/nested_field_setter.rb, line 42 def _set_validations validate :_nested_fields_must_be_valid end
nested_field(name, options = {})
click to toggle source
# File lib/mongoid_nested_fields/nested_field_setter.rb, line 6 def nested_field(name, options = {}) @_nested_fields ||= [] @_nested_fields << name.to_s options[:type] = MongoidNestedFields::NestedFieldHolder _set_allowed_types_in_field(name, options.delete(:allowed_types)) _set_validations _set_serialization field(name, options) meth = options.delete(:as) || name define_method("#{meth}=") do |value| raise TypeError unless [String, Array, NilClass].include?(value.class) if value.is_a? String parser = Yajl::Parser.new value = parser.parse(value) end processed_values = [] value.to_a.each do |v| v.stringify_keys! if v.is_a? Hash if((v.is_a?(Hash) or v.is_a?(BSON::OrderedHash)) and !v['_type'].nil?) v = v['_type'].classify.constantize.new(v.to_hash) end raise MongoidNestedFields::Errors::UnexpectedType.new(v.class, name) unless self.class._is_allowed_type?(name, v.class) processed_values << v end write_attribute(name, processed_values) end end