elasticsearch-model-extensions 0.0.4 → 0.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: 9a5e049bad3147441c538c4b369b93d438dc431c
4
- data.tar.gz: 93cee441524ba5c0dcfc77e1c4024fe53be31371
3
+ metadata.gz: bc9cef5c332c7100957fd86118f2bc7e3b441d1c
4
+ data.tar.gz: ca19391b4737aad8eeef5a31ce4f939bf41125a8
5
5
  SHA512:
6
- metadata.gz: a34d4689f80a8676ca79f4bd522c45b8d9f044ecf13fe541632e5bcfb120d220bbca7a75c63648c46e2791d8843316a22799957360d512cd9172776bb386977c
7
- data.tar.gz: 34b1d5ce206560036aad88adcc71833292f4bf7ae0d53a56a941939f09cb70323852ed7d58829b3a89ce884f900d10ff2d46e2f23f14e70d61a23b4bf6ea84dd
6
+ metadata.gz: 6f33927f78adcf088dcd924a1961a131cd0d236db9fafc6be1fbc68a3d18788cdb4b0edd68dbd76e6261aed5dd39b844e533e1684ccbac6854350ee079ce43aa
7
+ data.tar.gz: eb90efb604e5244469a3b769d93f34ac1791240382686bd50ca8ce8db2c67f985cc15e3fe79962acbe1ff51fe68f51057aaa4809b14cca6c7ff58830e61fbe83
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,15 @@
1
+ bundler_args: --without development
2
+ language: ruby
3
+ rvm:
4
+ - 2.1.2
5
+ - 2.1.3
6
+ - ruby-head
7
+ matrix:
8
+ allow_failures:
9
+ - rvm: ruby-head
10
+ fast_finish: true
11
+ before_script:
12
+ - ls -la /usr/share/elasticsearch/bin/elasticsearch
13
+ - echo $PWD
14
+ before_install: gem install bundler
15
+ script: SERVER=launch TEST_CLUSTER_COMMAND=/usr/share/elasticsearch/bin/elasticsearch TEST_CLUSTER_PARAMS='-Des.default.path.conf=/etc/elasticsearch/ -Des.default.path.logs=/var/log/elasticsearch/' TEST_CLUSTER_PORT=19250 bundle exec rspec
data/Gemfile CHANGED
@@ -5,7 +5,13 @@ gemspec
5
5
 
6
6
  group :test do
7
7
  gem 'rspec', '~> 3.1.0'
8
+ gem 'database_cleaner'
9
+ gem 'coveralls', require: false
10
+ end
11
+
12
+ group :test, :development do
8
13
  gem 'activerecord', '~> 3.2'
9
14
  gem 'sqlite3'
10
15
  gem 'elasticsearch-model'
16
+ gem 'elasticsearch-extensions'
11
17
  end
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Elasticsearch::Model::Extensions
2
2
 
