activesearch 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OWQyZDE0NTc4MTEyZWVlNmQ4ZmYyZDRlNWM3ZDE2N2Y2ZGQ0NDJmMg==
4
+ NDUxNjIzNjY2NmQxYjIzYmQ4NzA0NjRmYThjNThmY2ZhNjk4N2VlNw==
5
5
  data.tar.gz: !binary |-
6
- OTFmMWY4NTdjZDYzZTZhZTgzYjA1OTc3ODcwMDQzZGZhMDI5MzU4Nw==
6
+ ZjZmZDhkODU0NzI4MDU0ZjU5YWUzODcyMGFlZDhlNGMyNDk1NjRhMw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZDU1YjU3NjhjYjlmMTkyNTVhNzY0NzBjYjdiZmQwZTkyZjM0MjJiMzg2MmI3
10
- NThjMWM2MzlmZTBjZTlmNTA4YmM1MGMxNzBiN2ZlZDRlMjBjMWZjZGZjZmEw
11
- ZDI0OTNlNmU2MjlhMTZjNTIyYjM5MDU3Y2U1MzljNjRlNjJlOGE=
9
+ MTA2OTEwMzMxYWE2ZTI4MTg3MzcyNTE2MmE4ZGU1ZDc4YjZjMmU2MjBjOTJm
10
+ ODc2MTNiNmUzZjhkM2E2ZTNlOGQ0OGYzOWJhYTdiNTUxMTYzNzA1N2JmZjcz
11
+ YTc3YTM5Nzc1OWYxYzU1YzZmZGUyYTliZmE1NDllY2YxNDYzZGY=
12
12
  data.tar.gz: !binary |-
13
- OWIwYTFmOTUwMDE4ZWRmN2IxMWEwZmQ2MGZlZmZhZmNkMGMyMmY4ZjdhOGFi
14
- ODBhYjcyNzMxZDlmNGM4MjUzOTdhMGZjZmMwZTM4MDJjNmFhYWI5NjVhNTYw
15
- MWYwYjA4MTdmNDE3NmM4MWMzYTVkYTYyYzNjNDQ1YzU3OTFhMmU=
13
+ MzM2NGFkNWZhZmZmMjY1MDNmZjJmMzI4MzBhNTI0OGJlMWRhOTg0YmJlNDRh
14
+ MjI3OWFiYzIxYjU2NTM4OWRlMTFlZGFmYjkyNzYwYzAzMjdkM2FhN2U5Zjg4
15
+ NjFlYTBmZTFjNjJkMDRiYTA4MDFjYTkxOTI3YWQzZWVmZjQ5MjU=
@@ -0,0 +1,6 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ database: activesearch_test
5
+ hosts:
6
+ - localhost:27017
@@ -7,7 +7,7 @@ module ActiveSearch
7
7
  include HTTParty
8
8
 
9
9
  def self.configure(api_key, app_id, index = "activesearch")
