elasticsearch-model-extensions 0.0.2 → 0.0.3

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: 230f4b0043c57c9df059dbf2e374a04f4d1c664d
4
- data.tar.gz: ed147cfd9c46fd23479c3c172669a30c9f4cb55d
3
+ metadata.gz: 187c414c19b2a65be386cf8c75eb4ee039440b2f
4
+ data.tar.gz: 18ef824732bed168ee717707eba28d5717418cde
5
5
  SHA512:
6
- metadata.gz: ccfbe7336e23b8b8ce8c50127181cbbe3c44cbd66ef165a7a58a777c23e84c84540ab17b54d755b3d65a2cc8b2896ce7efe0751672a11432c716664965d06dc6
7
- data.tar.gz: ff730a3b4d8de0ee4350f3fbb5d8fabc34dd8c77105d0f2182b1042e38d92e659a524392c6c2bb0b0cb2c1e280a8d892800db0ce55188afe1750118865e962c3
6
+ metadata.gz: 6c8f14d33a0eb2e91ac6c8aaaa3de81a598e3593fc016690c99ec74e21acde23bdf82d14626ce8829f3aa05361f2398a04e0fee068001a4a5b22537524c8c6bf
7
+ data.tar.gz: 69cc264beccef5a22492fe67597a843af325db385e56303739e4a09a51fc896f6a22b73a7799115b692370914a8d2bd1d660986ada30a8f3de7c1d2a8fdbce43
data/Gemfile CHANGED
@@ -2,3 +2,10 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in elasticsearch-model-extensions.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'rspec', '~> 3.1.0'
8
+ gem 'activerecord', '~> 3.2'
9
+ gem 'sqlite3'
10
+ gem 'elasticsearch-model'
11
+ end
@@ -0,0 +1,5 @@
1
+ require_relative 'index_operations'
2
+ require_relative 'batch_updating'
3
+ require_relative 'dependency_tracking'
4
+ require_relative 'outer_document_updating'
5
+ require_relative 'partial_updating'
@@ -4,13 +4,14 @@ module Elasticsearch
4
4
  class Configuration
5
5
  attr_reader :delayed
6
6
 
7
- def initialize(active_record_class, parent_class: parent_class, delayed:, if: -> r { true }, records_to_update_documents: 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)
8
8
  @delayed = @delayed
9
9
 
10
10
  @active_record_class = active_record_class
11
11
  @parent_class = parent_class
12
- @if = binding.local_variable_get(:if)
12
+ @if = binding.local_variable_get(:only_if)
13
13
  @records_to_update_documents = records_to_update_documents
14
+ @field_to_update = field_to_update
14
15
  end
15
16
 
16
17
  def to_hash
@@ -38,13 +39,15 @@ module Elasticsearch
38
39
  def build_hash
39
40
  child_class = @active_record_class
40
41
 
41
- path = child_class.path_from(@parent_class)
42
- parent_to_child_path = path.map(&:name)
42
+ field_to_update = -> {
43
+ path = child_class.path_from(@parent_class)
44
+ parent_to_child_path = path.map(&:name)
43
45
 
44
- # a has_a b has_a cという関係のとき、cが更新されたらaのフィールドbをupdateする必要がある。
45
- # そのとき、
46
- # 親aから子cへのパスが[:b, :c]だったら、bだけをupdateすればよいので
47
- field_to_update = parent_to_child_path.first
46
+ # a has_a b has_a cという関係のとき、cが更新されたらaのフィールドbをupdateする必要がある。
47
+ # そのとき、
48
+ # 親aから子cへのパスが[:b, :c]だったら、bだけをupdateすればよいので
49
+ parent_to_child_path.first
50
+ }.call || @field_to_update
48
51
 
49
52
  puts "#{child_class.name} updates #{@parent_class.name}'s #{field_to_update}"
50
53
 
@@ -104,20 +104,26 @@ module Elasticsearch
104
104
  first
105
105
  end
106
106
 
107
- def initialize_active_record!(active_record_class, parent_class: parent_class, delayed:, if: -> r { true }, records_to_update_documents: nil)
108
- config = Elasticsearch::Model::Extensions::Configuration.new(active_record_class, parent_class: parent_class, delayed: delayed, if: binding.local_variable_get(:if), records_to_update_documents: records_to_update_documents)
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)
108
+ 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)
109
110
 
110
111
  active_record_class.after_commit Elasticsearch::Model::Extensions::UpdateCallback.new(config)
111
112
  active_record_class.after_commit Elasticsearch::Model::Extensions::DestroyCallback.new(config), on: :destroy
112
113
  end
113
114
 
