ebsco-eds 0.3.11.pre → 0.3.12.pre

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7931e60abeb2fed82632dccfe5b7b3937bf7e229
4
- data.tar.gz: d3fea8cf70ddb89b4586e63f3654ecd936995def
3
+ metadata.gz: d4f34a2f1413eab073c1b0b2f2509338af1a5c3e
4
+ data.tar.gz: deff1b5f31a7da1d4004b369b943bcb8942fb32e
5
5
  SHA512:
6
- metadata.gz: 58480532fdc34fccb7c107fe0186398241e27ade6383735faac8f066318ab421efc80ec414478d8f533f41d2f8d463d100ca38be697baca792583b68a55fff94
7
- data.tar.gz: de346b5df45bae11ee26916e339795a8b05ada807efdfac0eb32605c4b8cd07921fb4caf1684e5d017fc6c3d0aaa1cc48a0aceb7a356577e6f76ba373082e1a5
6
+ metadata.gz: 1f960b731df8741229d42f13809a6ded2cde56d717eab644603ee5d9cd31025b01aad317bb99b311014df38edf4fb281c29d2bc8b82c66cffd55da4d2d57dc11
7
+ data.tar.gz: 687cb32c89a654aecbe0a73d7ef9afa08047a29bb8149dd6a24ade108ab70df7ad2b89129687ee5a0465b442f903a55ac5e1d91a95aacba80754e09c76ed50d1
data/ebsco-eds.gemspec CHANGED
@@ -45,7 +45,7 @@ Gem::Specification.new do |spec|
45
45
  spec.add_dependency 'csl-styles', '~> 1.0', '>= 1.0.1.5'
46
46
  spec.add_dependency 'activesupport', '~> 5.0'
47
47
  spec.add_dependency 'net-http-persistent', '~> 2.9'
48
- spec.add_dependency 'sanitize', '~> 4.5.0'
48
+ spec.add_dependency 'sanitize', '~> 4.5', '>= 4.5.0'
49
49
 
50
50
  spec.add_development_dependency 'bundler', '~> 1.13'
51
51
  spec.add_development_dependency 'rake', '~> 12.0'
@@ -24,25 +24,6 @@ module EBSCO
24
24
  # end
25
25
  # end
26
26
 
27
- # blacklight year range slider input
28
- # "range"=>{"pub_year_tisim"=>{"begin"=>"1970", "end"=>"1980"}}
29
- if options.has_key?('range')
30
- if options['range'].has_key?('pub_year_tisim')
31
- begin_year = nil
32
- end_year = nil
33
- if options['range']['pub_year_tisim'].has_key?('begin')
34
- begin_year = options['range']['pub_year_tisim']['begin']
35
- end
36
- if options['range']['pub_year_tisim'].has_key?('end')
37
- end_year = options['range']['pub_year_tisim']['end']
38
- end
39
- unless begin_year.nil? or end_year.nil?
40
- pub_year_tisim_range = begin_year + '-01/' + end_year + '-01'
41
- @Actions.push "addlimiter(DT1:#{pub_year_tisim_range})"
42
- end
43
- end
44
- end
45
-
46
27
  # add page default of 1
47
28
  unless options.has_key?('page') || options.has_key?('page_number')
48
29
  options['page'] = 1
@@ -60,145 +41,6 @@ module EBSCO
60
41
  when 'page', 'page_number'
61
42
  @Actions.push "GoToPage(#{value.to_i})"
62
43
 
