eson-core 0.7.0 → 0.8.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.
- data/Rakefile +2 -2
- data/eson-core.gemspec +2 -1
- data/lib/eson-core.rb +5 -0
- data/lib/eson/api.rb +61 -12
- data/lib/eson/chainable.rb +3 -3
- data/lib/eson/client.rb +699 -180
- data/lib/eson/error.rb +10 -2
- data/lib/eson/request.rb +57 -16
- data/lib/eson/shared/cluster/health.rb +9 -2
- data/lib/eson/shared/cluster/nodes.rb +9 -1
- data/lib/eson/shared/cluster/shutdown.rb +9 -1
- data/lib/eson/shared/cluster/state.rb +9 -1
- data/lib/eson/shared/cluster/stats.rb +9 -1
- data/lib/eson/shared/core/bulk.rb +9 -1
- data/lib/eson/shared/core/count.rb +10 -1
- data/lib/eson/shared/core/delete.rb +10 -1
- data/lib/eson/shared/core/delete_by_query.rb +10 -1
- data/lib/eson/shared/core/explain.rb +44 -0
- data/lib/eson/shared/core/get.rb +9 -1
- data/lib/eson/shared/core/index.rb +13 -2
- data/lib/eson/shared/core/mget.rb +12 -3
- data/lib/eson/shared/core/more_like_this.rb +10 -1
- data/lib/eson/shared/core/msearch.rb +10 -1
- data/lib/eson/shared/core/percolate.rb +10 -1
- data/lib/eson/shared/core/scroll.rb +17 -0
- data/lib/eson/shared/core/search.rb +15 -3
- data/lib/eson/shared/core/simple_search.rb +9 -1
- data/lib/eson/shared/core/update.rb +33 -0
- data/lib/eson/shared/core/validate.rb +50 -0
- data/lib/eson/shared/indices/aliases.rb +37 -9
- data/lib/eson/shared/indices/analyze.rb +9 -2
- data/lib/eson/shared/indices/clear_cache.rb +9 -1
- data/lib/eson/shared/indices/close_index.rb +8 -1
- data/lib/eson/shared/indices/create_index.rb +10 -1
- data/lib/eson/shared/indices/delete_index.rb +8 -1
- data/lib/eson/shared/indices/delete_mapping.rb +9 -1
- data/lib/eson/shared/indices/delete_template.rb +8 -1
- data/lib/eson/shared/indices/exists.rb +8 -1
- data/lib/eson/shared/indices/flush.rb +9 -1
- data/lib/eson/shared/indices/get_aliases.rb +16 -0
- data/lib/eson/shared/indices/get_mapping.rb +9 -1
- data/lib/eson/shared/indices/get_settings.rb +8 -1
- data/lib/eson/shared/indices/get_template.rb +8 -1
- data/lib/eson/shared/indices/open_index.rb +8 -1
- data/lib/eson/shared/indices/optimize.rb +9 -1
- data/lib/eson/shared/indices/put_mapping.rb +10 -1
- data/lib/eson/shared/indices/put_template.rb +9 -1
- data/lib/eson/shared/indices/refresh.rb +9 -1
- data/lib/eson/shared/indices/segments.rb +8 -1
- data/lib/eson/shared/indices/snapshot.rb +8 -1
- data/lib/eson/shared/indices/stats.rb +9 -1
- data/lib/eson/shared/indices/status.rb +8 -1
- data/lib/eson/shared/indices/update_settings.rb +10 -1
- metadata +7 -8
data/lib/eson/error.rb
CHANGED
@@ -1,14 +1,22 @@
|
|
1
1
|
module Eson
|
2
|
+
# Special error class for errors happening in the Eson context. In contrast
|
3
|
+
# to StandardErrors, this error also holds the response associated with this
|
4
|
+
# Error.
|
2
5
|
class Error < StandardError
|
3
6
|
attr_accessor :response
|
4
7
|
|
8
|
+
#
|
9
|
+
# @param [String] msg The error message
|
10
|
+
# @param [Object] response The raw response object.
|
5
11
|
def initialize(msg, response)
|
6
|
-
super(
|
12
|
+
super(response.body)
|
7
13
|
|
8
14
|
self.response = response
|
9
15
|
end
|
10
16
|
end
|
11
|
-
|
17
|
+
|
18
|
+
# Error class that indicates a missing document.
|
12
19
|
NotFoundError = Class.new(Error)
|
20
|
+
# Error class that indicates a missing index.
|
13
21
|
IndexNotFoundError = Class.new(NotFoundError)
|
14
22
|
end
|
data/lib/eson/request.rb
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
module Eson
|
2
|
+
# A request is a generic object that implements parameter manipulation
|
3
|
+
# methods and Esons plugin API. It is always bound to a client.
|
4
|
+
#
|
5
|
+
# This class cannot be used directly but must be subclassed by protocol
|
6
|
+
# implementations. Proper implementations must respond to `#call`.
|
7
|
+
#
|
8
|
+
# @example constructing a request by hand
|
9
|
+
# r = protocol::Request.new(protocol::IndexExists, [ResponseParser], client)
|
2
10
|
class Request
|
3
11
|
attr_accessor :api, :client
|
4
12
|
|
5
13
|
attr_accessor :pretty, :source, :index, :indices, :case
|
6
14
|
|
15
|
+
|
7
16
|
def initialize(api, plugins, client)
|
8
17
|
self.api = api
|
9
18
|
self.client = client
|
@@ -16,11 +25,35 @@ module Eson
|
|
16
25
|
end
|
17
26
|
end
|
18
27
|
|
28
|
+
# This is a default implementation of `handle_block` that can be overriden
|
29
|
+
# by apis or plugins.
|
30
|
+
#
|
31
|
+
# @yield self
|
19
32
|
def handle_block
|
20
33
|
yield self
|
21
34
|
end
|
22
35
|
|
23
|
-
|
36
|
+
# This is an internal method that allows the client to set default
|
37
|
+
# parameters to requests without having to check for the presence of the
|
38
|
+
# method beforehand.
|
39
|
+
#
|
40
|
+
# @api internal
|
41
|
+
def set_parameters_without_exceptions(params)
|
42
|
+
params.each do |k,v|
|
43
|
+
begin
|
44
|
+
self.send("#{k}=", v)
|
45
|
+
rescue NoMethodError => e
|
46
|
+
#drop
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Mass assignment of parameters to a request. Invalid parameters will
|
52
|
+
# raise an exception.
|
53
|
+
#
|
54
|
+
# @param [Hash] params The parameters, keyed by name
|
55
|
+
# @raise [NoMethodError]
|
56
|
+
def parameters=(params)
|
24
57
|
params.each do |k,v|
|
25
58
|
begin
|
26
59
|
self.send("#{k}=", v)
|
@@ -30,6 +63,17 @@ module Eson
|
|
30
63
|
end
|
31
64
|
end
|
32
65
|
|
66
|
+
# Checks whether a Plugin works with a certain type of request. For example,
|
67
|
+
# Search plugins usually only work with Search requests. The decision is up
|
68
|
+
# to the plugin. If the plugin does not list a set of APIs that it works
|
69
|
+
# with, it will be considered compatible to all.
|
70
|
+
#
|
71
|
+
# @param [Eson::Api] api the api in question
|
72
|
+
# @param [Module] plugin the plugin module
|
73
|
+
# @param [Eson::Client] client the client to which the plugin should be added
|
74
|
+
#
|
75
|
+
# @return [true,false] Whether the plugin is compatible or not.
|
76
|
+
# @api internal
|
33
77
|
def pluggable?(api, plugin, client)
|
34
78
|
if plugin.respond_to? :plugin_for
|
35
79
|
plugin.plugin_for(client.protocol).include?(api)
|
@@ -64,8 +108,9 @@ module Eson
|
|
64
108
|
@source || source_from_params
|
65
109
|
end
|
66
110
|
|
67
|
-
#
|
68
|
-
|
111
|
+
# Extracts the source parameters from the parameter set.
|
112
|
+
#
|
113
|
+
# @return [String] the request source, as String
|
69
114
|
def source_from_params
|
70
115
|
return nil unless self.respond_to? :source_param
|
71
116
|
|
@@ -77,27 +122,23 @@ module Eson
|
|
77
122
|
return encode(obj)
|
78
123
|
end
|
79
124
|
else
|
80
|
-
|
125
|
+
obj = {}
|
126
|
+
source_param.each_with_object(obj) do |p, o|
|
81
127
|
if v = self.send(p)
|
82
|
-
[p
|
83
|
-
else
|
84
|
-
nil
|
128
|
+
o[p] = v
|
85
129
|
end
|
86
130
|
end
|
87
|
-
pairs.compact!
|
88
|
-
|
89
|
-
return nil if pairs.empty?
|
90
|
-
|
91
|
-
obj = {}
|
92
|
-
|
93
|
-
pairs.each do |p, v|
|
94
|
-
obj[p] = v
|
95
|
-
end
|
96
131
|
|
132
|
+
return nil if obj.empty?
|
97
133
|
return encode(obj)
|
98
134
|
end
|
99
135
|
end
|
100
136
|
|
137
|
+
# Encode any object. If it is an {Eson}-Object and responds to
|
138
|
+
# `to_query_hash`, this will be preferred. Otherwise, MultiJson is used.
|
139
|
+
#
|
140
|
+
# @param [Object] obj the object to encode
|
141
|
+
# @return [String] the object, encoded as JSON
|
101
142
|
def encode(obj)
|
102
143
|
if obj.respond_to? :to_query_hash
|
103
144
|
obj = obj.to_query_hash
|
@@ -1,16 +1,23 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Health#parameters}
|
6
|
+
# {include:Health#source_param}
|
7
|
+
# {include:Health#multi_index}
|
8
|
+
# {include:Health#multi_types}
|
3
9
|
module Health
|
4
10
|
extend API
|
5
11
|
|
12
|
+
# @!macro multi_index
|
6
13
|
multi_index true
|
7
|
-
|
14
|
+
|
15
|
+
# @!macro parameters
|
8
16
|
parameters :wait_for_status,
|
9
17
|
:level,
|
10
18
|
:wait_for_relocating_shards,
|
11
19
|
:wait_for_nodes,
|
12
20
|
:timeout
|
13
|
-
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
@@ -1,10 +1,18 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Nodes#parameters}
|
6
|
+
# {include:Nodes#source_param}
|
7
|
+
# {include:Nodes#multi_index}
|
8
|
+
# {include:Nodes#multi_types}
|
3
9
|
module Nodes
|
4
10
|
extend API
|
5
11
|
|
12
|
+
# @!macro no_multi_index
|
6
13
|
multi_index false
|
7
14
|
|
15
|
+
# @!macro parameters
|
8
16
|
parameters :nodes
|
9
17
|
|
10
18
|
def nodes
|
@@ -12,4 +20,4 @@ module Eson
|
|
12
20
|
end
|
13
21
|
end
|
14
22
|
end
|
15
|
-
end
|
23
|
+
end
|
@@ -1,11 +1,19 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Shutdown#parameters}
|
6
|
+
# {include:Shutdown#source_param}
|
7
|
+
# {include:Shutdown#multi_index}
|
8
|
+
# {include:Shutdown#multi_types}
|
3
9
|
module Shutdown
|
4
10
|
#TODO fully implement and test this
|
5
11
|
extend API
|
6
12
|
|
13
|
+
# @!macro no_multi_index
|
7
14
|
multi_index false
|
8
15
|
|
16
|
+
# @!macro parameters
|
9
17
|
parameters :nodes,
|
10
18
|
:delay,
|
11
19
|
:master,
|
@@ -17,4 +25,4 @@ module Eson
|
|
17
25
|
end
|
18
26
|
end
|
19
27
|
end
|
20
|
-
end
|
28
|
+
end
|
@@ -1,11 +1,19 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:State#parameters}
|
6
|
+
# {include:State#source_param}
|
7
|
+
# {include:State#multi_index}
|
8
|
+
# {include:State#multi_types}
|
3
9
|
module State
|
4
10
|
extend API
|
5
11
|
#TODO implement filter_indices correctly
|
6
12
|
|
13
|
+
# @!macro multi_index
|
7
14
|
multi_index true
|
8
15
|
|
16
|
+
# @!macro parameters
|
9
17
|
parameters :filter_nodes,
|
10
18
|
:filter_routing_table,
|
11
19
|
:filter_metadata,
|
@@ -14,4 +22,4 @@ module Eson
|
|
14
22
|
|
15
23
|
end
|
16
24
|
end
|
17
|
-
end
|
25
|
+
end
|
@@ -1,10 +1,18 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Stats#parameters}
|
6
|
+
# {include:Stats#source_param}
|
7
|
+
# {include:Stats#multi_index}
|
8
|
+
# {include:Stats#multi_types}
|
3
9
|
module Stats
|
4
10
|
extend API
|
5
11
|
|
12
|
+
# @!macro no_multi_index
|
6
13
|
multi_index false
|
7
14
|
|
15
|
+
# @!macro parameters
|
8
16
|
parameters :nodes
|
9
17
|
|
10
18
|
def nodes
|
@@ -12,4 +20,4 @@ module Eson
|
|
12
20
|
end
|
13
21
|
end
|
14
22
|
end
|
15
|
-
end
|
23
|
+
end
|
@@ -1,9 +1,17 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Bulk#parameters}
|
6
|
+
# {include:Bulk#source_param}
|
7
|
+
# {include:Bulk#multi_index}
|
8
|
+
# {include:Bulk#multi_types}
|
3
9
|
module Bulk
|
4
10
|
extend API
|
5
11
|
|
12
|
+
# @!macro source_param
|
6
13
|
source_param :bulk
|
14
|
+
# @!macro parameters
|
7
15
|
parameters :bulk
|
8
16
|
|
9
17
|
def bulk
|
@@ -23,4 +31,4 @@ module Eson
|
|
23
31
|
end
|
24
32
|
end
|
25
33
|
end
|
26
|
-
end
|
34
|
+
end
|
@@ -1,12 +1,20 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# @note {include:Count#parameters}
|
6
|
+
# @note {include:Count#source_param}
|
7
|
+
# @note {include:Count#multi_index}
|
8
|
+
# @note {include:Count#multi_types}
|
3
9
|
module Count
|
4
10
|
extend API
|
5
11
|
|
6
12
|
attr_accessor :type
|
7
13
|
|
14
|
+
# @!macro multi_index
|
8
15
|
multi_index true
|
9
16
|
|
17
|
+
# @!macro source_param
|
10
18
|
source_param :query,
|
11
19
|
:timeout,
|
12
20
|
:from,
|
@@ -23,6 +31,7 @@ module Eson
|
|
23
31
|
:version,
|
24
32
|
:min_score
|
25
33
|
|
34
|
+
# @!macro parameters
|
26
35
|
parameters :timeout,
|
27
36
|
:types,
|
28
37
|
:routing,
|
@@ -60,4 +69,4 @@ module Eson
|
|
60
69
|
|
61
70
|
end
|
62
71
|
end
|
63
|
-
end
|
72
|
+
end
|
@@ -1,12 +1,21 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Delete#parameters}
|
6
|
+
# {include:Delete#source_param}
|
7
|
+
# {include:Delete#multi_index}
|
8
|
+
# {include:Delete#multi_types}
|
3
9
|
module Delete
|
4
10
|
extend API
|
5
11
|
|
12
|
+
# @!macro no_multi_index
|
6
13
|
multi_index false
|
7
14
|
|
15
|
+
# @!macro source_param
|
8
16
|
source_param :item
|
9
17
|
|
18
|
+
# @!macro parameters
|
10
19
|
parameters(
|
11
20
|
:type,
|
12
21
|
:id,
|
@@ -23,4 +32,4 @@ module Eson
|
|
23
32
|
)
|
24
33
|
end
|
25
34
|
end
|
26
|
-
end
|
35
|
+
end
|
@@ -1,15 +1,24 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# @note {include:DeleteByQuery#parameters}
|
6
|
+
# @note {include:DeleteByQuery#source_param}
|
7
|
+
# @note {include:DeleteByQuery#multi_index}
|
8
|
+
# @note {include:DeleteByQuery#multi_types}
|
3
9
|
module DeleteByQuery
|
4
10
|
extend API
|
5
11
|
|
6
12
|
attr_accessor :type
|
7
13
|
|
14
|
+
# @!macro multi_index
|
8
15
|
multi_index true
|
9
16
|
|
17
|
+
# @!macro source_param
|
10
18
|
source_param :query
|
11
19
|
|
12
20
|
# TODO: check the parameter list
|
21
|
+
# @!macro parameters
|
13
22
|
parameters :timeout,
|
14
23
|
:types,
|
15
24
|
:routing,
|
@@ -47,4 +56,4 @@ module Eson
|
|
47
56
|
|
48
57
|
end
|
49
58
|
end
|
50
|
-
end
|
59
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Eson
|
2
|
+
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Explain#parameters}
|
6
|
+
# {include:Explain#source_param}
|
7
|
+
# {include:Explain#multi_index}
|
8
|
+
# {include:Explain#multi_types}
|
9
|
+
module Explain
|
10
|
+
extend API
|
11
|
+
|
12
|
+
# @!macro multi_index
|
13
|
+
multi_index false
|
14
|
+
|
15
|
+
# @!macro multi_types
|
16
|
+
multi_types false
|
17
|
+
|
18
|
+
|
19
|
+
# @!macro source_param
|
20
|
+
source_param :query,
|
21
|
+
:fields,
|
22
|
+
:facets,
|
23
|
+
:filter
|
24
|
+
|
25
|
+
# @!macro parameters
|
26
|
+
parameters :id,
|
27
|
+
:type,
|
28
|
+
:query,
|
29
|
+
:routing,
|
30
|
+
:parent,
|
31
|
+
:preference,
|
32
|
+
:q,
|
33
|
+
:df,
|
34
|
+
:analyzer,
|
35
|
+
:analyze_wildcard,
|
36
|
+
:lowercase_expanded_terms,
|
37
|
+
:lenient,
|
38
|
+
:default_operator,
|
39
|
+
:fields,
|
40
|
+
:facets,
|
41
|
+
:filter
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/eson/shared/core/get.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
module Eson
|
2
2
|
module Shared
|
3
|
+
# Requests using this API have the following properties:
|
4
|
+
#
|
5
|
+
# {include:Get#parameters}
|
6
|
+
# {include:Get#source_param}
|
7
|
+
# {include:Get#multi_index}
|
8
|
+
# {include:Get#multi_types}
|
3
9
|
module Get
|
4
10
|
extend API
|
5
11
|
|
12
|
+
# @!macro no_multi_index
|
6
13
|
multi_index false
|
7
14
|
|
15
|
+
# @!macro parameters
|
8
16
|
parameters(
|
9
17
|
:id,
|
10
18
|
:type,
|
@@ -16,4 +24,4 @@ module Eson
|
|
16
24
|
|
17
25
|
end
|
18
26
|
end
|
19
|
-
end
|
27
|
+
end
|