class CouchbaseOrm::Base
Constants
- ID_LOOKUP
- Metadata
Public Class Methods
attribute(*names, **options) { |value| ... }
click to toggle source
# File lib/couchbase-orm/base.rb, line 63 def attribute(*names, **options) @attributes ||= {} names.each do |name| name = name.to_sym @attributes[name] = options unless self.instance_methods.include?(name) define_method(name) do read_attribute(name) end end eq_meth = :"#{name}=" unless self.instance_methods.include?(eq_meth) define_method(eq_meth) do |value| value = yield(value) if block_given? write_attribute(name, value) end end end end
attributes()
click to toggle source
# File lib/couchbase-orm/base.rb, line 86 def attributes @attributes ||= {} end
bucket()
click to toggle source
# File lib/couchbase-orm/base.rb, line 51 def bucket @bucket ||= Connection.bucket end
bucket=(bucket)
click to toggle source
# File lib/couchbase-orm/base.rb, line 47 def bucket=(bucket) @bucket = bucket end
connect(**options)
click to toggle source
# File lib/couchbase-orm/base.rb, line 43 def connect(**options) @bucket = ::Libcouchbase::Bucket.new(**options) end
exists?(id)
click to toggle source
# File lib/couchbase-orm/base.rb, line 119 def exists?(id) !bucket.get(id, quiet: true).nil? end
Also aliased as: has_key?
find(*ids, **options)
click to toggle source
# File lib/couchbase-orm/base.rb, line 90 def find(*ids, **options) options[:extended] = true options[:quiet] ||= false ids = ids.flatten.select { |id| id.present? } if ids.empty? return nil if options[:quiet] raise Libcouchbase::Error::EmptyKey, 'no id(s) provided' end record = bucket.get(*ids, **options) records = record.is_a?(Array) ? record : [record] records.map! { |record| if record self.new(record) else false end } records.select! { |rec| rec } ids.length > 1 ? records : records[0] end
find_by_id(*ids, **options)
click to toggle source
# File lib/couchbase-orm/base.rb, line 113 def find_by_id(*ids, **options) options[:quiet] = true find(*ids, **options) end
Also aliased as: []
new(model = nil, ignore_doc_type: false, **attributes) { |self| ... }
click to toggle source
Add support for libcouchbase response objects
Calls superclass method
# File lib/couchbase-orm/base.rb, line 127 def initialize(model = nil, ignore_doc_type: false, **attributes) @__metadata__ = Metadata.new # Assign default values @__attributes__ = ::ActiveSupport::HashWithIndifferentAccess.new({type: self.class.design_document}) self.class.attributes.each do |key, options| default = options[:default] if default.respond_to?(:call) write_attribute key, default.call else write_attribute key, default end end if model case model when ::Libcouchbase::Response doc = model.value || raise('empty response provided') type = doc.delete(:type) doc.delete(:id) if type && !ignore_doc_type && type.to_s != self.class.design_document raise "document type mismatch, #{type} != #{self.class.design_document}" end @__metadata__.key = model.key @__metadata__.cas = model.cas # This ensures that defaults are applied @__attributes__.merge! doc clear_changes_information when CouchbaseOrm::Base clear_changes_information attributes = model.attributes attributes.delete(:id) super(attributes) else clear_changes_information super(attributes.merge(Hash(model))) end else clear_changes_information super(attributes) end yield self if block_given? run_callbacks :initialize end
uuid_generator()
click to toggle source
# File lib/couchbase-orm/base.rb, line 55 def uuid_generator @uuid_generator ||= IdGenerator end
uuid_generator=(generator)
click to toggle source
# File lib/couchbase-orm/base.rb, line 59 def uuid_generator=(generator) @uuid_generator = generator end
Public Instance Methods
==(other)
click to toggle source
Public: Overrides == to compare via class and entity id.
other - Another object to compare to
Returns a boolean.
# File lib/couchbase-orm/base.rb, line 269 def ==(other) case other when self.class hash == other.hash else false end end
attribute(name)
click to toggle source
# File lib/couchbase-orm/base.rb, line 223 def attribute(name) return self.id if ID_LOOKUP.include?(name) @__attributes__[name] end
Also aliased as: read_attribute_for_serialization
attribute=(name, value)
click to toggle source
# File lib/couchbase-orm/base.rb, line 229 def attribute=(name, value) __send__(:"#{name}=", value) end
attributes()
click to toggle source
Add support for Serialization: guides.rubyonrails.org/active_model_basics.html#serialization
# File lib/couchbase-orm/base.rb, line 209 def attributes copy = @__attributes__.merge({id: id}) copy.delete(:type) copy end
attributes=(attributes)
click to toggle source
# File lib/couchbase-orm/base.rb, line 215 def attributes=(attributes) attributes.each do |key, value| setter = :"#{key}=" send(setter, value) if respond_to?(setter) end end
eql?(other)
click to toggle source
Public: Overrides eql? to use == in the comparison.
other - Another object to compare to
Returns a boolean.
# File lib/couchbase-orm/base.rb, line 260 def eql?(other) self == other end
hash()
click to toggle source
Public: Hashes identifying properties of the instance
Ruby normally hashes an object to be used in comparisons. In our case we may have two techincally different objects referencing the same entity id.
Returns a string representing the unique key.
# File lib/couchbase-orm/base.rb, line 251 def hash "#{self.class.name}-#{self.id}-#{@__metadata__.cas}-#{@__attributes__.hash}".hash end
id()
click to toggle source
Document ID is a special case as it is not stored in the document
# File lib/couchbase-orm/base.rb, line 179 def id @__metadata__.key || @id end
id=(value)
click to toggle source
# File lib/couchbase-orm/base.rb, line 183 def id=(value) raise 'ID cannot be changed' if @__metadata__.cas attribute_will_change!(:id) @id = value.to_s end
read_attribute(attr_name)
click to toggle source
# File lib/couchbase-orm/base.rb, line 189 def read_attribute(attr_name) @__attributes__[attr_name] end
Also aliased as: []
to_model()
click to toggle source
Public: Allows for access to ActiveModel functionality.
Returns self.
# File lib/couchbase-orm/base.rb, line 241 def to_model self end
write_attribute(attr_name, value)
click to toggle source
# File lib/couchbase-orm/base.rb, line 194 def write_attribute(attr_name, value) unless value.nil? coerce = self.class.attributes[attr_name][:type] value = Kernel.send(coerce.to_s, value) if coerce end attribute_will_change!(attr_name) unless @__attributes__[attr_name] == value @__attributes__[attr_name] = value end
Also aliased as: []=