elastic_record 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7b8f5fc3d3234cd4df693c95e621d6cdb7f8dad
4
- data.tar.gz: ddb1266846f803009ee3ae703e55e88f31427f2a
3
+ metadata.gz: 2cbc5a9b19d4e4536a11ca0c7a9a871d94122454
4
+ data.tar.gz: d9a056220a3afdc7220fd38d416469406689ca22
5
5
  SHA512:
6
- metadata.gz: 007cf7521d482d9d2905fb425e1407c82ac7a72b53ce456c60dfa24ff0b6714def89003a42bf90aee417047183937f94e1373eb605137e400dd8c06df6d57b78
7
- data.tar.gz: 936d22b8288094f09be05009aabfaef241105c4b84df7ac6f237a228eb366e206d80307dc4896d43e5d0772744c4d8ab9889e5cabc58de9e5ee2f8851dcb566d
6
+ metadata.gz: 391e0c18ac97b92f0a9048aa1e2c158438a24cb984303b7ed96a642b49c39caa57905645695b8357548f233a21ea37b76f530156068b1cfd625139f2b17627cc
7
+ data.tar.gz: 7366f981a1d0e9d5c3f273f625f8a44c77dc7352a29ab19c729eb4d911982848370e05a7fe2ecaca88ebac7869deb84b04b3eec74cffec2965402f20cd751cf1
data/README.rdoc CHANGED
@@ -1,5 +1,6 @@
1
1
  = ElasticRecord
