nazrin 2.5.0 → 2.6.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +15 -0
- data/lib/nazrin/document_client.rb +37 -0
- data/lib/nazrin/searchable.rb +25 -0
- data/lib/nazrin/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4ce63b4f44d461d41771edbfecbe562fb5a6ee1
|
4
|
+
data.tar.gz: fd395ff1f407073c9e1d459a894abd1dae15e000
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dd0eda86c2138afac23b2f0696398a630aed40d85cc0f64122d6bcc4d56b931239cc191087a18a788a0e3892734f660ccebbb379fbd1549a8d68b1d1e8af76a
|
7
|
+
data.tar.gz: fce06d4b56e903a0b13bafb19ee78152a020dd82c3ff1db2e900b742807f51612bf6a8134e38e73093ae6bbc2e8b7ecb3ff70a8716e074642a1ecee9fa786145
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## [2.6.0](https://github.com/tsuwatch/nazrin/compare/v2.5.0...v2.6.0)
|
2
|
+
|
3
|
+
### Features:
|
4
|
+
|
5
|
+
* Implement batch operation [#27](https://github.com/tsuwatch/nazrin/pull/27) - [@AMHOL](https://github.com/AMHOL)
|
6
|
+
|
1
7
|
## [2.5.0](https://github.com/tsuwatch/nazrin/compare/v2.4.0...v2.5.0)
|
2
8
|
|
3
9
|
### Features:
|
data/README.md
CHANGED
@@ -68,6 +68,7 @@ class Post < ActiveRecord::Base
|
|
68
68
|
end
|
69
69
|
```
|
70
70
|
|
71
|
+
### `.search`
|
71
72
|
```ruby
|
72
73
|
result = Post.search(where: :foo, includes: :bar).size(1).start(0).query("(and 'content')").query_parser('structured').execute
|
73
74
|
=> [#<Post id: 1, content: "content">]
|
@@ -76,6 +77,20 @@ result.facets
|
|
76
77
|
=> {}
|
77
78
|
```
|
78
79
|
|
80
|
+
### `.batch_operation`
|
81
|
+
```ruby
|
82
|
+
post1 = Post.create
|
83
|
+
post2 = Post.create
|
84
|
+
post3 = Post.create
|
85
|
+
post3.destroy
|
86
|
+
|
87
|
+
Post.batch_operation(
|
88
|
+
add: [post1, post2],
|
89
|
+
delete: [post3]
|
90
|
+
)
|
91
|
+
```
|
92
|
+
|
93
|
+
|
79
94
|
### Supported pagination libraries
|
80
95
|
If you want to use other supported pagination libraries, for example, `nazrin-kaminari` generates `Kaminari::PaginatableArray` instead of `Nazrin::PaginatedArray`.
|
81
96
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Nazrin
|
2
2
|
class DocumentClient
|
3
|
+
class InvalidBatchOperationError < StandardError; end
|
4
|
+
|
3
5
|
attr_reader :client
|
4
6
|
|
5
7
|
def initialize(config=Nazrin.config)
|
@@ -37,5 +39,40 @@ module Nazrin
|
|
37
39
|
].to_json,
|
38
40
|
content_type: 'application/json')
|
39
41
|
end
|
42
|
+
|
43
|
+
def batch(operations)
|
44
|
+
ActiveSupport::Deprecation.warn 'config.debug_mode is deprecated. Use config.mode = \'sandbox\' instead.' and return nil if Nazrin.config.debug_mode
|
45
|
+
return nil if Nazrin.config.mode == 'sandbox'
|
46
|
+
|
47
|
+
documents = operations.each_with_object([]) do |(type, tuple), arr|
|
48
|
+
case type.to_sym
|
49
|
+
when :add
|
50
|
+
tuple.each do |id, field_data|
|
51
|
+
arr.push(
|
52
|
+
type: 'add',
|
53
|
+
id: id,
|
54
|
+
fields: field_data
|
55
|
+
)
|
56
|
+
end
|
57
|
+
when :delete
|
58
|
+
tuple.each do |id|
|
59
|
+
arr.push(
|
60
|
+
type: 'delete',
|
61
|
+
id: id
|
62
|
+
)
|
63
|
+
end
|
64
|
+
else
|
65
|
+
raise(
|
66
|
+
InvalidBatchOperationError,
|
67
|
+
"`#{type}` is not a valid batch operation"
|
68
|
+
)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
client.upload_documents(
|
73
|
+
documents: documents.to_json,
|
74
|
+
content_type: 'application/json'
|
75
|
+
)
|
76
|
+
end
|
40
77
|
end
|
41
78
|
end
|
data/lib/nazrin/searchable.rb
CHANGED
@@ -2,6 +2,8 @@ require 'active_support/concern'
|
|
2
2
|
|
3
3
|
module Nazrin
|
4
4
|
module Searchable
|
5
|
+
class InvalidBatchOperationError < StandardError; end
|
6
|
+
|
5
7
|
extend ActiveSupport::Concern
|
6
8
|
|
7
9
|
included do
|
@@ -27,6 +29,7 @@ module Nazrin
|
|
27
29
|
class << base
|
28
30
|
alias_method :search, :nazrin_search unless method_defined? :search
|
29
31
|
alias_method :searchable, :nazrin_searchable unless method_defined? :searchable
|
32
|
+
alias_method :batch_operation, :nazrin_batch_operation unless method_defined? :batch_operation
|
30
33
|
alias_method :fields, :nazrin_fields unless method_defined? :fields
|
31
34
|
alias_method :field, :nazrin_field unless method_defined? :field
|
32
35
|
alias_method :searchable_configure, :nazrin_searchable_configure unless method_defined? :searchable_configure
|
@@ -47,6 +50,28 @@ module Nazrin
|
|
47
50
|
block.call
|
48
51
|
end
|
49
52
|
|
53
|
+
def nazrin_batch_operation(type_objects_mapping)
|
54
|
+
operations = type_objects_mapping.each_with_object({}) do |(type, objects), hash|
|
55
|
+
case type.to_sym
|
56
|
+
when :add
|
57
|
+
hash[:add] = objects.map do |obj|
|
58
|
+
[obj.send(:id), nazrin_eval_field_data(obj)]
|
59
|
+
end
|
60
|
+
when :delete
|
61
|
+
hash[:delete] = objects.map do |obj|
|
62
|
+
obj.send(:id)
|
63
|
+
end
|
64
|
+
else
|
65
|
+
raise(
|
66
|
+
InvalidBatchOperationError,
|
67
|
+
"`#{type}` is not a valid batch operation"
|
68
|
+
)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
nazrin_doc_client.batch(operations)
|
73
|
+
end
|
74
|
+
|
50
75
|
def nazrin_fields(fields)
|
51
76
|
field_data = class_variable_get(:@@nazrin_search_field_data)
|
52
77
|
fields.each do |field|
|
data/lib/nazrin/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nazrin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomohiro Suwa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|