lsolr 0.2.0 → 0.2.1

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/lsolr.rb +46 -30
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20924e50e137b0ecacfbc21f0b12ac52db3904195c4b3cf42090cefe20cab911
4
- data.tar.gz: fbfe0c7c327d9205cab1a566db724ec8779f71b20df5a3a05364247978cc1e8f
3
+ metadata.gz: e10967d4b5a602672070691c144b7471cd2b085ae08737a457101333540d82e2
4
+ data.tar.gz: d58e9b7d1975f3d6b5d799bb26985974ab134f3edb4794354cbb52ba2f7625f2
5
5
  SHA512:
6
- metadata.gz: 62cf4176711e853c9468afb0d18c7d8bdec1c3122973caa26d7634696b71485c38feae5619cb81bc55f75d5f84801503a0a0e2611d706fcf69c9d49aa134a801
7
- data.tar.gz: 6dc375254e095659cbd5af6b5b4523419c5ea83cedfd96e6bac046d6610c6d170c9c4b166a47d4d1a9d49954447b02c0406ab278a7c6e0a39b25642d933b4852
6
+ metadata.gz: 722047aaeded40aeafeac2f614c8eb7f2add58a8a51963a3a7ef9d2f32a4c0a3643daf7f2f7f42283a041cec18d58cdf1e5b6d7a5c66d071bf9ac2a602d590ff
7
+ data.tar.gz: 2cc6913b18142b476cf1edc47fbf7dc8ce15dcc674c838ea07045c93cbc2b13d8dab7f37ec2c5277878f64620c5352fc6311d1010f0535e8c12b956af50c2e2f
@@ -62,7 +62,7 @@ require 'date'
62
62
  # #=> 'NOT (field:a* OR field:b* OR field:c*)'
63
63
  #
64
64
  # @example How to use. Part 5:
65
- # LSolr.build('a:1').and(LSolr.build(b: 2)).to_s
65
+ # LSolr.build('a:1').and(b: 2).to_s
66
66
  # #=> 'a:1 AND b:2'
67
67
  class LSolr
68
68
  ArgumentError = Class.new(::ArgumentError)
@@ -110,7 +110,7 @@ class LSolr
110
110
  def build(params)
111
111
  case params
112
112
  when Hash then params.map { |f, v| build_query(f, v) }.reduce { |a, e| a.and(e) }
113
- when String then new.raw(params)
113
+ when String then build_raw_query(params)
114
114
  else raise TypeError, "Could not build solr query. Please specify a Hash or String value. #{params.inspect} given."
115
115
  end
116
116
  end
@@ -148,6 +148,10 @@ class LSolr
148
148
  values.each { |v| last = v }
149
149
  new(field).greater_than_or_equal_to(values.first).less_than_or_equal_to(last)
150
150
  end
151
+
152
+ def build_raw_query(query)
153
+ query.empty? ? new : new.raw(query)
154
+ end
151
155
  end
152
156
 
153
157
  # Create a new query builder instance.
@@ -172,7 +176,7 @@ class LSolr
172
176
  def to_s
173
177
  raise IncompleteQueryError, 'Please specify a term of search.' if blank?
174
178
 
175
- decorate_term_expr_if_needed(build_term_expr)
179
+ decorate_linked_expressions_if_needed(build_expression)
176
180
  end
177
181
 
178
182
  alias to_str to_s
@@ -206,19 +210,19 @@ class LSolr
206
210
 
207
211
  # Sets a raw query.
208
212
  #
209
- # @param q [String] raw query
213
+ # @param query [String] a raw query string
210
214
  #
211
215
  # @return [LSolr] self instance
212
- def raw(q)
213
- raise ArgumentError, "The raw query must be a not empty string value. #{q.inspect} given." unless present_string?(q)
216
+ def raw(query)
217
+ raise ArgumentError, "The raw query must be a not empty string value. #{query.inspect} given." unless present_string?(query)
214
218
 
215
- @raw = q.to_s
219
+ @raw = query.to_s
216
220
  self
217
221
  end
218
222
 
219
223
  # Adds parentheses to query expression.