63
- # solr facet translation
64
- # "f"=>{"format"=>["eBooks"]}
65
- when 'f'
66
- if value.has_key?('eds_publication_type_facet')
67
- format_list = value['eds_publication_type_facet']
68
- format_list.each do |item|
69
- item = eds_sanitize item
70
- @Actions.push "addfacetfilter(SourceType:#{item})"
71
- end
72
- end
73
-
74
- if value.has_key?('eds_language_facet')
75
- lang_list = value['eds_language_facet']
76
- lang_list.each do |item|
77
- item = eds_sanitize item
78
- @Actions.push "addfacetfilter(Language:#{item})"
79
- end
80
- end
81
-
82
- if value.has_key?('eds_subject_topic_facet')
83
- subj_list = value['eds_subject_topic_facet']
84
- subj_list.each do |item|
85
- item = eds_sanitize item
86
- @Actions.push "addfacetfilter(SubjectEDS:#{item})"
87
- end
88
- end
89
-
90
- if value.has_key?('eds_subjects_geographic_facet')
91
- subj_list = value['eds_subjects_geographic_facet']
92
- subj_list.each do |item|
93
- item = eds_sanitize item
94
- @Actions.push "addfacetfilter(SubjectGeographic:#{item})"
95
- end
96
- end
97
-
98
- if value.has_key?('eds_publisher_facet')
99
- subj_list = value['eds_publisher_facet']
100
- subj_list.each do |item|
101
- item = eds_sanitize item
102
- @Actions.push "addfacetfilter(Publisher:#{item})"
103
- end
104
- end
105
-
106
- if value.has_key?('eds_journal_facet')
107
- subj_list = value['eds_journal_facet']
108
- subj_list.each do |item|
109
- item = eds_sanitize item
110
- @Actions.push "addfacetfilter(Journal:#{item})"
111
- end
112
- end
113
-
114
- if value.has_key?('eds_category_facet')
115
- subj_list = value['eds_category_facet']
116
- subj_list.each do |item|
117
- item = eds_sanitize item
118
- @Actions.push "addfacetfilter(Category:#{item})"
119
- end
120
- end
121
-
122
- if value.has_key?('eds_content_provider_facet')
123
- subj_list = value['eds_content_provider_facet']
124
- subj_list.each do |item|
125
- item = eds_sanitize item
126
- @Actions.push "addfacetfilter(ContentProvider:#{item})"
127
- end
128
- end
129
-
130
- if value.has_key?('eds_library_location_facet')
131
- subj_list = value['eds_library_location_facet']
132
- subj_list.each do |item|
133
- item = eds_sanitize item
134
- @Actions.push "addfacetfilter(LocationLibrary:#{item})"
135
- end
136
- end
137
-
138
- if value.has_key?('eds_library_collection_facet')
139
- subj_list = value['eds_library_collection_facet']
140
- subj_list.each do |item|
141
- item = eds_sanitize item
142
- @Actions.push "addfacetfilter(CollectionLibrary:#{item})"
143
- end
144
- end
145
-
146
- if value.has_key?('eds_author_university_facet')
147
- subj_list = value['eds_author_university_facet']
148
- subj_list.each do |item|
149
- item = eds_sanitize item
150
- @Actions.push "addfacetfilter(AuthorUniversity:#{item})"
151
- end
152
- end
153
-
154
- # translate solr search limiters into EDS API addLimiter calls
155
- # matches are determined by the limiter labels passed in by solr
156
- _search_limiter_list = []
157
- if value.has_key?('eds_search_limiters_facet')
158
- _search_limiter_list = value['eds_search_limiters_facet']
159
- end
160
- info.available_limiters.each do |limiter|
161
- # only handle 'select' limiters (ones with values of 'y' or 'n')
162
- if ( _search_limiter_list.include? limiter['Label'] or _search_limiter_list.include? limiter['Id']) and limiter['Type'] == 'select'
163
- @Actions.push "addLimiter(#{limiter['Id']}:y)"
164
- end
165
- end
166
-
167
- if value.has_key?('eds_publication_year_range_facet')
168
- _list = value['eds_publication_year_range_facet']
169
- _this_year = Date.today.year
170
- _this_month = Date.today.month
171
- _list.each do |item|
172
- if item == 'This year'
173
- _range = _this_year.to_s + '-01/' + _this_year.to_s + '-' + _this_month.to_s
174
- @Actions.push "addlimiter(DT1:#{_range})"
175
- end
176
- if item == 'Last 3 years'
177
- _range = (_this_year-3).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s
178
- @Actions.push "addlimiter(DT1:#{_range})"
179
- end
180
- if item == 'Last 10 years'
181
- _range = (_this_year-10).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s
182
- @Actions.push "addlimiter(DT1:#{_range})"
183
- end
184
- if item == 'Last 50 years'
185
- _range = (_this_year-50).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s
186
- @Actions.push "addlimiter(DT1:#{_range})"
187
- end
188
- if item == 'More than 50 years ago'
189
- _range = '0000-01/' + (_this_year-50).to_s + '-12'
190
- @Actions.push "addlimiter(DT1:#{_range})"
191
- end
192
- end
193
- end
194
-
195
- if value.has_key?('eds_publication_year_facet')
196
- year_list = value['eds_publication_year_facet']
197
- year_list.each do |item|
198
- @Actions.push "addfacetfilter(PublicationYear:#{item})"
199
- end
200
- end
201
-
202
44
  end
