lib/couchbase-orm.rb in couchbase-orm-1.1.1 vs lib/couchbase-orm.rb in couchbase-orm-2.0.0

- old
+ new

@@ -1,24 +1,59 @@ # frozen_string_literal: true, encoding: ASCII-8BIT +require "logger" +require "active_support/lazy_load_hooks" +require "couchbase-orm/utils" -require 'libcouchbase' +ActiveSupport.on_load(:i18n) do + I18n.load_path << File.expand_path("couchbase-orm/locale/en.yml", __dir__) +end module CouchbaseOrm + autoload :Encrypt, 'couchbase-orm/encrypt' autoload :Error, 'couchbase-orm/error' autoload :Connection, 'couchbase-orm/connection' autoload :IdGenerator, 'couchbase-orm/id_generator' autoload :Base, 'couchbase-orm/base' + autoload :Document, 'couchbase-orm/base' + autoload :NestedDocument, 'couchbase-orm/base' + autoload :HasMany, 'couchbase-orm/utilities/has_many' + def self.logger + @@logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDOUT).tap { |l| l.level = Logger::INFO unless ENV["COUCHBASE_ORM_DEBUG"] } + end + + def self.logger=(logger) + @@logger = logger + end + def self.try_load(id) result = nil - result = id.respond_to?(:cas) ? id : CouchbaseOrm::Base.bucket.get(id, quiet: true, extended: true) + was_array = id.is_a?(Array) + if was_array && id.length == 1 + query_id = id.first + else + query_id = id + end - if result && result.value.is_a?(Hash) && result.value[:type] - ddoc = result.value[:type] - ::CouchbaseOrm::Base.descendants.each do |model| - if model.design_document == ddoc - return model.new(result) - end + result = query_id.is_a?(Array) ? CouchbaseOrm::Base.bucket.default_collection.get_multi(query_id) : CouchbaseOrm::Base.bucket.default_collection.get(query_id) + + result = Array.wrap(result) if was_array + + if result&.is_a?(Array) + return result.zip(id).map { |r, id| try_load_create_model(r, id) }.compact + end + + return try_load_create_model(result, id) + end + + private + + def self.try_load_create_model(result, id) + ddoc = result&.content["type"] + return nil unless ddoc + ::CouchbaseOrm::Base.descendants.each do |model| + if model.design_document == ddoc + return model.new(result, id: id) end end nil end end