220
224
  #
221
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#grouping-terms-to-form-sub-queries Grouping Terms to Form Sub-Queries
225
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#grouping-terms-to-form-sub-queries Grouping Terms to Form Sub-Queries
222
226
  #
223
227
  # @return [LSolr] copied self instance
224
228
  def wrap
@@ -230,7 +234,7 @@ class LSolr
230
234
 
231
235
  # Adds the boolean operator `NOT` to query expression.
232
236
  #
233
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#the-boolean-operator-not The Boolean Operator NOT ("!")
237
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#the-boolean-operator-not The Boolean Operator NOT ("!")
234
238
  #
235
239
  # @return [LSolr] self instance
236
240
  def not
@@ -241,7 +245,7 @@ class LSolr
241
245
 
242
246
  # Boosts a query expression.
243
247
  #
244
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#boosting-a-term-with Boosting a Term with "^"
248
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#boosting-a-term-with Boosting a Term with "^"
245
249
  #
246
250
  # @param factor [Float] a boost factor number
247
251
  #
@@ -255,7 +259,7 @@ class LSolr
255
259
 
256
260
  # Specifies scoring result in expression.
257
261
  #
258
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#constant-score-with Constant Score with "^="
262
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#constant-score-with Constant Score with "^="
259
263
  #
260
264
  # @param score [Float] a constant score
261
265
  #
@@ -298,7 +302,7 @@ class LSolr
298
302
 
299
303
  # Builds a normal query expression with dates and times.
300
304
  #
301
- # @see https://lucene.apache.org/solr/guide/6_6/working-with-dates.html Working with Dates
305
+ # @see https://lucene.apache.org/solr/guide/7_2/working-with-dates.html Working with Dates
302
306
  #
303
307
  # @param value [String, Date, Time] a filter value
304
308
  #
@@ -311,7 +315,7 @@ class LSolr
311
315
 
312
316
  # Builds a prefix search query expression.
313
317
  #
314
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#wildcard-searches Wildcard Searches
318
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#wildcard-searches Wildcard Searches
315
319
  #
316
320
  # @param value [String] a search word
317
321
  #
@@ -323,8 +327,8 @@ class LSolr
323
327
 
324
328
  # Builds a phrase or proximity search query expression.
325
329
  #
326
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#grouping-clauses-within-a-field Grouping Clauses within a Field
327
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#proximity-searches Proximity Searches
330
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#grouping-clauses-within-a-field Grouping Clauses within a Field
331
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#proximity-searches Proximity Searches
328
332
  #
329
333
  # @param values [Array<String>] search words
330
334
  # @param distance [Integer] proximity distance
@@ -339,7 +343,7 @@ class LSolr
339
343
 
340
344
  # Builds a fuzzy search query expression.
341
345
  #
342
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#fuzzy-searches Fuzzy Searches
346
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#fuzzy-searches Fuzzy Searches
343
347
  #
344
348
  # @param value [String] a search word
345
349
  # @param distance [Float] a proximity distance
@@ -353,7 +357,7 @@ class LSolr
353
357
 
354
358
  # Builds a range search query expression.
355
359
  #
356
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
360
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#range-searches Range Searches
357
361
  #
358
362
  # @param value [String, Integer, Date, Time] a filter value
359
363
  #
@@ -365,7 +369,7 @@ class LSolr
365
369
 
366
370
  # Builds a range search query expression.
367
371
  #
368
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
372
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#range-searches Range Searches
369
373
  #
370
374
  # @param value [String, Integer, Date, Time] a filter value
371
375
  #
@@ -377,7 +381,7 @@ class LSolr
377
381
 
378
382
  # Builds a range search query expression.
379
383
  #
380
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
384
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#range-searches Range Searches
381
385
  #
382
386
  # @param value [String, Integer, Date, Time] a filter value
383
387
  #
@@ -389,7 +393,7 @@ class LSolr
389
393
 
390
394
  # Builds a range search query expression.
391
395
  #
392
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#range-searches Range Searches
396
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#range-searches Range Searches
393
397
  #