203
45
  end
204
46
 
@@ -334,13 +176,35 @@ module EBSCO
334
176
  _my_expanders = []
335
177
  _available_expander_ids = info.available_expander_ids
336
178
 
337
- @Limiter = nil
179
+ @Limiters = nil
338
180
  _my_limiters = []
339
181
 
182
+ @FacetFilters = []
183
+ _my_filters = {'FilterId' => 1, 'FacetValues' => []}
184
+
340
185
  @RelatedContent = info.default_related_content_types
341
186
  _my_related_content = []
342
187
  _available_related_content_types = info.available_related_content_types
343
188
 
189
+ # blacklight year range slider input
190
+ # "range"=>{"pub_year_tisim"=>{"begin"=>"1970", "end"=>"1980"}}
191
+ if options.has_key?('range')
192
+ if options['range'].has_key?('pub_year_tisim')
193
+ begin_year = nil
194
+ end_year = nil
195
+ if options['range']['pub_year_tisim'].has_key?('begin')
196
+ begin_year = options['range']['pub_year_tisim']['begin']
197
+ end
198
+ if options['range']['pub_year_tisim'].has_key?('end')
199
+ end_year = options['range']['pub_year_tisim']['end']
200
+ end
201
+ unless begin_year.nil? or end_year.nil?
202
+ pub_year_tisim_range = begin_year + '-01/' + end_year + '-01'
203
+ _my_limiters.push({:Id => 'DT1', :Values => [pub_year_tisim_range]})
204
+ end
205
+ end
206
+ end
207
+
344
208
  options.each do |key, value|
345
209
 
346
210
  case key
@@ -463,9 +327,152 @@ module EBSCO
463
327
  end
464
328
  @Expanders = _my_expanders
465
329
 
