elastic_record 1.1.4 → 1.1.5

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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -1
  3. data/Rakefile +2 -2
  4. data/elastic_record.gemspec +2 -2
  5. data/lib/elastic_record.rb +1 -0
  6. data/lib/elastic_record/callbacks.rb +13 -5
  7. data/lib/elastic_record/connection.rb +7 -8
  8. data/lib/elastic_record/errors.rb +10 -0
  9. data/lib/elastic_record/index/deferred.rb +7 -1
  10. data/lib/elastic_record/index/documents.rb +34 -17
  11. data/lib/elastic_record/index/manage.rb +8 -0
  12. data/lib/elastic_record/index/percolator.rb +16 -10
  13. data/lib/elastic_record/integration/active_record.rb +7 -0
  14. data/lib/elastic_record/integration/cassandra_object.rb +7 -0
  15. data/lib/elastic_record/model.rb +5 -10
  16. data/lib/elastic_record/railtie.rb +10 -0
  17. data/lib/elastic_record/relation.rb +26 -5
  18. data/lib/elastic_record/relation/batches.rb +4 -1
  19. data/lib/elastic_record/relation/finder_methods.rb +13 -3
  20. data/lib/elastic_record/relation/search_methods.rb +17 -0
  21. data/lib/elastic_record/relation/value_methods.rb +2 -2
  22. data/lib/elastic_record/searches_many.rb +1 -1
  23. data/lib/elastic_record/searches_many/association.rb +14 -10
  24. data/lib/elastic_record/searches_many/builder.rb +3 -3
  25. data/lib/elastic_record/searches_many/collection_proxy.rb +9 -3
  26. data/lib/elastic_record/searches_many/reflection.rb +4 -0
  27. data/test/elastic_record/callbacks_test.rb +65 -1
  28. data/test/elastic_record/config_test.rb +3 -3
  29. data/test/elastic_record/connection_test.rb +1 -1
  30. data/test/elastic_record/index/configurator_test.rb +1 -1
  31. data/test/elastic_record/index/documents_test.rb +23 -4
  32. data/test/elastic_record/index/manage_test.rb +1 -1
  33. data/test/elastic_record/index/mapping_test.rb +1 -1
  34. data/test/elastic_record/index/percolator_test.rb +1 -1
  35. data/test/elastic_record/index/settings_test.rb +1 -1
  36. data/test/elastic_record/index/warmer_test.rb +1 -1
  37. data/test/elastic_record/index_test.rb +1 -1
  38. data/test/elastic_record/integration/active_record_test.rb +39 -0
  39. data/test/elastic_record/log_subscriber_test.rb +11 -0
  40. data/test/elastic_record/lucene_test.rb +1 -1
  41. data/test/elastic_record/model_test.rb +1 -1
  42. data/test/elastic_record/railties/controller_runtime_test.rb +1 -1
  43. data/test/elastic_record/relation/admin_test.rb +13 -7
  44. data/test/elastic_record/relation/batches_test.rb +27 -1
  45. data/test/elastic_record/relation/delegation_test.rb +1 -1
  46. data/test/elastic_record/relation/finder_methods_test.rb +23 -8
  47. data/test/elastic_record/relation/merging_test.rb +1 -1
  48. data/test/elastic_record/relation/none_test.rb +1 -1
  49. data/test/elastic_record/relation/search_methods_test.rb +15 -2
  50. data/test/elastic_record/relation_test.rb +50 -3
  51. data/test/elastic_record/searches_many/association_test.rb +47 -0
  52. data/test/elastic_record/searches_many/autosave_test.rb +11 -10
  53. data/test/elastic_record/searches_many/collection_proxy_test.rb +1 -1
  54. data/test/elastic_record/searches_many/reflection_test.rb +7 -1
  55. data/test/elastic_record/searches_many_test.rb +11 -11
  56. data/test/elastic_record/searching_test.rb +1 -1
  57. data/test/helper.rb +19 -12
  58. data/test/support/models/option.rb +24 -0
  59. data/test/support/models/test_model.rb +22 -1
  60. data/test/support/models/warehouse.rb +2 -2
  61. data/test/support/models/widget.rb +4 -2
  62. data/test/support/query_counter.rb +56 -0
  63. metadata +10 -5
  64. data/lib/elastic_record/orm/active_record.rb +0 -7
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class ElasticRecord::SearchingTest < MiniTest::Spec
3
+ class ElasticRecord::SearchingTest < MiniTest::Unit::TestCase
4
4
  def test_elastic_search
5
5
 
6
6
  end
data/test/helper.rb CHANGED
@@ -4,30 +4,37 @@ Bundler.require
4
4
  require 'minitest/autorun'
5
5
 
6
6
  require 'support/connect'
