diff --git a/lib/couchbase-orm/attributes/dynamic.rb b/lib/couchbase-orm/attributes/dynamic.rb index a8d14121..329c2369 100644 --- a/lib/couchbase-orm/attributes/dynamic.rb +++ b/lib/couchbase-orm/attributes/dynamic.rb @@ -27,9 +27,10 @@ def respond_to?(name, include_private = false) # # @return [ Object ] value of attribute def _assign_attribute(name, value) - responds = name.reader == 'id' || respond_to?(name.writer) + setter = name.writer + responds = setter == 'id=' || respond_to?(setter) if responds - public_send(name.writer, value) + public_send(setter, value) else type = define_attribute_type(value) type = if type == :array @@ -114,9 +115,11 @@ def define_dynamic_writer(name) # @return [ Object ] The result of the method call. def method_missing(name, *args) attr = name.to_s - return super unless attr.reader != 'id' && has_attribute?(attr.reader) - getter = attr.reader + + return super if getter == 'id' + return super if has_attribute?(getter) + if attr.writer? define_dynamic_writer(getter) @attributes.write_from_user(getter, args.first) diff --git a/lib/couchbase-orm/extensions/string.rb b/lib/couchbase-orm/extensions/string.rb index 3aeb37a7..8219ffd9 100644 --- a/lib/couchbase-orm/extensions/string.rb +++ b/lib/couchbase-orm/extensions/string.rb @@ -4,11 +4,11 @@ module CouchbaseOrm module Extensions module String def reader - delete('=').sub(/_before_type_cast\z/, '') + delete_suffix('_before_type_cast').delete('=') end def writer - sub(/_before_type_cast\z/, '') + '=' + delete_suffix('_before_type_cast') + '=' end def writer?