lsolr 0.2.3 → 0.2.4
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/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: []
|