7
+ require 'support/query_counter'
7
8
  require 'support/models/test_model'
8
9
  require 'support/models/warehouse'
9
10
  require 'support/models/widget'
11
+ require 'support/models/option'
12
+ require 'pp'
10
13
 
11
- ElasticRecord::Config.model_names = %w(Warehouse Widget)
14
+ ElasticRecord::Config.model_names = %w(Warehouse Widget Option)
12
15
 
13
16
  FakeWeb.allow_net_connect = %r[^https?://127.0.0.1]
14
17
 
15
18
  module MiniTest
16
- class Spec
17
- def setup
18
- super
19
- FakeWeb.clean_registry
19
+ class Unit
20
+ class TestCase
21
+ def setup
22
+ Widget._test_cache.clear
23
+ Option._test_cache.clear
20
24
 
21
- Widget.elastic_index.create_and_deploy if Widget.elastic_index.all_names.empty?
25
+ FakeWeb.clean_registry
22
26
 
23
- ElasticRecord::Config.models.each do |model|
24
- model.elastic_index.enable_deferring!
27
+ Widget.elastic_index.create_and_deploy if Widget.elastic_index.all_names.empty?
28
+
29
+ ElasticRecord::Config.models.each do |model|
30
+ model.elastic_index.enable_deferring!
31
+ end
25
32
  end
26
- end
27
33
 
28
- def teardown
29
- ElasticRecord::Config.models.each do |model|
30
- model.elastic_index.reset_deferring!
34
+ def teardown
35
+ ElasticRecord::Config.models.each do |model|
36
+ model.elastic_index.reset_deferring!
37
+ end
31
38
  end
32
39
  end
33
40
  end
@@ -0,0 +1,24 @@
1
+ class Option
2
+ include TestModel
3
+
4
+ define_attributes [:name, :widget_id]
5
+
6
+ searches_many :options
7
+
8
+ self.elastic_index.mapping[:properties].update(
9
+ name: {
10
+ type: 'multi_field',
11
+ fields: {
12
+ name: {type: 'string', index: 'not_analyzed'},
13
+ analyzed: {type: 'string', index: 'analyzed'}
14
+ }
15
+ },
16
+ widget_id: {
17
+ type: 'string', index: 'not_analyzed'
18
+ }
19
+ )
20
+
21
+ def widget=(other)
22
+ self.widget_id = other.id
23
+ end
24
+ end
@@ -11,11 +11,28 @@ module TestModel
11
11
 
12
12
  include ElasticRecord::Model
13
13
  include ElasticRecord::Callbacks
14
+
14
15
  end
15
16
 
16
17
  module ClassMethods
18
+
19
+ def _test_cache
20
+ @_test_cache ||= []
21
+ end
22
+
23
+ def load_elastic_record_hits(*args)
24
+ find(*args)
25
+ end
26
+
17
27
  def find(ids)
18
- ids.map { |id| new(id: id, color: 'red') }
28
+ ids.map do |id|
29
+ record = _test_cache.detect { |m| m.id.to_s == id.to_s }
30
+ record.nil? ? new(id: id, color: 'red') : record.clone
31
+ end
32
+ end
33
+
34
+ def primary_key
35
+ 'id'
19
36
  end
20
37
 
21
38
  def base_class
@@ -50,6 +67,10 @@ module TestModel
50
67
 
51
68
  def initialize(attrs = {})
52
69
  self.attributes = attrs
70
+ cloned = self.clone
71
+ cloned.id = cloned.id.to_s
72
+ self.class._test_cache.delete_if { |record| record.id == cloned.id }
73
+ self.class._test_cache << cloned
53
74
  end
54
75
 
55
76
  def attributes=(attrs)
@@ -2,5 +2,5 @@ class Warehouse
2
2
  include TestModel
3
3
 
4
4
  define_attributes [:name]
5
- searches_many :widgets
6
- end
5
+ searches_many :widgets, :autosave => true
6
+ end
@@ -5,9 +5,11 @@ class Widget
5
5
 
6
6
  define_attributes [:name, :color, :warehouse_id]
7
7
 
8
+ searches_many :options
9
+
8
10
  self.elastic_index.mapping[:properties].update(
9
11
  name: {
10
- type: 'multi_field',
12
+ type: 'multi_field',
11
13
  fields: {
12
14
  name: {type: 'string', index: 'not_analyzed'},
13
15
  analyzed: {type: 'string', index: 'analyzed'}
@@ -36,4 +38,4 @@ class Widget
36
38
  def warehouse=(other)
37
39
  self.warehouse_id = other.id
38
40
  end
39
- end
41
+ end
@@ -0,0 +1,56 @@
1
+ class ElasticSearchCounter
2
+ class << self
3
+ attr_accessor :ignored_elastic, :log, :log_all
4
+ def clear_log; self.log = []; self.log_all = []; end
5
+ end
6
+
7
+ self.clear_log
8
+
9
+ self.ignored_elastic = []
10
+
11
+ elastic_search_ignored = []
12
+
13
+ [elastic_search_ignored].each do |db_ignored_elastic|
14
+ ignored_elastic.concat db_ignored_elastic
15
+ end
16
+
17
+ attr_reader :ignore
18
+
19
+ def initialize(ignore = Regexp.union(self.class.ignored_elastic))
20
+ @ignore = ignore
21
+ end
22
+
23
+ def call(name, start, finish, message_id, values)
24
+ self.class.log_all << values
25
+ self.class.log << values unless ignore =~ values[:request].path
26
+ end
27
+ end
28
+
29
+ ActiveSupport::Notifications.subscribe('request.elastic_record', ElasticSearchCounter.new)
30
+
31
+ module MiniTest
32
+ class Unit
33
+ class TestCase
34
+ def assert_queries(num = 1, options = {})
35
+ ignore_none = options.fetch(:ignore_none) { num == :any }
36
+ ElasticSearchCounter.clear_log
37
+ x = yield
38
+ the_log = ignore_none ? ElasticSearchCounter.log_all : ElasticSearchCounter.log
39
+ if num == :any
40
+ assert_operator the_log.size, :>=, 1, "1 or more queries expected, but none were executed."
41
+ else
42
+ queries = the_log.map { |event| " #{event[:request].method} #{event[:request].path} #{event[:request].body}\n" }.join("\n")
43
+
44
+ mesg = "#{the_log.size} instead of #{num} queries were executed.#{the_log.size == 0 ? '' : "\nQueries:\n#{queries}"}"
45
+ assert_equal num, the_log.size, mesg
46
+ end
47
+
48
+ x
49
+ end
50
+
51
+ def assert_no_queries(&block)
52
+ assert_queries(0, :ignore_none => true, &block)
53
+ end
54
+ end
55
+ end
56
+ end
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.1.4
4
+ version: 1.1.5
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-06-05 00:00:00.000000000 Z
12
+ date: 2013-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: arelastic
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '>='
19
19
  - !ruby/object:Gem::Version
20
- version: 0.3.0
20
+ version: 0.4.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '>='
26
26
  - !ruby/object:Gem::Version
27
- version: 0.3.0
27
+ version: 0.4.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: activemodel
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -57,6 +57,7 @@ files:
57
57
  - lib/elastic_record/callbacks.rb
58
58
  - lib/elastic_record/config.rb
59
59
  - lib/elastic_record/connection.rb
60
+ - lib/elastic_record/errors.rb
60
61
  - lib/elastic_record/index.rb
61
62
  - lib/elastic_record/index/configurator.rb
62
63
  - lib/elastic_record/index/deferred.rb
@@ -66,10 +67,11 @@ files:
66
67
  - lib/elastic_record/index/percolator.rb
67
68
  - lib/elastic_record/index/settings.rb
68
69
  - lib/elastic_record/index/warmer.rb
70
+ - lib/elastic_record/integration/active_record.rb
71
+ - lib/elastic_record/integration/cassandra_object.rb
69
72
  - lib/elastic_record/log_subscriber.rb
70
73
  - lib/elastic_record/lucene.rb
71
74
  - lib/elastic_record/model.rb
72
- - lib/elastic_record/orm/active_record.rb
73
75
  - lib/elastic_record/railtie.rb
74
76
  - lib/elastic_record/railties/controller_runtime.rb
75
77
  - lib/elastic_record/relation.rb
@@ -100,6 +102,7 @@ files:
100
102
  - test/elastic_record/index/settings_test.rb
101
103
  - test/elastic_record/index/warmer_test.rb
102
104
  - test/elastic_record/index_test.rb
105
+ - test/elastic_record/integration/active_record_test.rb
103
106
  - test/elastic_record/log_subscriber_test.rb
104
107
  - test/elastic_record/lucene_test.rb
105
108
  - test/elastic_record/model_test.rb
@@ -120,9 +123,11 @@ files:
120
123
  - test/elastic_record/searching_test.rb
121
124
  - test/helper.rb
122
125
  - test/support/connect.rb
126
+ - test/support/models/option.rb
123
127
  - test/support/models/test_model.rb
124
128
  - test/support/models/warehouse.rb
125
129
  - test/support/models/widget.rb
130
+ - test/support/query_counter.rb
126
131
  homepage: http://github.com/data-axle/elastic_record
127
132
  licenses:
128
133
  - MIT
@@ -1,7 +0,0 @@
1
- module ElasticRecord
2
- module ActiveRecord
3
- def initialize_from_elastic_search(results)
4
-
5
- end
6
- end
7
- end