ebsco-eds 0.0.4.pre → 0.0.5.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 +4 -4
- data/.env.test +3 -3
- data/lib/ebsco/eds/record.rb +37 -17
- data/lib/ebsco/eds/results.rb +66 -48
- data/lib/ebsco/eds/session.rb +19 -3
- data/lib/ebsco/eds/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43e9ebad04e9e0aaa2b87f2e25d10e1cfad40934
|
4
|
+
data.tar.gz: 94e000ec7b6f2ccac3514dfa6fce6c567df90d76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: debbac1ad692666481d61fafe2c67fb667bd44f6c3f6de810720f96caea1da7569632193e20760a7abb151a9eb63baf2de7fe3ed168ffdf64816eea6c3fc7496
|
7
|
+
data.tar.gz: 8c30c14fee4443d7403985ccb9fa58c7e5c21c49666813c0836378439eeebb91ce4f655a028b8764f1a31a8230cab485cb1987f758a2d42d16d685af32503f5b
|
data/.env.test
CHANGED
data/lib/ebsco/eds/record.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'json'
|
3
3
|
require 'bibtex'
|
4
|
+
require 'cgi'
|
4
5
|
|
5
6
|
module EBSCO
|
6
7
|
|
@@ -35,9 +36,9 @@ module EBSCO
|
|
35
36
|
.fetch('BibRelationships', {})
|
36
37
|
|
37
38
|
@bib_part = @record.fetch('RecordInfo', {})
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
.fetch('BibRecord', {})
|
40
|
+
.fetch('BibRelationships', {})
|
41
|
+
.fetch('IsPartOfRelationships', {})[0]
|
41
42
|
|
42
43
|
@bibtex = BibTeX::Entry.new
|
43
44
|
end
|
@@ -77,31 +78,35 @@ module EBSCO
|
|
77
78
|
|
78
79
|
# The title.
|
79
80
|
def title
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
_retval = get_item_data_by_name('Title') || bib_title
|
82
|
+
# todo: make this configurable
|
83
|
+
if _retval.nil?
|
84
|
+
_retval = 'This title is unavailable for guests, please login to see more information.'
|
83
85
|
end
|
84
|
-
|
86
|
+
CGI.unescapeHTML(_retval)
|
85
87
|
end
|
86
88
|
|
87
89
|
# The source title (e.g., Journal)
|
88
90
|
def source_title
|
89
|
-
bib_source_title || get_item_data_by_name('TitleSource')
|
91
|
+
_retval = bib_source_title || get_item_data_by_name('TitleSource')
|
92
|
+
_retval.nil?? nil : CGI.unescapeHTML(_retval)
|
90
93
|
end
|
91
94
|
|
92
95
|
# Other alternative titles.
|
93
96
|
def other_titles
|
94
|
-
get_item_data_by_name('TitleAlt')
|
97
|
+
_retval = get_item_data_by_name('TitleAlt')
|
98
|
+
_retval.nil?? nil : CGI.unescapeHTML(_retval)
|
95
99
|
end
|
96
100
|
|
97
101
|
# The abstract
|
98
102
|
def abstract
|
99
|
-
get_item_data_by_name('Abstract')
|
103
|
+
_retval = get_item_data_by_name('Abstract')
|
104
|
+
_retval.nil?? nil : CGI.unescapeHTML(_retval)
|
100
105
|
end
|
101
106
|
|
102
107
|
# The list of authors
|
103
108
|
def authors
|
104
|
-
|
109
|
+
bib_authors || get_item_data_by_name('Author')
|
105
110
|
end
|
106
111
|
|
107
112
|
# The author affiliations
|
@@ -131,7 +136,8 @@ module EBSCO
|
|
131
136
|
|
132
137
|
# Notes
|
133
138
|
def notes
|
134
|
-
get_item_data_by_name('Note')
|
139
|
+
_retval = get_item_data_by_name('Note')
|
140
|
+
_retval.nil?? nil : CGI.unescapeHTML(_retval)
|
135
141
|
end
|
136
142
|
|
137
143
|
# Languages
|
@@ -241,12 +247,20 @@ module EBSCO
|
|
241
247
|
|
242
248
|
# Cover image - thumbnail size link
|
243
249
|
def cover_thumb_url
|
244
|
-
images('thumb').
|
250
|
+
if images('thumb').any?
|
251
|
+
images('thumb').first[:src]
|
252
|
+
else
|
253
|
+
nil
|
254
|
+
end
|
245
255
|
end
|
246
256
|
|
247
257
|
# Cover image - medium size link
|
248
258
|
def cover_medium_url
|
249
|
-
images('medium').
|
259
|
+
if images('medium').any?
|
260
|
+
images('medium').first[:src]
|
261
|
+
else
|
262
|
+
nil
|
263
|
+
end
|
250
264
|
end
|
251
265
|
|
252
266
|
# Word count for fulltext.
|
@@ -417,7 +431,7 @@ module EBSCO
|
|
417
431
|
|
418
432
|
links
|
419
433
|
end
|
420
|
-
|
434
|
+
|
421
435
|
#:nodoc: all
|
422
436
|
# No need to document methods below
|
423
437
|
|
@@ -768,7 +782,7 @@ module EBSCO
|
|
768
782
|
hash['id'] = database_id + '__' + safe_an
|
769
783
|
end
|
770
784
|
if !title.nil?
|
771
|
-
hash['title_display'] = title.gsub('
|
785
|
+
hash['title_display'] = title.gsub('<highlight>', '').gsub('</highlight>', '')
|
772
786
|
end
|
773
787
|
if publication_year
|
774
788
|
hash['pub_date'] = publication_year
|
@@ -792,6 +806,12 @@ module EBSCO
|
|
792
806
|
if abstract
|
793
807
|
hash['abstract'] = abstract
|
794
808
|
end
|
809
|
+
if cover_thumb_url
|
810
|
+
hash['cover_thumb_url'] = cover_thumb_url
|
811
|
+
end
|
812
|
+
if cover_medium_url
|
813
|
+
hash['cover_medium_url'] = cover_medium_url
|
814
|
+
end
|
795
815
|
hash
|
796
816
|
end
|
797
817
|
|
@@ -800,7 +820,7 @@ module EBSCO
|
|
800
820
|
{
|
801
821
|
'responseHeader' => {
|
802
822
|
'status' => 0
|
803
|
-
|
823
|
+
},
|
804
824
|
'response' => {
|
805
825
|
'numFound' => 1,
|
806
826
|
'start' => 0,
|
data/lib/ebsco/eds/results.rb
CHANGED
@@ -11,26 +11,28 @@ module EBSCO
|
|
11
11
|
# Raw results as Hash
|
12
12
|
attr_reader :results
|
13
13
|
# Array of EBSCO::EDS::Record results
|
14
|
-
|
14
|
+
attr_accessor :records
|
15
15
|
# Array of EBSCO::EDS::Record Research Starters
|
16
16
|
attr_reader :research_starters
|
17
17
|
# Array of EBSCO::EDS::Record Exact Publication Matches
|
18
18
|
attr_reader :publication_match
|
19
19
|
|
20
|
+
attr_accessor :stat_total_hits
|
21
|
+
|
20
22
|
# Lookup table of databases that have their labels suppressed in the response.
|
21
23
|
DBS = YAML::load_file(File.join(__dir__, 'settings.yml'))['databases']
|
22
24
|
|
23
25
|
# Creates search results from the \EDS API search response. It includes information about the results and a list
|
24
26
|
# of Record items.
|
25
27
|
def initialize(search_results, additional_limiters = {}, raw_options = {})
|
26
|
-
|
28
|
+
|
27
29
|
@results = search_results
|
28
30
|
@limiters = additional_limiters
|
29
31
|
@raw_options = raw_options
|
30
32
|
|
31
33
|
# convert all results to a list of records
|
32
34
|
@records = []
|
33
|
-
if
|
35
|
+
if @results['SearchResult']['Data']['Records']
|
34
36
|
@results['SearchResult']['Data']['Records'].each { |record|
|
35
37
|
|
36
38
|
@records.push(EBSCO::EDS::Record.new(record))
|
@@ -48,7 +50,7 @@ module EBSCO
|
|
48
50
|
|
49
51
|
}
|
50
52
|
end
|
51
|
-
|
53
|
+
|
52
54
|
# create a special list of research starter records
|
53
55
|
@research_starters = []
|
54
56
|
_related_records = @results.fetch('SearchResult',{}).fetch('RelatedContent',{}).fetch('RelatedRecords',{})
|
@@ -64,7 +66,7 @@ module EBSCO
|
|
64
66
|
end
|
65
67
|
end
|
66
68
|
end
|
67
|
-
|
69
|
+
|
68
70
|
# create a special list of exact match publications
|
69
71
|
@publication_match = []
|
70
72
|
_related_publications = @results.fetch('SearchResult',{}).fetch('RelatedContent',{}).fetch('RelatedPublications',{})
|
@@ -80,7 +82,7 @@ module EBSCO
|
|
80
82
|
end
|
81
83
|
end
|
82
84
|
end
|
83
|
-
|
85
|
+
|
84
86
|
end
|
85
87
|
|
86
88
|
# returns solr search response format
|
@@ -90,55 +92,69 @@ module EBSCO
|
|
90
92
|
hl_hash = {}
|
91
93
|
solr_docs = []
|
92
94
|
|
93
|
-
if
|
95
|
+
if @records.any?
|
94
96
|
@records.each { |record|
|
95
97
|
|
96
98
|
# todo: add solr hl.tag.pre and hl.tag.post to retrieval criteria
|
97
|
-
if retrieval_criteria.fetch('Highlight',{}) == 'y'
|
98
|
-
hl_title = record.title.gsub('
|
99
|
+
if retrieval_criteria && retrieval_criteria.fetch('Highlight',{}) == 'y'
|
100
|
+
hl_title = record.title.gsub('<highlight>', '<em>').gsub('</highlight>', '</em>')
|
99
101
|
hl_hash.update({ record.database_id + '__' + record.accession_number => { 'title_display' => [hl_title]} })
|
100
102
|
#hl_hash.merge title_hl
|
101
103
|
end
|
102
|
-
|
103
104
|
solr_docs.push(record.to_hash)
|
104
105
|
}
|
105
106
|
end
|
106
107
|
|
108
|
+
status = 0
|
109
|
+
wt = 'ruby'
|
110
|
+
qtime = stat_total_time
|
111
|
+
qterms = search_terms.join(' ')
|
112
|
+
rows = results_per_page
|
113
|
+
num_found = stat_total_hits.to_i
|
114
|
+
search_limiters = solr_search_limiters
|
115
|
+
format = solr_facets('SourceType')
|
116
|
+
language_facet = solr_facets('Language')
|
117
|
+
subject_topic_facet = solr_facets('SubjectEDS')
|
118
|
+
publisher_facet = solr_facets('Publisher')
|
119
|
+
journal_facet = solr_facets('Journal')
|
120
|
+
geographic_facet = solr_facets('SubjectGeographic')
|
121
|
+
category_facet = solr_facets('Category')
|
122
|
+
content_provider_facet = solr_facets('ContentProvider')
|
123
|
+
library_location_facet = solr_facets('LocationLibrary')
|
124
|
+
facet = true
|
125
|
+
|
107
126
|
# solr response
|
108
127
|
{
|
109
128
|
'responseHeader' => {
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
'f.language_facet.facet.limit' => 11,
|
120
|
-
|
121
|
-
}
|
129
|
+
'status' => status,
|
130
|
+
'QTime' => qtime,
|
131
|
+
'params' => {
|
132
|
+
'q' => qterms,
|
133
|
+
'wt' => wt,
|
134
|
+
'start' => solr_start,
|
135
|
+
'rows' => rows,
|
136
|
+
'facet' => facet
|
137
|
+
}
|
122
138
|
},
|
123
139
|
'response' => {
|
124
|
-
|
125
|
-
|
126
|
-
|
140
|
+
'numFound' => num_found,
|
141
|
+
'start' => solr_start,
|
142
|
+
'docs' => solr_docs
|
127
143
|
},
|
128
144
|
'highlighting' => hl_hash,
|
129
145
|
'facet_counts' =>
|
130
146
|
{
|
131
147
|
'facet_fields' => {
|
132
|
-
'search_limiters' =>
|
133
|
-
'format' =>
|
134
|
-
'language_facet' =>
|
135
|
-
'subject_topic_facet' =>
|
136
|
-
'publisher_facet' =>
|
137
|
-
'journal_facet' =>
|
138
|
-
'geographic_facet' =>
|
139
|
-
'category_facet' =>
|
140
|
-
'content_provider_facet' =>
|
141
|
-
'library_location_facet' =>
|
148
|
+
'search_limiters' => search_limiters,
|
149
|
+
'format' => format,
|
150
|
+
'language_facet' => language_facet,
|
151
|
+
'subject_topic_facet' => subject_topic_facet,
|
152
|
+
'publisher_facet' => publisher_facet,
|
153
|
+
'journal_facet' => journal_facet,
|
154
|
+
'geographic_facet' => geographic_facet,
|
155
|
+
'category_facet' => category_facet,
|
156
|
+
'content_provider_facet' => content_provider_facet,
|
157
|
+
'library_location_facet' => library_location_facet
|
142
158
|
}
|
143
159
|
}
|
144
160
|
}
|
@@ -149,17 +165,19 @@ module EBSCO
|
|
149
165
|
def solr_search_limiters
|
150
166
|
search_limiters = []
|
151
167
|
if stat_total_hits.to_i > 0
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
168
|
+
if @limiters.any?
|
169
|
+
_ft_limiter = @limiters.find{|item| item['Id'] == 'FT'}
|
170
|
+
if _ft_limiter['DefaultOn'] == 'y'
|
171
|
+
search_limiters.push('Full Text').push('')
|
172
|
+
end
|
173
|
+
_rv_limiter = @limiters.find{|item| item['Id'] == 'RV'}
|
174
|
+
if _rv_limiter['DefaultOn'] == 'y'
|
175
|
+
search_limiters.push('Peer Reviewed').push('')
|
176
|
+
end
|
177
|
+
_ft1_limiter = @limiters.find{|item| item['Id'] == 'FT1'}
|
178
|
+
if _ft1_limiter['DefaultOn'] == 'y'
|
179
|
+
search_limiters.push('Available in Library Collection').push('')
|
180
|
+
end
|
163
181
|
end
|
164
182
|
end
|
165
183
|
search_limiters
|
@@ -209,7 +227,7 @@ module EBSCO
|
|
209
227
|
def retrieval_criteria
|
210
228
|
@results['SearchRequest']['RetrievalCriteria']
|
211
229
|
end
|
212
|
-
|
230
|
+
|
213
231
|
# Queries used to produce the results. Returns an array of query hashes.
|
214
232
|
# ==== Example
|
215
233
|
# [{"BooleanOperator"=>"AND", "Term"=>"volcano"}]
|
@@ -412,7 +430,7 @@ module EBSCO
|
|
412
430
|
end
|
413
431
|
terms
|
414
432
|
end
|
415
|
-
|
433
|
+
|
416
434
|
end
|
417
435
|
|
418
436
|
end
|
data/lib/ebsco/eds/session.rb
CHANGED
@@ -213,6 +213,22 @@ module EBSCO
|
|
213
213
|
EBSCO::EDS::Record.new(retrieve_response)
|
214
214
|
end
|
215
215
|
|
216
|
+
def solr_retrieve_list(list: [], highlight: nil, ebook: 'ebook-pdf')
|
217
|
+
records = []
|
218
|
+
if list.any?
|
219
|
+
list.each { |id|
|
220
|
+
dbid = id.split('__').first
|
221
|
+
accession = id.split('__').last
|
222
|
+
accession.gsub!(/_/, '.')
|
223
|
+
records.push retrieve(dbid: dbid, an: accession, highlight: highlight, ebook: ebook)
|
224
|
+
}
|
225
|
+
end
|
226
|
+
r = empty_results(records.length)
|
227
|
+
results = EBSCO::EDS::Results.new(r)
|
228
|
+
results.records = records
|
229
|
+
results.to_solr
|
230
|
+
end
|
231
|
+
|
216
232
|
# :category: Search & Retrieve Methods
|
217
233
|
# Invalidates the session token. End Session should be called when you know a user has logged out.
|
218
234
|
def end
|
@@ -648,7 +664,7 @@ module EBSCO
|
|
648
664
|
end
|
649
665
|
|
650
666
|
# used to reliably create empty results when there are no search terms provided
|
651
|
-
def empty_results
|
667
|
+
def empty_results(hits = 0)
|
652
668
|
{
|
653
669
|
'SearchRequest'=>
|
654
670
|
{
|
@@ -675,8 +691,8 @@ module EBSCO
|
|
675
691
|
{
|
676
692
|
'Statistics'=>
|
677
693
|
{
|
678
|
-
'TotalHits'=>
|
679
|
-
'TotalSearchTime'=>
|
694
|
+
'TotalHits'=>hits,
|
695
|
+
'TotalSearchTime'=>0,
|
680
696
|
'Databases'=>[]
|
681
697
|
},
|
682
698
|
'Data'=> {'RecordFormat'=>'EP Display'},
|
data/lib/ebsco/eds/version.rb
CHANGED
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.0.
|
4
|
+
version: 0.0.5.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-03-
|
12
|
+
date: 2017-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|