stretchy 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.ruby-version +1 -0
- data/lib/stretchy/boosts/base.rb +2 -3
- data/lib/stretchy/boosts/field_decay_boost.rb +23 -19
- data/lib/stretchy/boosts/filter_boost.rb +6 -3
- data/lib/stretchy/boosts/random_boost.rb +7 -4
- data/lib/stretchy/builders/boost_builder.rb +1 -1
- data/lib/stretchy/builders/filter_builder.rb +55 -0
- data/lib/stretchy/builders/match_builder.rb +41 -43
- data/lib/stretchy/builders/query_builder.rb +37 -0
- data/lib/stretchy/builders/shell_builder.rb +53 -0
- data/lib/stretchy/builders/where_builder.rb +88 -159
- data/lib/stretchy/builders.rb +3 -0
- data/lib/stretchy/clauses/base.rb +33 -78
- data/lib/stretchy/clauses/boost_clause.rb +10 -10
- data/lib/stretchy/clauses/boost_match_clause.rb +3 -3
- data/lib/stretchy/clauses/boost_where_clause.rb +5 -5
- data/lib/stretchy/clauses/match_clause.rb +5 -24
- data/lib/stretchy/clauses/where_clause.rb +23 -42
- data/lib/stretchy/errors/validation_error.rb +17 -0
- data/lib/stretchy/errors.rb +1 -1
- data/lib/stretchy/filters/and_filter.rb +5 -1
- data/lib/stretchy/filters/base.rb +2 -2
- data/lib/stretchy/filters/bool_filter.rb +10 -4
- data/lib/stretchy/filters/exists_filter.rb +5 -1
- data/lib/stretchy/filters/geo_filter.rb +13 -7
- data/lib/stretchy/filters/not_filter.rb +5 -2
- data/lib/stretchy/filters/or_filter.rb +4 -1
- data/lib/stretchy/filters/query_filter.rb +5 -1
- data/lib/stretchy/filters/range_filter.rb +10 -5
- data/lib/stretchy/filters/terms_filter.rb +8 -2
- data/lib/stretchy/queries/base.rb +2 -2
- data/lib/stretchy/queries/bool_query.rb +12 -0
- data/lib/stretchy/queries/filtered_query.rb +8 -3
- data/lib/stretchy/queries/function_score_query.rb +25 -32
- data/lib/stretchy/queries/match_query.rb +10 -3
- data/lib/stretchy/results/base.rb +9 -23
- data/lib/stretchy/types/base.rb +2 -2
- data/lib/stretchy/types/geo_point.rb +15 -6
- data/lib/stretchy/types/range.rb +24 -6
- data/lib/stretchy/utils/logger.rb +10 -5
- data/lib/stretchy/utils/validation.rb +77 -0
- data/lib/stretchy/utils.rb +1 -1
- data/lib/stretchy/version.rb +1 -1
- data/lib/stretchy.rb +3 -0
- data/lib/stretchy_validations.rb +10 -0
- data/lib/validation/rule/decay.rb +20 -0
- data/lib/validation/rule/distance.rb +20 -0
- data/lib/validation/rule/field.rb +22 -0
- data/lib/validation/rule/inclusion.rb +33 -0
- data/lib/validation/rule/latitude.rb +21 -0
- data/lib/validation/rule/longitude.rb +22 -0
- data/lib/validation/rule/one_of.rb +22 -0
- data/lib/validation/rule/required.rb +26 -0
- data/lib/validation/rule/responds_to.rb +23 -0
- data/lib/validation/rule/type.rb +41 -0
- data/stretchy.gemspec +2 -0
- metadata +48 -5
- data/lib/stretchy/errors/contract_error.rb +0 -5
- data/lib/stretchy/utils/contract.rb +0 -120
data/lib/stretchy/types/range.rb
CHANGED
@@ -2,12 +2,17 @@ module Stretchy
|
|
2
2
|
module Types
|
3
3
|
class Range < Base
|
4
4
|
|
5
|
-
|
5
|
+
attribute :min
|
6
|
+
attribute :max
|
7
|
+
attribute :exclusive_min
|
8
|
+
attribute :exclusive_max
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
validations do
|
11
|
+
rule :min, type: {classes: [Numeric, Date, Time] }
|
12
|
+
rule :max, type: {classes: [Numeric, Date, Time] }
|
13
|
+
rule :exclusive_min, inclusion: {in: [true, false]}
|
14
|
+
rule :exclusive_max, inclusion: {in: [true, false]}
|
15
|
+
end
|
11
16
|
|
12
17
|
def initialize(opts_or_range = {}, options = {})
|
13
18
|
|
@@ -17,20 +22,33 @@ module Stretchy
|
|
17
22
|
@max = opts_or_range.max
|
18
23
|
@exclusive_min = !!(options[:exclusive_min] || options[:exclusive])
|
19
24
|
@exclusive_max = !!(options[:exclusive_max] || options[:exclusive])
|
25
|
+
@inverse = !!options[:inverse]
|
26
|
+
@should = !!options[:should]
|
20
27
|
when ::Hash
|
21
28
|
opts = options.merge(opts_or_range)
|
22
29
|
@min = opts[:min]
|
23
30
|
@max = opts[:max]
|
24
31
|
@exclusive_min = !!(opts[:exclusive_min] || opts[:exclusive])
|
25
32
|
@exclusive_max = !!(opts[:exclusive_max] || opts[:exclusive])
|
33
|
+
@inverse = !!opts[:inverse]
|
34
|
+
@should = !!opts[:should]
|
35
|
+
when Range
|
36
|
+
@min = opts_or_range.min
|
37
|
+
@max = opts_or_range.max
|
38
|
+
@exclusive_min = opts_or_range.exclusive_min
|
39
|
+
@exclusive_max = opts_or_range.exclusive_max
|
26
40
|
else
|
27
41
|
raise Stretchy::Errors::ContractError.new("Ranges must be a range or a hash - found #{options.class.name}")
|
28
42
|
end
|
29
43
|
|
30
|
-
require_one
|
44
|
+
require_one! :min, :max
|
31
45
|
validate!
|
32
46
|
end
|
33
47
|
|
48
|
+
def empty?
|
49
|
+
!(@min || @max)
|
50
|
+
end
|
51
|
+
|
34
52
|
def to_search
|
35
53
|
json = {}
|
36
54
|
if @exclusive_min && @min
|
@@ -5,15 +5,19 @@ module Stretchy
|
|
5
5
|
module Utils
|
6
6
|
class Logger
|
7
7
|
|
8
|
-
include
|
8
|
+
include Validation
|
9
9
|
|
10
10
|
LEVELS = [:silence, :debug, :info, :warn, :error, :fatal]
|
11
11
|
|
12
|
-
|
12
|
+
attribute :base, Symbol
|
13
|
+
attribute :level, Symbol
|
14
|
+
attribute :color, String
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
validations do
|
17
|
+
rule :base, responds_to: {method: LEVELS.last}
|
18
|
+
rule :level, inclusion: {in: LEVELS}
|
19
|
+
rule :color, inclusion: {in: Colorize::COLORS.keys}
|
20
|
+
end
|
17
21
|
|
18
22
|
def self.log(msg_or_obj)
|
19
23
|
self.new.log(msg_or_obj)
|
@@ -25,6 +29,7 @@ module Stretchy
|
|
25
29
|
@color = color || :blue
|
26
30
|
|
27
31
|
@color = @color.to_s if @color.is_a?(Symbol)
|
32
|
+
|
28
33
|
validate!
|
29
34
|
end
|
30
35
|
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Stretchy
|
2
|
+
module Utils
|
3
|
+
module Validation
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.send(:include, Virtus.model)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(attributes = nil)
|
11
|
+
self.class.attribute_set.set(self, attributes) if attributes
|
12
|
+
set_default_attributes
|
13
|
+
validate!
|
14
|
+
after_initialize if respond_to?(:after_initialize)
|
15
|
+
end
|
16
|
+
|
17
|
+
def validator
|
18
|
+
@validator ||= self.class.validator.new(self)
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate!
|
22
|
+
raise Errors::ValidationError.new(errors) unless valid?
|
23
|
+
end
|
24
|
+
|
25
|
+
def require_one!(*attrs)
|
26
|
+
rule = ::Validation::Rule::Required.new
|
27
|
+
errors = {}
|
28
|
+
unless attrs.any? {|a| rule.valid_value?( send(a) ) }
|
29
|
+
raise Errors::ValidationError.new(
|
30
|
+
attrs.join(', ') => {
|
31
|
+
rule: :require_one_of
|
32
|
+
}
|
33
|
+
)
|
34
|
+
end
|
35
|
+
true
|
36
|
+
end
|
37
|
+
|
38
|
+
def require_only_one!(*attrs)
|
39
|
+
rule = ::Validation::Rule::Required.new
|
40
|
+
errors = {}
|
41
|
+
if attrs.select {|a| rule.valid_value?( send(a) ) }.count > 1
|
42
|
+
raise Errors::ValidationError.new(
|
43
|
+
attrs.join(', ') => {
|
44
|
+
rule: :require_only_one
|
45
|
+
}
|
46
|
+
)
|
47
|
+
end
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
def valid?
|
52
|
+
validator.valid?
|
53
|
+
end
|
54
|
+
|
55
|
+
def errors
|
56
|
+
validator.errors
|
57
|
+
end
|
58
|
+
|
59
|
+
module ClassMethods
|
60
|
+
|
61
|
+
def validations(&block)
|
62
|
+
@validator = Class.new(::Validation::Validator) do
|
63
|
+
include ::Validation
|
64
|
+
|
65
|
+
class_exec(&block)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def validator
|
70
|
+
@validator
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/stretchy/utils.rb
CHANGED
data/lib/stretchy/version.rb
CHANGED
data/lib/stretchy.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'validation/rule/not_empty'
|
2
|
+
require 'validation/rule/required'
|
3
|
+
require 'validation/rule/responds_to'
|
4
|
+
require 'validation/rule/decay'
|
5
|
+
require 'validation/rule/distance'
|
6
|
+
require 'validation/rule/field'
|
7
|
+
require 'validation/rule/inclusion'
|
8
|
+
require 'validation/rule/latitude'
|
9
|
+
require 'validation/rule/longitude'
|
10
|
+
require 'validation/rule/type'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Decay
|
4
|
+
DECAY_FUNCTIONS = [:gauss, :linear, :exp]
|
5
|
+
|
6
|
+
def error_key
|
7
|
+
:decay_function
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid_value?(value)
|
11
|
+
DECAY_FUNCTIONS.any?{|f| f == value || f.to_s == value }
|
12
|
+
end
|
13
|
+
|
14
|
+
def params
|
15
|
+
{}
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Distance
|
4
|
+
DISTANCE_FORMAT = /^(\d+)(km|mi)$/
|
5
|
+
|
6
|
+
def error_key
|
7
|
+
:distance_value
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid_value?(value)
|
11
|
+
!!(value.to_s =~ DISTANCE_FORMAT)
|
12
|
+
end
|
13
|
+
|
14
|
+
def params
|
15
|
+
{}
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Field
|
4
|
+
|
5
|
+
def error_key
|
6
|
+
:field
|
7
|
+
end
|
8
|
+
|
9
|
+
def valid_value?(value)
|
10
|
+
valid = true
|
11
|
+
valid = false unless value.is_a?(String) || value.is_a?(Symbol) || value.is_a?(Numeric)
|
12
|
+
valid = false if value.to_s.empty?
|
13
|
+
valid
|
14
|
+
end
|
15
|
+
|
16
|
+
def params
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Inclusion
|
4
|
+
|
5
|
+
def initialize(params = {})
|
6
|
+
@params = params
|
7
|
+
end
|
8
|
+
|
9
|
+
def error_key
|
10
|
+
:inclusion
|
11
|
+
end
|
12
|
+
|
13
|
+
def valid_value?(value)
|
14
|
+
return true if value.nil? && !params[:required]
|
15
|
+
within.any? do |allowed_value|
|
16
|
+
if value.respond_to?(:eql?)
|
17
|
+
value.eql?(allowed_value)
|
18
|
+
else
|
19
|
+
value == allowed_value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def within
|
25
|
+
@params[:in] || @params[:within]
|
26
|
+
end
|
27
|
+
|
28
|
+
def params
|
29
|
+
@params
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Latitude
|
4
|
+
|
5
|
+
def error_key
|
6
|
+
:latitude
|
7
|
+
end
|
8
|
+
|
9
|
+
def valid_value?(value)
|
10
|
+
valid = true
|
11
|
+
value = Float(value) rescue nil
|
12
|
+
valid = false unless value && value.to_f <= 90 && value.to_f >= -90
|
13
|
+
valid
|
14
|
+
end
|
15
|
+
|
16
|
+
def params
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Longitude
|
4
|
+
|
5
|
+
def error_key
|
6
|
+
:longitude
|
7
|
+
end
|
8
|
+
|
9
|
+
def valid_value?(value)
|
10
|
+
valid = true
|
11
|
+
value = Float(value) rescue nil
|
12
|
+
valid = false unless value && value <= 180 && value >= -180
|
13
|
+
valid
|
14
|
+
end
|
15
|
+
|
16
|
+
def params
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Required
|
4
|
+
|
5
|
+
def error_key
|
6
|
+
:required
|
7
|
+
end
|
8
|
+
|
9
|
+
def valid_value?(value)
|
10
|
+
case value
|
11
|
+
when nil
|
12
|
+
false
|
13
|
+
when String, Array, Hash
|
14
|
+
!value.empty?
|
15
|
+
else
|
16
|
+
true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def params
|
21
|
+
{}
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class RespondsTo
|
4
|
+
|
5
|
+
def initialize(params)
|
6
|
+
@params = params
|
7
|
+
end
|
8
|
+
|
9
|
+
def error_key
|
10
|
+
:responds_to
|
11
|
+
end
|
12
|
+
|
13
|
+
def valid_value?(value)
|
14
|
+
value.respond_to?(params[:method])
|
15
|
+
end
|
16
|
+
|
17
|
+
def params
|
18
|
+
@params
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Validation
|
2
|
+
module Rule
|
3
|
+
class Type
|
4
|
+
|
5
|
+
def initialize(params = {})
|
6
|
+
@params = params
|
7
|
+
end
|
8
|
+
|
9
|
+
def error_key
|
10
|
+
:type_rule
|
11
|
+
end
|
12
|
+
|
13
|
+
def valid_value?(value)
|
14
|
+
return true if value.nil? && !params[:required]
|
15
|
+
|
16
|
+
valid = true
|
17
|
+
if params[:array]
|
18
|
+
valid = false unless value.all? {|v| validate_type(v) }
|
19
|
+
else
|
20
|
+
valid = false unless validate_type(value)
|
21
|
+
end
|
22
|
+
valid
|
23
|
+
end
|
24
|
+
|
25
|
+
def validate_type(value)
|
26
|
+
valid = true
|
27
|
+
case params[:classes]
|
28
|
+
when Array
|
29
|
+
valid = false unless params[:classes].any? {|type| value.is_a?(type) }
|
30
|
+
else
|
31
|
+
valid = false unless value.is_a?(params[:classes])
|
32
|
+
end
|
33
|
+
valid
|
34
|
+
end
|
35
|
+
|
36
|
+
def params
|
37
|
+
@params
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/stretchy.gemspec
CHANGED
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency "elasticsearch", "~> 1.0"
|
23
23
|
spec.add_dependency "excon", "~> 0.45"
|
24
|
+
spec.add_dependency "valid"
|
25
|
+
spec.add_dependency "virtus"
|
24
26
|
|
25
27
|
spec.add_development_dependency "bundler", "~> 1.8"
|
26
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stretchy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- agius
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: elasticsearch
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.45'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: valid
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: virtus
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: bundler
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,6 +172,7 @@ extensions: []
|
|
144
172
|
extra_rdoc_files: []
|
145
173
|
files:
|
146
174
|
- ".gitignore"
|
175
|
+
- ".ruby-version"
|
147
176
|
- ".travis.yml"
|
148
177
|
- ".yardopts"
|
149
178
|
- Gemfile
|
@@ -159,7 +188,10 @@ files:
|
|
159
188
|
- lib/stretchy/boosts/random_boost.rb
|
160
189
|
- lib/stretchy/builders.rb
|
161
190
|
- lib/stretchy/builders/boost_builder.rb
|
191
|
+
- lib/stretchy/builders/filter_builder.rb
|
162
192
|
- lib/stretchy/builders/match_builder.rb
|
193
|
+
- lib/stretchy/builders/query_builder.rb
|
194
|
+
- lib/stretchy/builders/shell_builder.rb
|
163
195
|
- lib/stretchy/builders/where_builder.rb
|
164
196
|
- lib/stretchy/clauses.rb
|
165
197
|
- lib/stretchy/clauses/base.rb
|
@@ -169,7 +201,7 @@ files:
|
|
169
201
|
- lib/stretchy/clauses/match_clause.rb
|
170
202
|
- lib/stretchy/clauses/where_clause.rb
|
171
203
|
- lib/stretchy/errors.rb
|
172
|
-
- lib/stretchy/errors/
|
204
|
+
- lib/stretchy/errors/validation_error.rb
|
173
205
|
- lib/stretchy/filters.rb
|
174
206
|
- lib/stretchy/filters/and_filter.rb
|
175
207
|
- lib/stretchy/filters/base.rb
|
@@ -199,10 +231,21 @@ files:
|
|
199
231
|
- lib/stretchy/utils/client_actions.rb
|
200
232
|
- lib/stretchy/utils/colorize.rb
|
201
233
|
- lib/stretchy/utils/configuration.rb
|
202
|
-
- lib/stretchy/utils/contract.rb
|
203
234
|
- lib/stretchy/utils/dot_handler.rb
|
204
235
|
- lib/stretchy/utils/logger.rb
|
236
|
+
- lib/stretchy/utils/validation.rb
|
205
237
|
- lib/stretchy/version.rb
|
238
|
+
- lib/stretchy_validations.rb
|
239
|
+
- lib/validation/rule/decay.rb
|
240
|
+
- lib/validation/rule/distance.rb
|
241
|
+
- lib/validation/rule/field.rb
|
242
|
+
- lib/validation/rule/inclusion.rb
|
243
|
+
- lib/validation/rule/latitude.rb
|
244
|
+
- lib/validation/rule/longitude.rb
|
245
|
+
- lib/validation/rule/one_of.rb
|
246
|
+
- lib/validation/rule/required.rb
|
247
|
+
- lib/validation/rule/responds_to.rb
|
248
|
+
- lib/validation/rule/type.rb
|
206
249
|
- stretchy.gemspec
|
207
250
|
homepage: https://github.com/hired/stretchy
|
208
251
|
licenses:
|
@@ -224,7 +267,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
224
267
|
version: '0'
|
225
268
|
requirements: []
|
226
269
|
rubyforge_project:
|
227
|
-
rubygems_version: 2.
|
270
|
+
rubygems_version: 2.4.5
|
228
271
|
signing_key:
|
229
272
|
specification_version: 4
|
230
273
|
summary: Query builder for Elasticsearch
|