330
+ # ====================================================================================
331
+ # solr limiters & facets
332
+ # ====================================================================================
333
+
334
+ when 'f'
335
+ _search_limiter_list = []
336
+ if value.has_key?('eds_search_limiters_facet')
337
+ _search_limiter_list = value['eds_search_limiters_facet']
338
+ end
339
+ info.available_limiters.each do |limiter|
340
+ # only handle 'select' limiters (ones with values of 'y' or 'n')
341
+ if ( _search_limiter_list.include? limiter['Label'] or _search_limiter_list.include? limiter['Id']) and limiter['Type'] == 'select'
342
+ _my_limiters.push({:Id => limiter['Id'], :Values => ['y']})
343
+ end
344
+ end
345
+
346
+ # date limiters
347
+ if value.has_key?('eds_publication_year_range_facet')
348
+ _list = value['eds_publication_year_range_facet']
349
+ _this_year = Date.today.year
350
+ _this_month = Date.today.month
351
+ _list.each do |item|
352
+ if item == 'This year'
353
+ _range = _this_year.to_s + '-01/' + _this_year.to_s + '-' + _this_month.to_s
354
+ _my_limiters.push({:Id => 'DT1', :Values => [_range]})
355
+ end
356
+ if item == 'Last 3 years'
357
+ _range = (_this_year-3).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s
358
+ _my_limiters.push({:Id => 'DT1', :Values => [_range]})
359
+ end
360
+ if item == 'Last 10 years'
361
+ _range = (_this_year-10).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s
362
+ _my_limiters.push({:Id => 'DT1', :Values => [_range]})
363
+ end
364
+ if item == 'Last 50 years'
365
+ _range = (_this_year-50).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s
366
+ _my_limiters.push({:Id => 'DT1', :Values => [_range]})
367
+ end
368
+ if item == 'More than 50 years ago'
369
+ _range = '0000-01/' + (_this_year-50).to_s + '-12'
370
+ _my_limiters.push({:Id => 'DT1', :Values => [_range]})
371
+ end
372
+ end
373
+ end
374
+
375
+ # SourceType
376
+ if value.has_key?('eds_publication_type_facet')
377
+ f_list = value['eds_publication_type_facet']
378
+ f_list.each do |item|
379
+ item = eds_sanitize item
380
+ _my_filters['FacetValues'].push({'Id' => 'SourceType', 'Value' => item})
381
+ end
382
+ end
383
+ # Language
384
+ if value.has_key?('eds_language_facet')
385
+ lang_list = value['eds_language_facet']
386
+ lang_list.each do |item|
387
+ item = eds_sanitize item
388
+ _my_filters['FacetValues'].push({'Id' => 'Language', 'Value' => item})
389
+ end
390
+ end
391
+ # SubjectEDS
392
+ if value.has_key?('eds_subject_topic_facet')
393
+ subj_list = value['eds_subject_topic_facet']
394
+ subj_list.each do |item|
395
+ item = eds_sanitize item
396
+ _my_filters['FacetValues'].push({'Id' => 'SubjectEDS', 'Value' => item})
397
+ end
398
+ end
399
+ # SubjectGeographic
400
+ if value.has_key?('eds_subjects_geographic_facet')
401
+ subj_list = value['eds_subjects_geographic_facet']
402
+ subj_list.each do |item|
403
+ item = eds_sanitize item
404
+ _my_filters['FacetValues'].push({'Id' => 'SubjectGeographic', 'Value' => item})
405
+ end
406
+ end
407
+ # Publisher
408
+ if value.has_key?('eds_publisher_facet')
409
+ subj_list = value['eds_publisher_facet']
410
+ subj_list.each do |item|
411
+ item = eds_sanitize item
412
+ _my_filters['FacetValues'].push({'Id' => 'Publisher', 'Value' => item})
413
+ end
414
+ end
415
+ # Journal
416
+ if value.has_key?('eds_journal_facet')
417
+ subj_list = value['eds_journal_facet']
418
+ subj_list.each do |item|
419
+ item = eds_sanitize item
420
+ _my_filters['FacetValues'].push({'Id' => 'Journal', 'Value' => item})
421
+ end
422
+ end
423
+ # Category
424
+ if value.has_key?('eds_category_facet')
425
+ subj_list = value['eds_category_facet']
426
+ subj_list.each do |item|
427
+ item = eds_sanitize item
428
+ _my_filters['FacetValues'].push({'Id' => 'Category', 'Value' => item})
429
+ end
430
+ end
431
+ # ContentProvider
432
+ if value.has_key?('eds_content_provider_facet')
433
+ subj_list = value['eds_content_provider_facet']
434
+ subj_list.each do |item|
435
+ item = eds_sanitize item
436
+ _my_filters['FacetValues'].push({'Id' => 'ContentProvider', 'Value' => item})
437
+ end
438
+ end
439
+ # LocationLibrary
440
+ if value.has_key?('eds_library_location_facet')
441
+ subj_list = value['eds_library_location_facet']
442
+ subj_list.each do |item|
443
+ item = eds_sanitize item
444
+ _my_filters['FacetValues'].push({'Id' => 'LocationLibrary', 'Value' => item})
445
+ end
446
+ end
447
+ # CollectionLibrary
448
+ if value.has_key?('eds_library_collection_facet')
449
+ subj_list = value['eds_library_collection_facet']
450
+ subj_list.each do |item|
451
+ item = eds_sanitize item
452
+ _my_filters['FacetValues'].push({'Id' => 'CollectionLibrary', 'Value' => item})
453
+ end
454
+ end
455
+ # AuthorUniversity
456
+ if value.has_key?('eds_author_university_facet')
457
+ subj_list = value['eds_author_university_facet']
458
+ subj_list.each do |item|
459
+ item = eds_sanitize item
460
+ _my_filters['FacetValues'].push({'Id' => 'AuthorUniversity', 'Value' => item})
461
+ end
462
+ end
463
+ # PublicationYear
464
+ if value.has_key?('eds_publication_year_facet')
465
+ year_list = value['eds_publication_year_facet']
466
+ year_list.each do |item|
467
+ _my_filters['FacetValues'].push({'Id' => 'PublicationYear', 'Value' => item})
468
+ end
469
+ end
470
+
471
+
466
472
  # ====================================================================================