394
398
  # @param value [String, Integer, Date, Time] a filter value
395
399
  #
@@ -401,9 +405,9 @@ class LSolr
401
405
 
402
406
  # Builds a composite query expression.
403
407
  #
404
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#the-boolean-operator-and The Boolean Operator AND ("&&")
408
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#the-boolean-operator-and The Boolean Operator AND ("&&")
405
409
  #
406
- # @param another [LSolr] another query builder instance
410
+ # @param another [LSolr, Hash, String] another query builder instance or query params or raw query string
407
411
  #
408
412
  # @return [LSolr] copied another query builder instance
409
413
  def and(another)
@@ -412,9 +416,9 @@ class LSolr
412
416
 
413
417
  # Builds a composite query expression.
414
418
  #
415
- # @see https://lucene.apache.org/solr/guide/7_1/the-standard-query-parser.html#boolean-operators-supported-by-the-standard-query-parser Boolean Operators Supported by the Standard Query Parser
419
+ # @see https://lucene.apache.org/solr/guide/7_2/the-standard-query-parser.html#boolean-operators-supported-by-the-standard-query-parser Boolean Operators Supported by the Standard Query Parser
416
420
  #
417
- # @param another [LSolr] another query builder instance
421
+ # @param another [LSolr, Hash, String] another query builder instance or query params or raw query string
418
422
  #
419
423
  # @return [LSolr] copied another query builder instance
420
424
  def or(another)
@@ -425,7 +429,7 @@ class LSolr
425
429
  #
426
430
  # @return [LSolr] a first term of query.
427
431
  def head
428
- if !prev.nil? && prev.present?
432
+ if present_query?(prev)
429
433
  prev.head
430
434
  else
431
435
  self
@@ -435,7 +439,7 @@ class LSolr
435
439
  private
436
440
 
437
441
  def initialize_copy(obj)
438
- obj.prev = obj.prev.dup if !obj.prev.nil? && obj.prev.present?
442
+ obj.prev = obj.prev.dup if present_query?(obj.prev)
439
443
  obj.left_parentheses = obj.left_parentheses.dup
440
444
  obj.right_parentheses = obj.right_parentheses.dup
441
445
  end
@@ -456,6 +460,10 @@ class LSolr
456
460
  !v.nil? && v.is_a?(Array) && !v.compact.empty? && v.map(&:to_s).map(&:empty?).none?
457
461
  end
458
462
 
463
+ def present_query?(v)
464
+ !v.nil? && v.present?
465
+ end
466
+
459
467
  def valid_boost_factor?(v)
460
468
  (v.is_a?(Float) || v.is_a?(Integer)) && v > 0
461
469
  end
@@ -491,7 +499,8 @@ class LSolr
491
499
  end
492
500
 
493
501
  def link(another, operator)
494
- return self if another.nil? || another.blank?
502
+ another = build_instance_if_needed(another)
503
+ return self unless present_query?(another)
495
504
 
496
505
  another = another.dup
497
506
  head = another.head
@@ -500,7 +509,14 @@ class LSolr
500
509
  another
501
510
  end
502
511
 
503
- def build_term_expr
512
+ def build_instance_if_needed(another)
513
+ case another
514
+ when self.class then another
515
+ when Hash, String then self.class.build(another)
516
+ end
517
+ end
518
+
519
+ def build_expression
504
520
  if raw?
505
521
  @raw
506
522
  elsif range_search?
@@ -510,9 +526,9 @@ class LSolr
510
526
  end
511
527
  end
512
528
 
513
- def decorate_term_expr_if_needed(expr)
529
+ def decorate_linked_expressions_if_needed(expr)
514
530
  expr = "#{expr_not}#{left_parentheses.join}#{expr}#{right_parentheses.join}"
515
- expr = "#{prev} #{operator} #{expr}" if !prev.nil? && prev.present?
531
+ expr = "#{prev} #{operator} #{expr}" if present_query?(prev)
516
532
  scoring = present_string?(@constant_score) ? @constant_score : @boost
517
533
  "#{expr}#{scoring}"
518
534
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lsolr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taishi Kasuga