114
- def partially_updates_document_of(parent_class, delayed:, if: -> r { true }, records_to_update_documents: nil)
115
+ def partially_updates_document_of(parent_class, options)
116
+ options ||= {}
117
+ delayed = options[:delayed] || nil
118
+ only_if = options[:if] || (-> r { true })
119
+ records_to_update_documents = options[:records_to_update_documents] || nil
120
+
115
121
  initialize_active_record!(
116
122
  self,
117
- parent_class: parent_class,
118
- delayed: delayed,
119
- if: binding.local_variable_get(:if),
120
- records_to_update_documents: records_to_update_documents
123
+ :parent_class => parent_class,
124
+ :delayed => delayed,
125
+ :only_if => only_if,
126
+ :records_to_update_documents => records_to_update_documents
121
127
  )
122
128
  end
123
129
 
@@ -1,7 +1,7 @@
1
1
  module Elasticsearch
2
2
  module Model
3
3
  module Extensions
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,46 @@
1
+ require 'elasticsearch/model/extensions/all'
2
+
3
+ RSpec.describe 'example' do
4
+ before :all do
5
+ ActiveRecord::Schema.define(:version => 1) do
6
+ create_table :articles do |t|
7
+ t.string :title
8
+ t.datetime :created_at, :default => 'NOW()'
9
+ end
10
+ end
11
+
12
+ class ::Article < ActiveRecord::Base
13
+ include Elasticsearch::Model
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
+
23
+ settings index: {number_of_shards: 1, number_of_replicas: 0} do
24
+ mapping do
25
+ indexes :title, type: 'string', analyzer: 'snowball'
26
+ indexes :created_at, type: 'date'
27
+ end
28
+ end
29
+ end
30
+
31
+ Article.delete_all
32
+ Article.__elasticsearch__.create_index! force: true
33
+
34
+ ::Article.create! title: 'Test'
35
+ ::Article.create! title: 'Testing Coding'
36
+ ::Article.create! title: 'Coding'
37
+
38
+ Article.__elasticsearch__.refresh_index!
39
+ end
40
+
41
+ subject {
42
+ ::Article.create(title: 'foo', created_at: Time.now)
43
+ }
44
+
45
+ it { is_expected.not_to be_nil }
46
+ end
@@ -0,0 +1,35 @@
1
+ RSpec.configure do |config|
2
+ config.expect_with :rspec do |expectations|
3
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
4
+ end
5
+
6
+ config.mock_with :rspec do |mocks|
7
+ mocks.verify_partial_doubles = true
8
+ end
9
+
10
+ config.profile_examples = 10
11
+
12
+ config.order = :random
13
+
14
+ Kernel.srand config.seed
15
+
16
+ config.before(:all) do
17
+ require 'active_record'
18
+ require 'logger'
19
+ require 'elasticsearch/model'
20
+
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']
25
+
26
+ ActiveRecord::LogSubscriber.colorize_logging = false
27
+ ActiveRecord::Migration.verbose = false
28
+
29
+ tracer = ::Logger.new(STDERR)
30
+ tracer.formatter = lambda { |s, d, p, m| "#{m.gsub(/^.*$/) { |n| ' ' + n }}\n" }
31
+
32
+ Elasticsearch::Model.client = Elasticsearch::Client.new host: "localhost:#{(ENV['TEST_CLUSTER_PORT'] || 9250)}",
33
+ tracer: (ENV['QUIET'] ? nil : tracer)
34
+ end
35
+ 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.2
4
+ version: 0.0.3
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-15 00:00:00.000000000 Z
11
+ date: 2014-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,6 +53,7 @@ files:
53
53
  - Rakefile
54
54
  - elasticsearch-model-extensions.gemspec
55
55
  - lib/elasticsearch/model/extensions.rb
56
+ - lib/elasticsearch/model/extensions/all.rb
56
57
  - lib/elasticsearch/model/extensions/batch_updating.rb
57
58
  - lib/elasticsearch/model/extensions/callback.rb
58
59
  - lib/elasticsearch/model/extensions/configuration.rb
@@ -66,6 +67,8 @@ files:
66
67
  - lib/elasticsearch/model/extensions/shortest_path.rb
67
68
  - lib/elasticsearch/model/extensions/update_callback.rb
68
69
  - lib/elasticsearch/model/extensions/version.rb
70
+ - spec/integration_spec.rb
71
+ - spec/spec_helper.rb
69
72
  homepage: https://github.com/crowdworks/elasticsearch-model-extensions
70
73
  licenses:
71
74
  - MIT
@@ -92,4 +95,6 @@ specification_version: 4
92
95
  summary: A set of extensions for elasticsearch-model which aims to ease the burden
93
96
  of things like re-indexing, verbose/complex mapping that you may face once you started
94
97
  using elasticsearch seriously.
95
- test_files: []
98
+ test_files:
99
+ - spec/integration_spec.rb
100
+ - spec/spec_helper.rb