467
473
  # limiters
468
474
  # ====================================================================================
475
+
469
476
  when :limiters
470
477
  value.each do |item|
471
478
  _key = item.split(':',2).first.upcase
@@ -520,9 +527,24 @@ module EBSCO
520
527
 
521
528
  end
522
529
 
530
+ end # end options parsing
531
+
532
+ # set solr facet filters, if any
533
+ if _my_filters['FacetValues'].length > 0
534
+ @FacetFilters = [_my_filters]
523
535
  end
524
536
 
537
+ # set solr limiters, if any
538
+ @Limiters = _my_limiters
539
+
540
+ end
541
+
542
+ def eds_sanitize(str)
543
+ pattern = /([)(:,])/
544
+ str = str.gsub(pattern){ |match| '\\' + match }
545
+ str
525
546
  end
547
+
526
548
  end
527
549
 
528
550
  class RetrievalCriteria
@@ -770,6 +770,67 @@ module EBSCO
770
770
  end
771
771
  end
772
772
 
773
+ def get_item_data(options)
774
+
775
+ if @items.empty?
776
+ nil
777
+ else
778
+
779
+ if options[:name] and options[:label] and options[:group]
780
+
781
+ @items.each do |item|
782
+ if item['Name'] == options[:name] && item['Label'] == options[:label] && item['Group'] == options[:group]
783
+ return sanitize_data(item['Data'])
784
+ end
785
+ end
786
+
787
+ elsif options[:name] and options[:label]
788
+
789
+ @items.each do |item|
790
+ if item['Name'] == options[:name] && item['Label'] == options[:label]
791
+ return sanitize_data(item['Data'])
792
+ end
793
+ end
794
+
795
+ elsif options[:name] and options[:group]
796
+
797
+ @items.each do |item|
798
+ if item['Name'] == options[:name] && item['Group'] == options[:group]
799
+ return sanitize_data(item['Data'])
800
+ end
801
+ end
802
+
803
+ elsif options[:label] and options[:group]
804
+
805
+ @items.each do |item|
806
+ if item['Label'] == options[:label] && item['Group'] == options[:group]
807
+ return sanitize_data(item['Data'])
808
+ end
809
+ end
810
+
811
+ elsif options[:label]
812
+
813
+ @items.each do |item|
814
+ if item['Label'] == options[:label]
815
+ return sanitize_data(item['Data'])
816
+ end
817
+ end
818
+
819
+ elsif options[:name]
820
+
821
+ @items.each do |item|
822
+ if item['Name'] == options[:name]
823
+ return sanitize_data(item['Data'])
824
+ end
825
+ end
826
+
827
+ else
828
+ nil
829
+ end
830
+
831
+ end
832
+ end
833
+
773
834
  # sanitize html, allow custom links
774
835
  def sanitize_data(data)
775
836
  html = CGI.unescapeHTML(data.to_s)
@@ -106,6 +106,7 @@ module EBSCO
106
106
  @auth_type = (ENV.has_key? 'EDS_AUTH') ? ENV['EDS_AUTH'] : @config[:auth]
107
107
  @org = (ENV.has_key? 'EDS_ORG') ? ENV['EDS_ORG'] : @config[:org]
108
108
  @cache_dir = (ENV.has_key? 'EDS_CACHE_DIR') ? ENV['EDS_CACHE_DIR'] : @config[:eds_cache_dir]