3
+ [![Build Status](https://travis-ci.org/crowdworks/elasticsearch-model-extensions.svg?branch=master)](https://travis-ci.org/crowdworks/elasticsearch-model-extensions)
4
+ [![Coverage Status](https://coveralls.io/repos/crowdworks/elasticsearch-model-extensions/badge.png)](https://coveralls.io/r/crowdworks/elasticsearch-model-extensions)
5
+ [![Code Climate](https://codeclimate.com/github/crowdworks/elasticsearch-model-extensions/badges/gpa.svg)](https://codeclimate.com/github/crowdworks/elasticsearch-model-extensions)
6
+
3
7
  TODO: Write a gem description
4
8
 
5
9
  ## Installation
@@ -22,6 +26,14 @@ Or install it yourself as:
22
26
 
23
27
  TODO: Write usage instructions here
24
28
 
29
+ ## Running examples
30
+
31
+ With Elasticsearch installed, you can run examples configured with an ES instance started on the port 9250 and AR connected to sqlite:
32
+
33
+ $ bundle exec irb -I spec -r example/articles_with_comments
34
+ (A bunch of log output here)
35
+ irb(main):001:0> Article.search('Comment1')
36
+
25
37
  ## Contributing
26
38
 
27
39
  1. Fork it ( https://github.com/[my-github-username]/elasticsearch-model-extensions/fork )
@@ -92,7 +92,11 @@ module Elasticsearch
92
92
  one_or_more_errors_occurred = response["errors"]
93
93
 
94
94
  if one_or_more_errors_occurred
95
- Rails.logger.warn "One or more error(s) occurred while updating the index #{records} for the type #{type}\n#{JSON.pretty_generate(response)}"
95
+ if defined? ::Rails
96
+ ::Rails.logger.warn "One or more error(s) occurred while updating the index #{records} for the type #{type}\n#{JSON.pretty_generate(response)}"
97
+ else
98
+ warn "One or more error(s) occurred while updating the index #{records} for the type #{type}\n#{JSON.pretty_generate(response)}"
99
+ end
96
100
  end
97
101
  else
98
102
  records.each do |r|
@@ -4,7 +4,7 @@ module Elasticsearch
4
4
  class Configuration
5
5
  attr_reader :delayed
6
6
 
7
- def initialize(active_record_class, parent_class: parent_class, delayed:, only_if: -> r { true }, records_to_update_documents: nil, field_to_update: nil)
7
+ def initialize(active_record_class, parent_class: parent_class, delayed:, only_if: -> r { true }, records_to_update_documents: nil, field_to_update: nil, block: nil)
8
8
  @delayed = @delayed
9
9
 
10
10
  @active_record_class = active_record_class
@@ -12,6 +12,7 @@ module Elasticsearch
12
12
  @if = binding.local_variable_get(:only_if)
13
13
  @records_to_update_documents = records_to_update_documents
14
14
  @field_to_update = field_to_update
15
+ @block = block
15
16
  end
16
17
 
17
18
  def to_hash
@@ -34,6 +35,10 @@ module Elasticsearch
34
35
  -> t { delayed ? t.delay : t }
35
36
  end
36
37
 
38
+ def block
39
+ to_hash[:block]
40
+ end
41
+
37
42
  private
38
43
 
39
44
  def build_hash
@@ -65,10 +70,18 @@ module Elasticsearch
65
70
 
66
71
  only_if, records_to_update_documents = update_strategy.apply
67
72
 
73
+ # The default block used to trigger partial updating on the parent document.
74
+ # Replace this by specifying `block` parameter to a configuration like `Configuration.new(block: BLOCK)`
75
+ # when more fine-grained controls over it like feature-toggling, graceful-degradation are required.
76
+ default_partial_updating_block = -> t, field_to_update {
77
+ t.partially_update_document(field_to_update)
78
+ }
79
+
68
80
  {
69
81
  field_to_update: field_to_update,
70
82
  records_to_update_documents: @records_to_update_documents || records_to_update_documents,
71
- only_if: -> r { custom_if.call(r) && only_if.call(r) }
83
+ only_if: -> r { custom_if.call(r) && only_if.call(r) },
84
+ block: @block || default_partial_updating_block
72
85
  }
73
86
  end
74
87
  end
@@ -9,6 +9,7 @@ module Elasticsearch
9
9
  records_to_update_documents = config.records_to_update_documents
10
10
  optionally_delayed = config.optionally_delayed
11
11
  only_if = config.only_if
12
+ block = config.block
12
13
 
13
14
  record.instance_eval do
14
15
  return unless only_if.call(self)
@@ -17,7 +18,7 @@ module Elasticsearch
17
18
 
18
19
  if target.respond_to? :each
19
20
  target.map(&:reload).map(&optionally_delayed).each do |t|
20
- t.partially_update_document(field_to_update)
21
+ block.call(t, [*field_to_update])
21
22
  end
22
23
  else
23
24
  optionally_delayed.call(target.reload).partially_update_document(field_to_update)
@@ -39,7 +39,14 @@ module Elasticsearch
39
39
  records_to_update_documents = begin
40
40
  child_to_parent_path = Elasticsearch::Model::Extensions::OuterDocumentUpdating::ClassMethods::AssociationTraversal.shortest_path(from: child_class, to: parent_class)
41
41
 
42
- -> updated_record { child_to_parent_path.inject(updated_record) { |d, parent_association| d.send parent_association } }
42
+ -> updated_record {
43
+ if child_to_parent_path.nil?
44
+ warn "Couldn't automatically determine the path from the class `#{child_class}` to `#{parent_class}." +
45
+ "Use `partially_updates_document_of parent_class, records_to_update_documents: -> child { ... }` to specify it."
46
+ end
47
+
48
+ child_to_parent_path.inject(updated_record) { |d, parent_association| d.send parent_association }
49
+ }
43
50
  end
44
51
 
45
52
  [only_if, records_to_update_documents]
@@ -104,15 +111,17 @@ module Elasticsearch
104
111
  first
105
112
  end
106
113
 
107
- def initialize_active_record!(active_record_class, parent_class: parent_class, delayed:, only_if: -> r { true }, records_to_update_documents: nil, field_to_update: nil)
114
+ def initialize_active_record!(active_record_class, parent_class: parent_class, delayed:, only_if: -> r { true }, records_to_update_documents: nil, field_to_update: nil, block: block)
108
115
  config = Elasticsearch::Model::Extensions::Configuration.new(active_record_class, parent_class: parent_class, delayed: delayed, only_if: binding.local_variable_get(:only_if), records_to_update_documents: records_to_update_documents,
109
- field_to_update: field_to_update)
116
+ field_to_update: field_to_update,
117
+ block: block
118
+ )
110
119
 
111
120
  active_record_class.after_commit Elasticsearch::Model::Extensions::UpdateCallback.new(config)
112
121
  active_record_class.after_commit Elasticsearch::Model::Extensions::DestroyCallback.new(config), on: :destroy
113
122
  end
114
123
 
115
- def partially_updates_document_of(parent_class, options)
124
+ def partially_updates_document_of(parent_class, options, &block)
116
125
  options ||= {}
117
126
  delayed = options[:delayed] || nil
118
127
  only_if = options[:if] || (-> r { true })
@@ -125,7 +134,8 @@ module Elasticsearch
125
134
  :delayed => delayed,
126
135
  :only_if => only_if,
127
136
  :field_to_update => field_to_update,
128
- :records_to_update_documents => records_to_update_documents
137
+ :records_to_update_documents => records_to_update_documents,
138
+ :block => block
129
139
  )
130
140
  end
131
141
 
@@ -16,7 +16,9 @@ module Elasticsearch
16
16
  method_attributes = indexed_attributes - persisted_attributes - nested_attributes
17
17
  only_attributes = indexed_attributes - nested_attributes
18
18
 
19
- options = {}
19
+ options = {
20
+ root: false
21
+ }
20
22
 
21
23
  if only_attributes.size > 1
22
24
  options[:only] = only_attributes
@@ -75,7 +77,11 @@ module Elasticsearch
75
77
  begin
76
78
  partial_document = build_partial_document_for_update(*changed_attributes)
77
79
  rescue => e
78
- Rails.logger.error "Error in #partially_update_document: #{e.message}\n#{e.backtrace.join("\n")}"
80
+ if defined? ::Rails
81
+ ::Rails.logger.error "Error in #partially_update_document: #{e.message}\n#{e.backtrace.join("\n")}"
82
+ else
83
+ warn "Error in #partially_update_document: #{e.message}\n#{e.backtrace.join("\n")}"
84
+ end
79
85
  end
80
86
 
81
87
  update_document(partial_document)
@@ -9,6 +9,7 @@ module Elasticsearch
9
9
  records_to_update_documents = config.records_to_update_documents
10
10
  optionally_delayed = config.optionally_delayed
11
11
  only_if = config.only_if
12
+ block = config.block
12
13
 
13
14
  record.instance_eval do
14
15
  return unless only_if.call(self) && index_update_required?
@@ -30,7 +31,7 @@ module Elasticsearch
30
31
  # Here, `article_comment.article` may contain outdated `comments` because `article_comment.article`
31
32
  # won't be notified with changes in `article_comments` thus won't reload `comments` automatically.
32
33
  target.map(&:reload).map(&optionally_delayed).each do |t|
33
- t.partially_update_document(field_to_update)
34
+ block.call(t, [*field_to_update])
34
35
  end
35
36
  else
36
37
  optionally_delayed.call(target.reload).partially_update_document(field_to_update)
@@ -1,7 +1,7 @@
1
1
  module Elasticsearch
2
2
  module Model
3
3
  module Extensions
4
- VERSION = "0.0.4"
4
+ VERSION = "0.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,8 @@
1
+ load 'setup/sqlite.rb'
2
+ load 'setup/elasticsearch/model.rb'
3
+ load 'setup/elasticsearch/start.rb'
4
+ load 'setup/articles_with_comments.rb'
5
+
6
+ at_exit do
7
+ load 'setup/elasticsearch/stop.rb'
8
+ end
@@ -1,7 +1,7 @@
1
1
  require 'elasticsearch/model/extensions/all'
2
2
 
3
3
  RSpec.describe 'example' do
4
- before :all do
4
+ before :each do
5
5
  ActiveRecord::Schema.define(:version => 1) do
6
6
  create_table :articles do |t|
7
7
  t.string :title
@@ -12,13 +12,6 @@ RSpec.describe 'example' do
12
12
  class ::Article < ActiveRecord::Base
13
13
  include Elasticsearch::Model
14
14
  include Elasticsearch::Model::Callbacks
15
- include Elasticsearch::Model::Extensions::IndexOperations
16
- include Elasticsearch::Model::Extensions::BatchUpdating
17
- include Elasticsearch::Model::Extensions::PartialUpdating
18
-
19
- DEPENDENT_CUSTOM_ATTRIBUTES = {}
20
-
21
- include Elasticsearch::Model::Extensions::DependencyTracking
22
15
 
23
16
  settings index: {number_of_shards: 1, number_of_replicas: 0} do
24
17
  mapping do
@@ -38,6 +31,12 @@ RSpec.describe 'example' do
38
31
  Article.__elasticsearch__.refresh_index!
39
32
  end
40
33
 
34
+ after :each do
35
+ ActiveRecord::Schema.define(:version => 2) do
36
+ drop_table :articles
37
+ end
38
+ end
39
+
41
40
  subject {
42
41
  ::Article.create(title: 'foo', created_at: Time.now)
43
42
  }
@@ -0,0 +1,49 @@
1
+ require 'elasticsearch/model/extensions/all'
2
+
3
+ RSpec.describe Elasticsearch::Model::Extensions::OuterDocumentUpdating do
4
+ before(:each) do
5
+ load 'setup/articles_with_comments.rb'
6
+ end
7
+
8
+ after :each do
9
+ ActiveRecord::Schema.define(:version => 2) do
10
+ drop_table :comments
11
+ drop_table :articles
12
+ end
13
+ end
14
+
15
+ describe 'an article' do
16
+ def article
17
+ ::Article.search('Comment1').records.first
18
+ end
19
+
20
+ context 'with a comment added' do
21
+ before(:each) do
22
+ article.comments.create(body: 'Comment2')
23
+
24
+ Article.__elasticsearch__.refresh_index!
25
+ end
26
+
27
+ specify {
28
+ expect(Article.search('Comment1').records.first).not_to be_nil
29
+ expect(Article.search('Comment2').records.first).not_to be_nil
30
+ }
31
+ end
32
+
33
+ context 'when a comment destroyed' do
34
+ before(:each) do
35
+ article.comments.first.destroy
36
+
37
+ Article.__elasticsearch__.refresh_index!
38
+ end
39
+
40
+ specify 'the article is updated' do
41
+ expect(Article.search('Comment1').records).to be_empty
42
+ end
43
+
44
+ specify 'the comment becomes unsearchable' do
45
+ expect(Comment.search('Comment1').records).to be_empty
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,30 @@
1
+ require 'elasticsearch/model/extensions/all'
2
+
3
+ RSpec.describe Elasticsearch::Model::Extensions::PartialUpdating do
4
+ before(:each) do
5
+ load 'setup/articles_with_comments.rb'
6
+ end
7
+
8
+ after :each do
9
+ ActiveRecord::Schema.define(:version => 2) do
10
+ drop_table :comments
11
+ drop_table :articles
12
+ end
13
+ end
14
+
15
+ let(:as_json_options) {
16
+ described_class.build_as_json_options(klass: Article, props: Article.mappings.to_hash[Article.document_type.intern][:properties])
17
+ }
18
+
19
+ subject {
20
+ Article.last
21
+ }
22
+
23
+ specify {
24
+ expect(as_json_options).to include(methods: :num_comments)
25
+ }
26
+
27
+ specify {
28
+ expect(subject.build_partial_document_for_update(:comments)).to include(:comments, :num_comments)
29
+ }
30
+ end
@@ -0,0 +1,72 @@
1
+ require 'elasticsearch/model/extensions/all'
2
+
3
+ ActiveRecord::Schema.define(:version => 1) do
4
+ create_table :articles do |t|
5
+ t.string :title
6
+ t.datetime :created_at, :default => 'NOW()'
7
+ end
8
+
9
+ create_table :comments do |t|
10
+ t.integer :article_id
11
+ t.string :body
12
+ t.datetime :created_at, :default => 'NOW()'
13
+ end
14
+ end
15
+
16
+ class ::Article < ActiveRecord::Base
17
+ has_many :comments
18
+
19
+ accepts_nested_attributes_for :comments
20
+
21
+ include Elasticsearch::Model
22
+ include Elasticsearch::Model::Callbacks
23
+ include Elasticsearch::Model::Extensions::IndexOperations
24
+ include Elasticsearch::Model::Extensions::BatchUpdating
25
+ include Elasticsearch::Model::Extensions::PartialUpdating
26
+
27
+ DEPENDENT_CUSTOM_ATTRIBUTES = {
28
+ %w| comments | => %w| num_comments |
29
+ }
30
+
31
+ include Elasticsearch::Model::Extensions::DependencyTracking
32
+
33
+ settings index: {number_of_shards: 1, number_of_replicas: 0} do
34
+ mapping do
35
+ indexes :title, type: 'string', analyzer: 'snowball'
36
+ indexes :created_at, type: 'date'
37
+ indexes :comments, type: 'object' do
38
+ indexes :body, type: 'string', include_in_all: true
39
+ end
40
+ indexes :num_comments, type: 'long'
41
+ end
42
+ end
43
+
44
+ def num_comments
45
+ comments.count
46
+ end
47
+
48
+ # Required by Comment's `OuterDocumentUpdating`
49
+ include Elasticsearch::Model::Extensions::MappingReflection
50
+ end
51
+
52
+ class ::Comment < ActiveRecord::Base
53
+ include Elasticsearch::Model
54
+ include Elasticsearch::Model::Callbacks
55
+ include Elasticsearch::Model::Extensions::IndexOperations
56
+ include Elasticsearch::Model::Extensions::BatchUpdating
57
+ include Elasticsearch::Model::Extensions::PartialUpdating
58
+ include Elasticsearch::Model::Extensions::OuterDocumentUpdating
59
+
60
+ partially_updates_document_of ::Article, records_to_update_documents: -> comment { Article.find(comment.article_id) } do |t, changed_fields|
61
+ t.partially_update_document(*changed_fields)
62
+ end
63
+ end
64
+
65
+ Article.delete_all
66
+ Article.__elasticsearch__.create_index! force: true
67
+
68
+ ::Article.create! title: 'Test'
69
+ ::Article.create! title: 'Testing Coding'
70
+ ::Article.create! title: 'Coding', comments_attributes: [{ body: 'Comment1' }]
71
+
72
+ Article.__elasticsearch__.refresh_index!
@@ -0,0 +1,11 @@
1
+ require 'elasticsearch/model'
2
+
3
+ tracer = ::Logger.new(STDERR)
4
+ tracer.formatter = lambda { |s, d, p, m| "#{m.gsub(/^.*$/) { |n| ' ' + n }}\n" }
5
+
6
+ listened_port = (ENV['TEST_CLUSTER_PORT'] || 9250)
7
+
8
+ tracer.info "Connecting to the Elasticsearch listening for the port: #{listened_port}"
9
+
10
+ Elasticsearch::Model.client = Elasticsearch::Client.new host: "localhost:#{listened_port}",
11
+ tracer: (ENV['QUIET'] ? nil : tracer)
@@ -0,0 +1,5 @@
1
+ require 'elasticsearch/extensions/test/cluster'
2
+
3
+ port_to_listen = ENV['TEST_CLUSTER_PORT'] || '9250'
4
+
5
+ Elasticsearch::Extensions::Test::Cluster.start(nodes:1, port: port_to_listen.to_i)
@@ -0,0 +1,3 @@
1
+ require 'elasticsearch/extensions/test/cluster'
2
+
3
+ Elasticsearch::Extensions::Test::Cluster.stop(nodes:1)
@@ -0,0 +1,10 @@
1
+ require 'active_record'
2
+ require 'logger'
3
+
4
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ":memory:")
5
+ logger = ::Logger.new(STDERR)
6
+ logger.formatter = lambda { |s, d, p, m| "\e[2;36m#{m}\e[0m\n" }
7
+ ActiveRecord::Base.logger = logger unless ENV['QUIET']
8
+
9
+ ActiveRecord::LogSubscriber.colorize_logging = false
10
+ ActiveRecord::Migration.verbose = false
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
1
4
  RSpec.configure do |config|
2
5
  config.expect_with :rspec do |expectations|
3
6
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
@@ -13,23 +16,28 @@ RSpec.configure do |config|
13
16
 
14
17
  Kernel.srand config.seed
15
18
 
16
- config.before(:all) do
17
- require 'active_record'
18
- require 'logger'
19
- require 'elasticsearch/model'
19
+ config.before :all do
20
+ load 'setup/elasticsearch/start.rb'
21
+ load 'setup/elasticsearch/model.rb'
22
+ end
20
23
 
21
- ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ":memory:")
22
- logger = ::Logger.new(STDERR)
23
- logger.formatter = lambda { |s, d, p, m| "\e[2;36m#{m}\e[0m\n" }
24
- ActiveRecord::Base.logger = logger unless ENV['QUIET']
24
+ config.after :all do
25
+ load 'setup/elasticsearch/stop.rb'
26
+ end
25
27
 
26
- ActiveRecord::LogSubscriber.colorize_logging = false
27
- ActiveRecord::Migration.verbose = false
28
+ config.before :suite do
29
+ require 'setup/sqlite.rb'
28
30
 
29
- tracer = ::Logger.new(STDERR)
30
- tracer.formatter = lambda { |s, d, p, m| "#{m.gsub(/^.*$/) { |n| ' ' + n }}\n" }
31
+ require 'database_cleaner'
32
+
33
+ # https://github.com/DatabaseCleaner/database_cleaner#additional-activerecord-options-for-truncation
34
+ DatabaseCleaner.clean_with :deletion, cache_tables: false
35
+ DatabaseCleaner.strategy = :deletion
36
+ end
31
37
 
32
- Elasticsearch::Model.client = Elasticsearch::Client.new host: "localhost:#{(ENV['TEST_CLUSTER_PORT'] || 9250)}",
33
- tracer: (ENV['QUIET'] ? nil : tracer)
38
+ config.around(:each) do |example|
39
+ DatabaseCleaner.cleaning do
40
+ example.run
41
+ end
34
42
  end
35
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch-model-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke KUOKA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-21 00:00:00.000000000 Z
11
+ date: 2014-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -47,6 +47,8 @@ extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
49
  - ".gitignore"
50
+ - ".rspec"
51
+ - ".travis.yml"
50
52
  - Gemfile
51
53
  - LICENSE.txt
52
54
  - README.md
@@ -67,7 +69,15 @@ files:
67
69
  - lib/elasticsearch/model/extensions/shortest_path.rb
68
70
  - lib/elasticsearch/model/extensions/update_callback.rb
69
71
  - lib/elasticsearch/model/extensions/version.rb
72
+ - spec/example/articles_with_comments.rb
70
73
  - spec/integration_spec.rb
74
+ - spec/outer_document_updating_spec.rb
75
+ - spec/partial_updating_spec.rb
76
+ - spec/setup/articles_with_comments.rb
77
+ - spec/setup/elasticsearch/model.rb
78
+ - spec/setup/elasticsearch/start.rb
79
+ - spec/setup/elasticsearch/stop.rb
80
+ - spec/setup/sqlite.rb
71
81
  - spec/spec_helper.rb
72
82
  homepage: https://github.com/crowdworks/elasticsearch-model-extensions
73
83
  licenses:
@@ -96,5 +106,14 @@ summary: A set of extensions for elasticsearch-model which aims to ease the burd
96
106
  of things like re-indexing, verbose/complex mapping that you may face once you started
97
107
  using elasticsearch seriously.
98
108
  test_files:
109
+ - spec/example/articles_with_comments.rb
99
110
  - spec/integration_spec.rb
111
+ - spec/outer_document_updating_spec.rb
112
+ - spec/partial_updating_spec.rb
113
+ - spec/setup/articles_with_comments.rb
114
+ - spec/setup/elasticsearch/model.rb
115
+ - spec/setup/elasticsearch/start.rb
116
+ - spec/setup/elasticsearch/stop.rb
117
+ - spec/setup/sqlite.rb
100
118
  - spec/spec_helper.rb
119
+ has_rdoc: