lib/dolly/collection.rb in dolly-3.0.0 vs lib/dolly/collection.rb in dolly-3.0.1

- old
+ new

@@ -1,14 +1,14 @@ module Dolly class Collection < DelegateClass(Array) - attr_reader :info + attr_reader :options - def initialize(rows: [], **info) - @info = info + def initialize(rows: [], options: {}) + @options = options #TODO: We should raise an exception if one of the # requested documents is missing - super rows.map(&collect_docs).compact + super rows[:rows].map(&collect_docs).compact end def first_or_all(forced_first = false) return self if forced_first single? ? first : self @@ -21,16 +21,26 @@ private def collect_docs lambda do |row| next unless collectable_row?(row) - klass = Object.const_get doc_type(row[:id]) + klass = Object.const_get(doc_model(row)) klass.from_doc(row[:doc]) end end - def doc_type(key) - key.match(%r{^([^/]+)/})[1].split('_').collect(&:capitalize).join + def doc_model(doc) + options[:doc_type] || constantize_key(doc[:doc_type]) || constantize_key(doc_type_for(doc[:id])) + end + + def doc_type_for(key) + return false if key.nil? + key.match(%r{^([^/]+)/})[1] + end + + def constantize_key(key) + return false if key.nil? + key.split('_').collect(&:capitalize).join end def collectable_row?(row) !deleted_doc?(row) && row[:error].nil? end