10
- base_uri "https://apieu1.algolia.com/1/indexes/#{index}"
10
+ base_uri "https://#{app_id}.algolia.io/1/indexes/#{index}"
11
11
  headers({
12
12
  "X-Algolia-API-Key" => api_key,
13
13
  "X-Algolia-Application-Id" => app_id,
@@ -5,8 +5,10 @@ require "activesearch/proxy"
5
5
  module ActiveSearch
6
6
  def self.search(text, conditions = {})
7
7
  Proxy.new(text, conditions) do |text, conditions|
8
-
9
- Algolia::Client.new.query(text, tags: conditions_to_tags(conditions))["hits"].map! do |hit|
8
+ options = {}
9
+ tags = conditions_to_tags(conditions)
10
+ options.merge!(tags: tags) if tags != ""
11
+ Algolia::Client.new.query(text, options)["hits"].map! do |hit|
10
12
  if hit["_tags"]
11
13
  hit["_tags"].each do |tag|
12
14
  k, v = tag.split(':')
@@ -34,6 +36,9 @@ module ActiveSearch
34
36
  protected
35
37
  def reindex
36
38
  algolia_client.save(indexable_id, self.to_indexable)
39
+ rescue
40
+ self.touch
41
+ false
37
42
  end
38
43
 
39
44
  def deindex
@@ -31,12 +31,13 @@ module ActiveSearch
31
31
 
32
32
  if original.fields[f.to_s].localized?
33
33
  memo += original.send("#{f}_translations").map do |locale,translation|
34
+ next if translation.nil?
34
35
  translation.downcase.split.map { |word| "#{locale}:#{word}"}
35
36
  end.flatten
36
37
  else
37
38
  if original[f]
38
39
  memo += if original[f].is_a?(Array)
39
- original[f].map(&:downcase)
40
+ original[f].map { |value| value.nil? ? nil : value.downcase }
40
41
  else
41
42
  original[f].downcase.split
42
43
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveSearch
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -0,0 +1,26 @@
1
+ #encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), 'spec_helper')
3
+ require 'activesearch/algolia'
4
+ require_relative 'models/algolia'
5
+
6
+ YAML.load_file(File.dirname(__FILE__) + '/../config/algolia.yml').tap do |config|
7
+ ActiveSearch::Algolia::Client.configure(config["api_key"], config["app_id"])
8
+ end
9
+
10
+ describe ActiveSearch::Algolia do
11
+ before do
12
+ ActiveSearch::Algolia::Client.new.delete_index
13
+ end
14
+
15
+ context "errors on save" do
16
+ before do
17
+ @instance = AlgoliaModel.new(title: "Example")
18
+ @instance.should_receive(:touch).once
19
+ ActiveSearch::Algolia::Client.any_instance.stub(:save).and_raise(Errno::ECONNRESET)
20
+ end
21
+
22
+ subject { -> { @instance.save } }
23
+
24
+ it { should_not raise_error }
25
+ end
26
+ end
data/spec/mongoid_spec.rb CHANGED
@@ -3,20 +3,22 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
3
3
  require 'mongoid'
4
4
  require 'activesearch/mongoid'
5
5
 
6
- Mongoid.database = Mongo::Connection.new("localhost").db("activesearch_test")
6
+ Mongoid.load!("config/mongoid.yml", :test)
7
7
 
8
8
  class LocalizedMongoidModel
9
9
  include Mongoid::Document
10
10
  include ActiveSearch::Mongoid
11
11
 
12
12
  field :title, localize: true
13
- search_by [:title, store: [:title]]
13
+ field :not_localized
14
+ field :array, type: Array
15
+ search_by [:title, :not_localized, :array, store: [:title]]
14
16
  end
15
17
 
16
18
 
17
19
  describe ActiveSearch::Mongoid do
18
20
  before do
19
- Mongoid.master.collections.select { |c| c.name != 'system.indexes' }.each(&:drop)
21
+ Mongoid.purge!
20
22
  I18n.locale = :en
21
23
  @localized = LocalizedMongoidModel.create!(title: "<strong>English</strong> English")
22
24
  I18n.with_locale(:es) do
@@ -35,4 +37,16 @@ describe ActiveSearch::Mongoid do
35
37
  it "should store localized keywords with tags stripped" do
36
38
  ActiveSearch::Mongoid::Model.where(_original_type: "LocalizedMongoidModel", _original_id: @localized.id).first._keywords.should == ["en:english", "es:español"]
37
39
  end
40
+
41
+ it "handles empty translations" do
42
+ lambda { LocalizedMongoidModel.create!(title: nil, not_localized: "example") }.should_not raise_error
43
+ end
44
+
45
+ it "handles empty fields" do
46
+ lambda { LocalizedMongoidModel.create!(title: "Example", not_localized: nil) }.should_not raise_error
47
+ end
48
+
49
+ it "handles nil values in arrays" do
50
+ lambda { LocalizedMongoidModel.create!(title: "Example", not_localized: "example", array: [nil]) }.should_not raise_error
51
+ end
38
52
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activesearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Alvarez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-05 00:00:00.000000000 Z
11
+ date: 2013-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -149,6 +149,7 @@ files:
149
149
  - README.md
150
150
  - Rakefile
151
151
  - activesearch.gemspec
152
+ - config/mongoid.yml
152
153
  - config/sample.algolia.yml
153
154
  - lib/activesearch.rb
154
155
  - lib/activesearch/algolia.rb
@@ -160,6 +161,7 @@ files:
160
161
  - lib/activesearch/proxy.rb
161
162
  - lib/activesearch/result.rb
162
163
  - lib/activesearch/version.rb
164
+ - spec/algolia_spec.rb
163
165
  - spec/base_spec.rb
164
166
  - spec/config/mongoid.yml
165
167
  - spec/engines_spec.rb
@@ -187,12 +189,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
189
  version: '0'
188
190
  requirements: []
189
191
  rubyforge_project:
190
- rubygems_version: 2.0.3
192
+ rubygems_version: 2.0.5
191
193
  signing_key:
192
194
  specification_version: 4
193
195
  summary: ActiveSearch lets you plug in a ruby module in any class that will allow
194
196
  you to do full text searches.
195
197
  test_files:
198
+ - spec/algolia_spec.rb
196
199
  - spec/base_spec.rb
197
200
  - spec/config/mongoid.yml
198
201
  - spec/engines_spec.rb