Skip to content

Commit 9e9ecfd

Browse files
Add raise_on_unknown_attributes class attribute and attribute_writer_missing
- Add class_attribute :raise_on_unknown_attributes with default: true - Implement attribute_writer_missing to handle unknown attributes - When set to false, logs warning instead of raising exception
1 parent 9153062 commit 9e9ecfd

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

lib/couchbase-orm/base.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ class Document
5252

5353
class MismatchTypeError < RuntimeError; end
5454

55+
# Configuration option to control whether unknown attributes should raise an error
56+
# Set to false to silently ignore unknown attributes during mass assignment
57+
class_attribute :raise_on_unknown_attributes, default: true
58+
5559
def initialize(model = nil, ignore_doc_type: false, **attributes)
5660
CouchbaseOrm.logger.debug { "Initialize model #{model} with #{attributes.to_s.truncate(200)}" }
5761
@__metadata__ = Metadata.new
@@ -99,6 +103,17 @@ def []=(key, value)
99103
send(:"#{key}=", value)
100104
end
101105

106+
# Handle assignment to unknown attributes based on raise_on_unknown_attributes configuration
107+
# If raise_on_unknown_attributes is false, unknown attributes are silently ignored
108+
# If raise_on_unknown_attributes is true (default), ActiveModel::UnknownAttributeError is raised
109+
def attribute_writer_missing(name, value)
110+
if self.class.raise_on_unknown_attributes
111+
super
112+
else
113+
CouchbaseOrm.logger.warn "Ignoring unknown attribute '#{name}' for #{self.class.name}"
114+
end
115+
end
116+
102117
protected
103118

104119
def serialized_attributes

0 commit comments

Comments
 (0)