2
- {<img src="https://secure.travis-ci.org/matthuhiggins/elastic_record.png?rvm=1.9.3" />}[http://travis-ci.org/matthuhiggins/elastic_record]
2
+ {<img src="https://secure.travis-ci.org/data-axle/elastic_record.png?rvm=2.0.0" />}[http://travis-ci.org/data-axle/elastic_record]
3
+ {<img src="https://codeclimate.com/github/data-axle/elastic_record.png" />}[https://codeclimate.com/github/data-axle/elastic_record]
3
4
 
4
5
  ElasticRecord is an elasticsearch ORM.
5
6
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'elastic_record'
5
- s.version = '1.0.1'
5
+ s.version = '1.1.0'
6
6
  s.summary = 'Use Elastic Search with your objects'
7
7
  s.description = 'Find your records with elastic search'
8
8
 
@@ -10,60 +10,6 @@ module ElasticRecord
10
10
  def escape(query)
11
11
  query.gsub(ESCAPE_REGEX, "\\\\\\1")
12
12
  end
13
-
14
- # Returns a lucene query that works like GMail
15
- def match_phrase(query, fields, &block)
16
- return if query.blank?
17
-
18
- words = split_phrase_into_words(query)
19
-
20
- words.map do |word|
21
- if word =~ /^(\w+):(.+)$/ && fields.include?($1)
22
- match_word $2, [block_given? ? yield($1) : $1]
23
- else
24
- match_word word, (block_given? ? fields.map(&block) : fields)
25
- end
26
- end.join(' AND ')
27
- end
28
-
29
- # Performs a prefix match on the word:
30
- #
31
- # ElasticRecord::Lucene.match_word('blue', ['color', 'name'])
32
- # => (color:blue* OR name:blue*)
33
- #
34
- # In the case that the word has special characters, it is wrapped in quotes:
35
- #
36
- # ElasticRecord::Lucene.match_word('A&M', ['name'])
37
- # => (name:"A&M")
38
- def match_word(word, fields)
39
- if word =~ / / || word =~ ESCAPE_REGEX
40
- word = "\"#{word.gsub('"', '')}\""
41
- else
42
- word = "#{word}*"
43
- end
44
-
45
- or_query = fields.map do |field|
46
- "#{field}:#{word}"
47
- end.join(' OR ')
48
-
49
- "(#{or_query})"
50
- end
51
-
52
- private
53
- # Converts a sentence into the words:
54
- #
55
- # split_phrase_into_words('his "blue fox"')
56
- # => ['his', 'blue fox']
57
- def split_phrase_into_words(phrase)
58
- # If we have an odd number of double quotes,
59
- # add a double quote to the end so that shellwords
60
- # does not crap out.
61
- if phrase.count('"') % 2 == 1
62
- phrase = "#{phrase}\""
63
- end
64
-
65
- Shellwords::shellwords phrase.gsub("'", "\"'\"")
66
- end
67
13
  end
68
14
  end
69
15
  end
@@ -13,10 +13,10 @@ module ElasticRecord
13
13
  end
14
14
  end
15
15
 
16
- def find_ids_in_batches(options = {})
16
+ def find_ids_in_batches(options = {}, &block)
17
17
  options.assert_valid_keys(:batch_size)
18
18
 
19
- scroll_keep_alive = '1m'
19
+ scroll_keep_alive = options[:keep_alive] || '5m'
20
20
  size = options[:batch_size] || 100
21
21
 
22
22
  options = {
@@ -28,7 +28,7 @@ module ElasticRecord
28
28
  scroll_id = klass.elastic_index.search(as_elastic, options)['_scroll_id']
29
29
 
30
30
  while (hit_ids = get_scroll_hit_ids(scroll_id, scroll_keep_alive)).any?
31
- yield hit_ids
31
+ hit_ids.each_slice(size, &block)
32
32
  end
33
33
  end
34
34
 
@@ -2,27 +2,23 @@ module ElasticRecord
2
2
  class Relation
3
3
  module SearchMethods
4
4
  Relation::MULTI_VALUE_METHODS.each do |name|
5
- class_eval <<-CODE, __FILE__, __LINE__ + 1
6
- def #{name}_values # def filter_values
7
- @values[:#{name}] || [] # @values[:filter] || []
8
- end # end
9
- #
10
- def #{name}_values=(values) # def filter_values=(values)
11
- @values[:#{name}] = values # @values[:filter] = values
12
- end # end
13
- CODE
5
+ define_method "#{name}_values" do
6
+ @values[name] || []
7
+ end
8
+
9
+ define_method "#{name}_values=" do |values|
10
+ @values[name] = values
11
+ end
14
12
  end
15
13
 
16
14
  Relation::SINGLE_VALUE_METHODS.each do |name|
17
- class_eval <<-CODE, __FILE__, __LINE__ + 1
18
- def #{name}_value # def offset_value
19
- @values[:#{name}] # @values[:offset]
20
- end # end
21
-
22
- def #{name}_value=(value) # def offset_value=(value)
23
- @values[:#{name}] = value # @values[:offset] = value
24
- end # end
25
- CODE
15
+ define_method "#{name}_value" do
16
+ @values[name]
17
+ end
18
+
19
+ define_method "#{name}_value=" do |value|
20
+ @values[name] = value
21
+ end
26
22
  end
27
23
 
28
24
  def query!(value)
@@ -5,30 +5,4 @@ class ElasticRecord::LuceneTest < MiniTest::Spec
5
5
  assert_equal "\\\\", ElasticRecord::Lucene.escape("\\")
6
6
  assert_equal "Matt \\&& Joe", ElasticRecord::Lucene.escape("Matt && Joe")
7
7
  end
8
-
9
- def test_match_phrase
10
- assert_match_phrase nil, '', ['name']
11
- assert_match_phrase nil, nil, ['name']
12
-
13
- assert_match_phrase '(name:foo*)', 'foo', ['name']
14
- assert_match_phrase '(name:"foo-bar")', 'foo-bar', ['name']
15
- assert_match_phrase "(name:bob's*)", "bob's", ['name']
16
- assert_match_phrase '(name:foo* OR street:foo*)', 'foo', ['name', 'street']
17
- assert_match_phrase '(name:"foo bar" OR street:"foo bar") AND (name:faz* OR street:faz*)', '"foo bar" faz', ['name', 'street']
18
- assert_match_phrase '(street:"42 place") AND (name:bar*)', 'street:"42 place" name:bar', ['name', 'street']
19
- end
20
-
21
- def test_match_phrase_with_unmatched_quotes
22
- assert_match_phrase '(name:"foo bar")', '"foo bar', ['name']
23
- end
24
-
25
- def test_match_phrase_with_block
26
- assert_match_phrase '(name.analyzed:foo*)', 'foo', ['name'] { |f| "#{f}.analyzed" }
27
- end
28
-
29
- private
30
-
31
- def assert_match_phrase(expected, query, fields, &block)
32
- assert_equal expected, ElasticRecord::Lucene.match_phrase(query, fields, &block)
33
- end
34
8
  end
@@ -24,11 +24,13 @@ class ElasticRecord::Relation::BatchesTest < MiniTest::Spec
24
24
 
25
25
  def test_find_ids_in_batches_with_size
26
26
  results = []
27
- Widget.elastic_relation.find_ids_in_batches(batch_size: 1) do |ids|
27
+ Widget.elastic_relation.find_ids_in_batches(batch_size: 2) do |ids|
28
28
  results << ids
29
29
  end
30
30
 
31
31
  assert_equal 2, results.size
32
+ assert_equal 2, results[0].size
33
+ assert_equal 1, results[1].size
32
34
  assert_equal ['5', '10', '15'].to_set, results.flatten.to_set
33
35
  end
34
36
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infogroup
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-15 00:00:00.000000000 Z
12
+ date: 2013-05-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: arelastic