109
+ @log_level = (ENV.has_key? 'EDS_LOG_LEVEL') ? ENV['EDS_LOG_LEVEL'] : @config[:log_level]
109
110
 
110
111
  (ENV.has_key? 'EDS_GUEST') ?
111
112
  if %w(n N no No false False).include?(ENV['EDS_GUEST'])
@@ -230,9 +231,10 @@ module EBSCO
230
231
  # create temp format facet results if needed
231
232
  if options['f']
232
233
  if options['f'].key?('eds_publication_type_facet')
233
- format_options = options
234
+ format_options = options.dup
234
235
  format_options['f'] = options['f'].except('eds_publication_type_facet')
235
236
  format_search_options = EBSCO::EDS::Options.new(format_options, @info)
237
+ format_search_options.Comment = 'temp source type facets'
236
238
  _format_response = do_request(:post, path: '/edsapi/rest/Search', payload: format_search_options)
237
239
  @search_results.temp_format_facet_results = EBSCO::EDS::Results.new(_format_response, @info.available_limiters, format_options)
238
240
  end
@@ -241,9 +243,10 @@ module EBSCO
241
243
  # create temp content provider facet results if needed
242
244
  if options['f']
243
245
  if options['f'].key?('eds_content_provider_facet')
244
- content_options = options
246
+ content_options = options.dup
245
247
  content_options['f'] = options['f'].except('eds_content_provider_facet')
246
248
  content_search_options = EBSCO::EDS::Options.new(content_options, @info)
249
+ content_search_options.Comment = 'temp content provider facet'
247
250
  _content_response = do_request(:post, path: '/edsapi/rest/Search', payload: content_search_options)
248
251
  @search_results.temp_content_provider_facet_results = EBSCO::EDS::Results.new(_content_response, @info.available_limiters, content_options)
249
252
  end
@@ -928,7 +931,7 @@ module EBSCO
928
931
 
929
932
  def connection
930
933
  logger = Logger.new(@config[:log])
931
- logger.level = Logger.const_get(@config[:log_level])
934
+ logger.level = Logger.const_get(@log_level)
932
935
  Faraday.new(url: 'https://' + @api_hosts_list[@api_host_index]) do |conn|
933
936
  conn.headers['Content-Type'] = 'application/json;charset=UTF-8'
934
937
  conn.headers['Accept'] = 'application/json'
@@ -949,7 +952,7 @@ module EBSCO
949
952
  # same as above but no caching
950
953
  def jump_connection
951
954
  logger = Logger.new(@config[:log])
952
- logger.level = Logger.const_get(@config[:log_level])
955
+ logger.level = Logger.const_get(@log_level)
953
956
  Faraday.new(url: 'https://' + @api_hosts_list[@api_host_index]) do |conn|
954
957
  conn.headers['Content-Type'] = 'application/json;charset=UTF-8'
955
958
  conn.headers['Accept'] = 'application/json'
@@ -1,5 +1,5 @@
1
1
  module EBSCO
2
2
  module EDS
3
- VERSION = '0.3.11.pre'
3
+ VERSION = '0.3.12.pre'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ebsco-eds
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.11.pre
4
+ version: 0.3.12.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill McKinney
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-09-06 00:00:00.000000000 Z
12
+ date: 2017-09-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -230,6 +230,9 @@ dependencies:
230
230
  requirement: !ruby/object:Gem::Requirement
231
231
  requirements:
232
232
  - - "~>"
233
+ - !ruby/object:Gem::Version
234
+ version: '4.5'
235
+ - - ">="
233
236
  - !ruby/object:Gem::Version
234
237
  version: 4.5.0
235
238
  type: :runtime
@@ -237,6 +240,9 @@ dependencies:
237
240
  version_requirements: !ruby/object:Gem::Requirement
238
241
  requirements:
239
242
  - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: '4.5'
245
+ - - ">="
240
246
  - !ruby/object:Gem::Version
241
247
  version: 4.5.0
242
248
  - !ruby/object:Gem::Dependency