From b023f23c1db461adec7637b3062ef1b7c96a6052 Mon Sep 17 00:00:00 2001 From: Steven Eksteen Date: Thu, 13 Nov 2014 11:07:34 +0200 Subject: [PATCH] Nobrainer, ORM for RethinkDB, support --- .travis.yml | 7 +++++++ gemfiles/nobrainer.gemfile | 6 ++++++ lib/searchkick/results.rb | 9 ++++++++- test/sql_test.rb | 2 +- test/test_helper.rb | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 gemfiles/nobrainer.gemfile diff --git a/.travis.yml b/.travis.yml index 8d1c71b..d1d9f64 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,12 @@ services: - mongodb before_install: - wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.deb && sudo dpkg -i elasticsearch-1.3.2.deb && sudo service elasticsearch restart + - source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list + - wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add - + - sudo apt-get update -q + - sudo apt-get install rethinkdb + - sudo cp /etc/rethinkdb/default.conf.sample /etc/rethinkdb/instances.d/instance1.conf + - sudo service rethinkdb restart script: bundle exec rake test before_script: - psql -c 'create database searchkick_test;' -U postgres @@ -21,3 +27,4 @@ gemfile: - gemfiles/mongoid2.gemfile - gemfiles/mongoid3.gemfile - gemfiles/mongoid4.gemfile + - gemfiles/nobrainer.gemfile diff --git a/gemfiles/nobrainer.gemfile b/gemfiles/nobrainer.gemfile new file mode 100644 index 0000000..fbbd023 --- /dev/null +++ b/gemfiles/nobrainer.gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +# Specify your gem's dependencies in searchkick.gemspec +gemspec path: "../" + +gem "nobrainer" diff --git a/lib/searchkick/results.rb b/lib/searchkick/results.rb index d661377..fa9bb92 100644 --- a/lib/searchkick/results.rb +++ b/lib/searchkick/results.rb @@ -24,7 +24,11 @@ module Searchkick hits.group_by{|hit, i| hit["_type"] }.each do |type, grouped_hits| records = type.camelize.constantize if options[:includes] - records = records.includes(options[:includes]) + if records.respond_to?(:preload) + records = records.preload(options[:includes]) + else + records = records.includes(options[:includes]) + end end results[type] = results_query(records, grouped_hits) end @@ -143,6 +147,9 @@ module Searchkick elsif records.respond_to?(:queryable) # Mongoid 3+ records.queryable.for_ids(grouped_hits.map{|hit| hit["_id"] }).to_a + elsif records.respond_to?(:unscoped) and records.all.respond_to?(:preload) + # Nobrainer + records.unscoped.where(:id.in => grouped_hits.map{|hit| hit["_id"] }).to_a else raise "Not sure how to load records" end diff --git a/test/sql_test.rb b/test/sql_test.rb index b0e2645..1c43996 100644 --- a/test/sql_test.rb +++ b/test/sql_test.rb @@ -312,7 +312,7 @@ class TestSql < Minitest::Test end # TODO see if Mongoid is loaded - if !defined?(Mongoid) + unless defined?(Mongoid) or defined?(NoBrainer) def test_include store_names ["Product A"] assert Product.search("product", include: [:store]).first.association(:store).loaded? diff --git a/test/test_helper.rb b/test/test_helper.rb index fe60998..1cbae49 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -73,6 +73,55 @@ if defined?(Mongoid) class Cat < Animal end +elsif defined?(NoBrainer) + # + # Aliasing create bang. + # + module NoBrainer::Document::Persistance + extend ActiveSupport::Concern + + module ClassMethods + alias :create! :create + end + end + + NoBrainer.configure do |config| + config.rethinkdb_url = 'rethinkdb://localhost/searchkick_test' + end + + class Product + include NoBrainer::Document + include NoBrainer::Document::Timestamps + + field :name, type: String + field :store_id, type: Integer + field :in_stock, type: Boolean + field :backordered, type: Boolean + field :orders_count, type: Integer + field :price, type: Integer + field :color, type: String + field :latitude + field :longitude + field :description, type: String + end + + class Store + include NoBrainer::Document + + field :name, type: String + end + + class Animal + include NoBrainer::Document + + field :name, type: String + end + + class Dog < Animal + end + + class Cat < Animal + end else require "active_record" -- libgit2 0.21.0