lsolr 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lsolr.rb +26 -23
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b61a359f44587f3d0427b918647b04a7f43ce6a9ec9e394ae4ca09c68f59386
|
4
|
+
data.tar.gz: f4b20307a1239c0277d218670401a5187c85df9a0147aae90a1435fb13c68dbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40abee52d81c47d9a1ff70c86045d58f17869c43f2b8fc7cf054229ce50597b9a86a8a93a309e090c3ecf1d459676f2f9105ec409f24162a328c64c8cf9289b7
|
7
|
+
data.tar.gz: bb8d98b7c36eebc3425665d1d3c7661eed341e997aa8c09c2a1b99a9c3f78dd5fe50630e0183844c6446db14eb2bff0acfb33c7f0bd52d509ff75397200b6f09
|
data/lib/lsolr.rb
CHANGED
@@ -66,7 +66,6 @@ require 'date'
|
|
66
66
|
# #=> 'a:1 AND b:2'
|
67
67
|
class LSolr
|
68
68
|
ArgumentError = Class.new(::ArgumentError)
|
69
|
-
RangeError = Class.new(::RangeError)
|
70
69
|
TypeError = Class.new(::TypeError)
|
71
70
|
IncompleteQueryError = Class.new(StandardError)
|
72
71
|
|
@@ -84,13 +83,15 @@ class LSolr
|
|
84
83
|
PROXIMITY = '~'
|
85
84
|
BOOST = '^'
|
86
85
|
CONSTANT_SCORE = '^='
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
86
|
+
|
87
|
+
DELIMITER_SPACE = ' '
|
88
|
+
|
89
|
+
RANGE_FUZZY_MATCH_DISTANCE = (0.0..2.0).freeze
|
90
|
+
|
91
|
+
FORMAT_DATE_TIME = '%Y-%m-%dT%H:%M:%SZ'
|
91
92
|
FORMAT_MILLISECOND_FOR_DATE_TYPE = '%Q'
|
92
93
|
FORMAT_MILLISECOND_FOR_TIME_TYPE = '%L'
|
93
|
-
FORMAT_SECOND = '%s'
|
94
|
+
FORMAT_SECOND = '%s'
|
94
95
|
FORMAT_INSPECT = '#<%<class>s:%<object>#018x `%<query>s`>'
|
95
96
|
|
96
97
|
PARENTHESIS_LEFT = '('
|
@@ -114,7 +115,7 @@ class LSolr
|
|
114
115
|
case params
|
115
116
|
when Hash then params.map { |f, v| build_query(f, v) }.reduce { |a, e| a.and(e) }
|
116
117
|
when String then build_raw_query(params)
|
117
|
-
else raise TypeError, "Could not build solr query. Please specify a Hash or String value.
|
118
|
+
else raise TypeError, "Could not build solr query. Please specify a Hash or String value. `#{params}` given."
|
118
119
|
end
|
119
120
|
rescue TypeError => e
|
120
121
|
raise ArgumentError, "#{e.message} It is not a supported type."
|
@@ -130,14 +131,12 @@ class LSolr
|
|
130
131
|
when Array then build_array_query(field, value)
|
131
132
|
when Range then build_range_query(field, value)
|
132
133
|
when Enumerator then build_enumerator_query(field, value)
|
133
|
-
else raise TypeError, "Could not build solr query. field:
|
134
|
+
else raise TypeError, "Could not build solr query. field: `#{field}`, value: `#{value}` given."
|
134
135
|
end
|
135
136
|
end
|
136
137
|
|
137
138
|
def build_array_query(field, values)
|
138
|
-
|
139
|
-
|
140
|
-
new(field).match_in(values)
|
139
|
+
values.empty? ? new(field) : new(field).match_in(values)
|
141
140
|
end
|
142
141
|
|
143
142
|
def build_range_query(field, value)
|
@@ -220,7 +219,7 @@ class LSolr
|
|
220
219
|
#
|
221
220
|
# @raise [LSolr::ArgumentError] if specified field name is empty
|
222
221
|
def field(name)
|
223
|
-
raise ArgumentError, "The field name must be a not empty string value.
|
222
|
+
raise ArgumentError, "The field name must be a not empty string value. `#{name}` given." unless present_string?(name)
|
224
223
|
|
225
224
|
@field = name.to_s
|
226
225
|
self
|
@@ -234,7 +233,7 @@ class LSolr
|
|
234
233
|
#
|
235
234
|
# @raise [LSolr::ArgumentError] if specified raw query string is empty
|
236
235
|
def raw(query)
|
237
|
-
raise ArgumentError, "The raw query must be a not empty string value.
|
236
|
+
raise ArgumentError, "The raw query must be a not empty string value. `#{query}` given." unless present_string?(query)
|
238
237
|
|
239
238
|
@raw = query.to_s
|
240
239
|
self
|
@@ -273,7 +272,7 @@ class LSolr
|
|
273
272
|
#
|
274
273
|
# @raise [LSolr::ArgumentError] if specified boost factor is invalid
|
275
274
|
def boost(factor)
|
276
|
-
raise ArgumentError, "The boost factor must be a positive number.
|
275
|
+
raise ArgumentError, "The boost factor must be a positive number. `#{factor}` given." unless valid_boost_factor?(factor)
|
277
276
|
|
278
277
|
@boost = "#{BOOST}#{factor}"
|
279
278
|
self
|
@@ -289,7 +288,7 @@ class LSolr
|
|
289
288
|
#
|
290
289
|
# @raise [LSolr::ArgumentError] if specified score number is invalid
|
291
290
|
def constant_score(score)
|
292
|
-
raise ArgumentError, "The constant score must be a number.
|
291
|
+
raise ArgumentError, "The constant score must be a number. `#{score}` given." unless valid_score?(score)
|
293
292
|
|
294
293
|
@constant_score = "#{CONSTANT_SCORE}#{score}"
|
295
294
|
self
|
@@ -319,10 +318,10 @@ class LSolr
|
|
319
318
|
#
|
320
319
|
# @raise [LSolr::ArgumentError] if specified value is a empty array or not array
|
321
320
|
def match_in(values)
|
322
|
-
raise ArgumentError, "
|
321
|
+
raise ArgumentError, "`#{values}` given. It must be a not empty array." unless present_array?(values)
|
323
322
|
|
324
323
|
values = values.map { |v| clean(v) }
|
325
|
-
@value = "(#{values.join(
|
324
|
+
@value = "(#{values.join(DELIMITER_SPACE)})"
|
326
325
|
self
|
327
326
|
end
|
328
327
|
|
@@ -361,8 +360,8 @@ class LSolr
|
|
361
360
|
#
|
362
361
|
# @return [LSolr] self instance
|
363
362
|
def phrase_match(values, distance: 0)
|
364
|
-
value = values.map { |v| clean(v).split }.flatten.join(
|
365
|
-
proximity_match = distance > 0 ? "#{PROXIMITY}#{distance}" : ''
|
363
|
+
value = values.map { |v| clean(v).split }.flatten.join(DELIMITER_SPACE)
|
364
|
+
proximity_match = distance.to_s.to_i > 0 ? "#{PROXIMITY}#{distance}" : ''
|
366
365
|
@value = %("#{value}"#{proximity_match})
|
367
366
|
self
|
368
367
|
end
|
@@ -376,9 +375,9 @@ class LSolr
|
|
376
375
|
#
|
377
376
|
# @return [LSolr] self instance
|
378
377
|
#
|
379
|
-
# @raise [LSolr::
|
378
|
+
# @raise [LSolr::ArgumentError] if specified distance is out of range
|
380
379
|
def fuzzy_match(value, distance: 2.0)
|
381
|
-
raise
|
380
|
+
raise ArgumentError, "Out of #{RANGE_FUZZY_MATCH_DISTANCE}. `#{distance}` given." unless valid_fuzzy_match_distance?(distance)
|
382
381
|
@value = "#{clean(value).split.join}#{PROXIMITY}#{distance}"
|
383
382
|
self
|
384
383
|
end
|
@@ -500,6 +499,10 @@ class LSolr
|
|
500
499
|
v.is_a?(Float) || v.is_a?(Integer)
|
501
500
|
end
|
502
501
|
|
502
|
+
def valid_fuzzy_match_distance?(v)
|
503
|
+
(v.is_a?(Float) || v.is_a?(Integer)) && RANGE_FUZZY_MATCH_DISTANCE.member?(v)
|
504
|
+
end
|
505
|
+
|
503
506
|
def clean(value, symbols: RESERVED_SYMBOLS)
|
504
507
|
value.to_s
|
505
508
|
.tr(symbols.join, REPLACEMENT_CHAR)
|
@@ -518,12 +521,12 @@ class LSolr
|
|
518
521
|
msec_str = case date
|
519
522
|
when Date then date.strftime(FORMAT_MILLISECOND_FOR_DATE_TYPE).gsub(date.strftime(FORMAT_SECOND), '')
|
520
523
|
when Time then date.strftime(FORMAT_MILLISECOND_FOR_TIME_TYPE)
|
521
|
-
else raise TypeError, "Could not format dates or times.
|
524
|
+
else raise TypeError, "Could not format dates or times. `#{date}` given."
|
522
525
|
end
|
523
526
|
|
524
527
|
return date.strftime(FORMAT_DATE_TIME) if msec_str == '000'
|
525
528
|
|
526
|
-
"#{date.strftime('%Y-%m-%dT%H:%M:%S')}.#{msec_str}Z"
|
529
|
+
"#{date.strftime('%Y-%m-%dT%H:%M:%S')}.#{msec_str}Z"
|
527
530
|
end
|
528
531
|
|
529
532
|
def link(another, operator)
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lsolr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taishi Kasuga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: LSolr is a query builder
|
14
|
-
|
13
|
+
description: LSolr is a query builder for Apache Solr in Ruby. It supports only the
|
14
|
+
standard query.
|
15
15
|
email: supercaracal@yahoo.co.jp
|
16
16
|
executables: []
|
17
17
|
extensions: []
|
@@ -41,5 +41,5 @@ rubyforge_project:
|
|
41
41
|
rubygems_version: 2.7.4
|
42
42
|
signing_key:
|
43
43
|
specification_version: 4
|
44
|
-
summary: A query builder
|
44
|
+
summary: A query builder for Apache Solr in Ruby
|
45
45
|
test_files: []
|