ebsco-eds 0.1.5.pre → 0.1.6.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/lib/ebsco/eds/record.rb +215 -402
- data/lib/ebsco/eds/results.rb +29 -25
- data/lib/ebsco/eds/version.rb +1 -1
- data/lib/faraday/eds_caching_middleware.rb +1 -0
- 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: 7b3dbb922292492bd576647444871ee036ab22f3
|
4
|
+
data.tar.gz: d3dd7ec0dfa262a0c0d57322c3f613c1ba88e9de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a3aaa3574121dc01e2f17b4ad9bf21bbdc153eb4de4f806a34e047efc712172634a7a2f69588c509f88e85db49cc556800026f22334c627affeb200ebd32661
|
7
|
+
data.tar.gz: f6df3932a249f65bfbc8b94a25eebd97eed5b5ab9bf1d0b575659d8b9126976ce0cbf2043dde2ab4a413da7099bea0cca1d8af5d649d1699c6549aa01e50ad87
|
data/lib/ebsco/eds/record.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'json'
|
3
|
-
require 'citeproc'
|
4
|
-
require 'csl/styles'
|
5
|
-
require 'bibtex'
|
6
3
|
require 'cgi'
|
7
4
|
|
8
5
|
module EBSCO
|
@@ -12,8 +9,64 @@ module EBSCO
|
|
12
9
|
# A single search result
|
13
10
|
class Record
|
14
11
|
|
12
|
+
ATTRIBUTES = [
|
13
|
+
:id,
|
14
|
+
:eds_accession_number,
|
15
|
+
:eds_database_id,
|
16
|
+
:eds_database_name,
|
17
|
+
:eds_access_level,
|
18
|
+
:eds_relevancy_score,
|
19
|
+
:eds_title,
|
20
|
+
:eds_source_title,
|
21
|
+
:eds_other_titles,
|
22
|
+
:eds_abstract,
|
23
|
+
:eds_authors,
|
24
|
+
:eds_author_affiliations,
|
25
|
+
:eds_subjects,
|
26
|
+
:eds_subjects_geographic,
|
27
|
+
:eds_subjects_person,
|
28
|
+
:eds_author_supplied_keywords,
|
29
|
+
:eds_notes,
|
30
|
+
:eds_languages,
|
31
|
+
:eds_page_count,
|
32
|
+
:eds_page_start,
|
33
|
+
:eds_physical_description,
|
34
|
+
:eds_publication_type,
|
35
|
+
:eds_publication_type_id,
|
36
|
+
:eds_publication_date,
|
37
|
+
:eds_publication_year,
|
38
|
+
:eds_publication_info,
|
39
|
+
:eds_document_type,
|
40
|
+
:eds_document_doi,
|
41
|
+
:eds_document_oclc,
|
42
|
+
:eds_issn_print,
|
43
|
+
:eds_issns,
|
44
|
+
:eds_isbn_print,
|
45
|
+
:eds_isbn_electronic,
|
46
|
+
:eds_isbns_related,
|
47
|
+
:eds_isbns,
|
48
|
+
:eds_series,
|
49
|
+
:eds_volume,
|
50
|
+
:eds_issue,
|
51
|
+
:eds_covers,
|
52
|
+
:eds_cover_thumb_url,
|
53
|
+
:eds_cover_medium_url,
|
54
|
+
:eds_fulltext_word_count,
|
55
|
+
:eds_result_id,
|
56
|
+
:eds_plink,
|
57
|
+
:eds_html_fulltext,
|
58
|
+
:eds_images,
|
59
|
+
:eds_all_links,
|
60
|
+
:eds_fulltext_links,
|
61
|
+
:eds_non_fulltext_links
|
62
|
+
]
|
63
|
+
|
15
64
|
# Raw record as returned by the \EDS API via search or retrieve
|
16
|
-
|
65
|
+
attr_accessor(*ATTRIBUTES)
|
66
|
+
|
67
|
+
def attributes
|
68
|
+
ATTRIBUTES.map{|attribute| self.send(attribute) }
|
69
|
+
end
|
17
70
|
|
18
71
|
# Creates a search or retrieval result record
|
19
72
|
def initialize(results_record)
|
@@ -26,22 +79,74 @@ module EBSCO
|
|
26
79
|
|
27
80
|
@items = @record.fetch('Items', {})
|
28
81
|
|
29
|
-
@bib_entity = @record.fetch('RecordInfo', {})
|
30
|
-
.fetch('BibRecord', {})
|
31
|
-
.fetch('BibEntity', {})
|
82
|
+
@bib_entity = @record.fetch('RecordInfo', {}).fetch('BibRecord', {}).fetch('BibEntity', {})
|
32
83
|
|
33
|
-
@bib_relationships = @record.fetch('RecordInfo', {})
|
34
|
-
.fetch('BibRecord', {})
|
35
|
-
.fetch('BibRelationships', {})
|
84
|
+
@bib_relationships = @record.fetch('RecordInfo', {}).fetch('BibRecord', {}).fetch('BibRelationships', {})
|
36
85
|
|
37
86
|
@bib_part = @record.fetch('RecordInfo', {})
|
38
87
|
.fetch('BibRecord', {})
|
39
88
|
.fetch('BibRelationships', {})
|
40
89
|
.fetch('IsPartOfRelationships', {})[0]
|
41
90
|
|
42
|
-
|
91
|
+
# accessors:
|
92
|
+
@eds_accession_number = @record['Header']['An'].to_s
|
93
|
+
@eds_database_id = @record['Header']['DbId'].to_s
|
94
|
+
@eds_database_name = @record['Header']['DbLabel']
|
95
|
+
@eds_access_level = @record['Header']['AccessLevel']
|
96
|
+
@eds_relevancy_score = @record['Header']['RelevancyScore']
|
97
|
+
@eds_title = title
|
98
|
+
@eds_source_title = source_title
|
99
|
+
@eds_other_titles = other_titles
|
100
|
+
@eds_abstract = abstract
|
101
|
+
@eds_authors = bib_authors || get_item_data_by_name('Author')
|
102
|
+
@eds_author_affiliations = get_item_data_by_name('AffiliationAuthor')
|
103
|
+
@eds_subjects = bib_subjects || get_item_data_by_name('Subject')
|
104
|
+
@eds_subjects_geographic = get_item_data_by_name('SubjectGeographic')
|
105
|
+
@eds_subjects_person = get_item_data_by_name('SubjectPerson')
|
106
|
+
@eds_author_supplied_keywords = get_item_data_by_label('Author-Supplied Keywords')
|
107
|
+
@eds_notes = notes
|
108
|
+
@eds_languages = get_item_data_by_name('Language') || bib_languages
|
109
|
+
@eds_page_count = bib_page_count
|
110
|
+
@eds_page_start = bib_page_start
|
111
|
+
@eds_physical_description = get_item_data_by_name('PhysDesc')
|
112
|
+
@eds_publication_type = @record['Header']['PubType'] || get_item_data_by_name('TypePub')
|
113
|
+
@eds_publication_type_id = @record['Header']['PubTypeId']
|
114
|
+
@eds_publication_date = bib_publication_date || get_item_data_by_name('DatePub')
|
115
|
+
@eds_publication_year = bib_publication_year || get_item_data_by_name('DatePub')
|
116
|
+
@eds_publisher_info = get_item_data_by_label('Publication Information')
|
117
|
+
@eds_document_type = get_item_data_by_name('TypeDocument')
|
118
|
+
@eds_document_doi = get_item_data_by_name('DOI') || bib_doi
|
119
|
+
@eds_document_oclc = get_item_data_by_label('OCLC')
|
120
|
+
@eds_issn_print = get_item_data_by_name('ISSN') || bib_issn_print
|
121
|
+
@eds_issns = bib_issns
|
122
|
+
@eds_isbn_print = bib_isbn_print
|
123
|
+
@eds_isbns_related = item_related_isbns
|
124
|
+
@eds_isbn_electronic = bib_isbn_electronic
|
125
|
+
@eds_isbns = bib_isbns || item_related_isbns
|
126
|
+
@eds_series = get_item_data_by_name('SeriesInfo')
|
127
|
+
@eds_volume = bib_volume
|
128
|
+
@eds_issue = bib_issue
|
129
|
+
@eds_covers = images
|
130
|
+
@eds_cover_thumb_url = cover_thumb_url
|
131
|
+
@eds_cover_medium_url = cover_medium_url
|
132
|
+
@eds_fulltext_word_count = get_item_data_by_name('FullTextWordCount').to_i
|
133
|
+
@eds_result_id = @record['ResultId']
|
134
|
+
@eds_plink = @record['PLink']
|
135
|
+
@eds_html_fulltext = html_fulltext
|
136
|
+
@eds_images = images
|
137
|
+
@eds_all_links = all_links
|
138
|
+
@eds_fulltext_links = fulltext_links
|
139
|
+
@eds_non_fulltext_links = non_fulltext_links
|
140
|
+
@id = @eds_database_id + '__' + @eds_accession_number.gsub(/\./,'_')
|
141
|
+
|
43
142
|
end
|
44
143
|
|
144
|
+
# --
|
145
|
+
# ====================================================================================
|
146
|
+
# MISC HELPERS
|
147
|
+
# ====================================================================================
|
148
|
+
# ++
|
149
|
+
|
45
150
|
# \Options hash containing accession number and database ID. This can be passed to the retrieve method.
|
46
151
|
def retrieve_options
|
47
152
|
options = {}
|
@@ -50,31 +155,6 @@ module EBSCO
|
|
50
155
|
options
|
51
156
|
end
|
52
157
|
|
53
|
-
# The accession number.
|
54
|
-
def accession_number
|
55
|
-
header_an
|
56
|
-
end
|
57
|
-
|
58
|
-
# The database ID.
|
59
|
-
def database_id
|
60
|
-
header_db_id
|
61
|
-
end
|
62
|
-
|
63
|
-
# The database name or label.
|
64
|
-
def database_name
|
65
|
-
header_db_label
|
66
|
-
end
|
67
|
-
|
68
|
-
# The access level.
|
69
|
-
def access_level
|
70
|
-
header_access_level
|
71
|
-
end
|
72
|
-
|
73
|
-
# The search relevancy score.
|
74
|
-
def relevancy_score
|
75
|
-
header_score
|
76
|
-
end
|
77
|
-
|
78
158
|
# The title.
|
79
159
|
def title
|
80
160
|
# _retval = get_item_data_by_name('Title') || bib_title
|
@@ -105,147 +185,12 @@ module EBSCO
|
|
105
185
|
_retval.nil?? nil : CGI.unescapeHTML(_retval)
|
106
186
|
end
|
107
187
|
|
108
|
-
# The list of authors
|
109
|
-
def authors
|
110
|
-
bib_authors || get_item_data_by_name('Author')
|
111
|
-
end
|
112
|
-
|
113
|
-
# The author affiliations
|
114
|
-
def author_affiliations
|
115
|
-
get_item_data_by_name('AffiliationAuthor')
|
116
|
-
end
|
117
|
-
|
118
|
-
# The list of subject terms.
|
119
|
-
def subjects
|
120
|
-
bib_subjects || get_item_data_by_name('Subject')
|
121
|
-
end
|
122
|
-
|
123
|
-
# The list of geographic subjects
|
124
|
-
def subjects_geographic
|
125
|
-
get_item_data_by_name('SubjectGeographic')
|
126
|
-
end
|
127
|
-
|
128
|
-
# The list of person subjects
|
129
|
-
def subjects_person
|
130
|
-
get_item_data_by_name('SubjectPerson')
|
131
|
-
end
|
132
|
-
|
133
|
-
# Author supplied keywords
|
134
|
-
def author_supplied_keywords
|
135
|
-
get_item_data_by_label('Author-Supplied Keywords')
|
136
|
-
end
|
137
|
-
|
138
188
|
# Notes
|
139
189
|
def notes
|
140
190
|
_retval = get_item_data_by_name('Note')
|
141
191
|
_retval.nil?? nil : CGI.unescapeHTML(_retval)
|
142
192
|
end
|
143
193
|
|
144
|
-
# Languages
|
145
|
-
def languages
|
146
|
-
get_item_data_by_name('Language') || bib_languages
|
147
|
-
end
|
148
|
-
|
149
|
-
# Total number of pages.
|
150
|
-
def page_count
|
151
|
-
bib_page_count
|
152
|
-
end
|
153
|
-
|
154
|
-
# Starting page number.
|
155
|
-
def page_start
|
156
|
-
bib_page_start
|
157
|
-
end
|
158
|
-
|
159
|
-
# Physical description.
|
160
|
-
def physical_description
|
161
|
-
get_item_data_by_name('PhysDesc')
|
162
|
-
end
|
163
|
-
|
164
|
-
# Publication type.
|
165
|
-
def publication_type
|
166
|
-
header_publication_type || get_item_data_by_name('TypePub')
|
167
|
-
end
|
168
|
-
|
169
|
-
# Publication type ID.
|
170
|
-
def publication_type_id
|
171
|
-
header_publication_type_id
|
172
|
-
end
|
173
|
-
|
174
|
-
# Publication date.
|
175
|
-
def publication_date
|
176
|
-
bib_publication_date || get_item_data_by_name('DatePub')
|
177
|
-
end
|
178
|
-
|
179
|
-
# Publication year.
|
180
|
-
def publication_year
|
181
|
-
bib_publication_year || get_item_data_by_name('DatePub')
|
182
|
-
end
|
183
|
-
|
184
|
-
# Publisher information.
|
185
|
-
def publisher_info
|
186
|
-
get_item_data_by_label('Publication Information')
|
187
|
-
end
|
188
|
-
|
189
|
-
# Document type.
|
190
|
-
def document_type
|
191
|
-
get_item_data_by_name('TypeDocument')
|
192
|
-
end
|
193
|
-
|
194
|
-
# DOI identifier.
|
195
|
-
def doi
|
196
|
-
get_item_data_by_name('DOI') || bib_doi
|
197
|
-
end
|
198
|
-
|
199
|
-
# OCLC identifier.
|
200
|
-
def oclc
|
201
|
-
get_item_data_by_label('OCLC')
|
202
|
-
end
|
203
|
-
|
204
|
-
# Prind ISSN
|
205
|
-
def issn_print
|
206
|
-
get_item_data_by_name('ISSN') || bib_issn_print
|
207
|
-
end
|
208
|
-
|
209
|
-
# List of ISSNs
|
210
|
-
def issns
|
211
|
-
bib_issns
|
212
|
-
end
|
213
|
-
|
214
|
-
# List of ISBNs
|
215
|
-
def isbns
|
216
|
-
bib_isbns || item_related_isbns
|
217
|
-
end
|
218
|
-
|
219
|
-
# Print ISBN
|
220
|
-
def isbn_print
|
221
|
-
bib_isbn_print
|
222
|
-
end
|
223
|
-
|
224
|
-
# Electronic ISBN
|
225
|
-
def isbn_electronic
|
226
|
-
bib_isbn_electronic
|
227
|
-
end
|
228
|
-
|
229
|
-
# Series information.
|
230
|
-
def series
|
231
|
-
get_item_data_by_name('SeriesInfo')
|
232
|
-
end
|
233
|
-
|
234
|
-
# Volume
|
235
|
-
def volume
|
236
|
-
bib_volume
|
237
|
-
end
|
238
|
-
|
239
|
-
# Issue
|
240
|
-
def issue
|
241
|
-
bib_issue
|
242
|
-
end
|
243
|
-
|
244
|
-
# Cover images
|
245
|
-
def covers
|
246
|
-
images
|
247
|
-
end
|
248
|
-
|
249
194
|
# Cover image - thumbnail size link
|
250
195
|
def cover_thumb_url
|
251
196
|
if images('thumb').any?
|
@@ -264,27 +209,6 @@ module EBSCO
|
|
264
209
|
end
|
265
210
|
end
|
266
211
|
|
267
|
-
# Word count for fulltext.
|
268
|
-
def fulltext_word_count
|
269
|
-
get_item_data_by_name('FullTextWordCount').to_i
|
270
|
-
end
|
271
|
-
|
272
|
-
# --
|
273
|
-
# ====================================================================================
|
274
|
-
# GENERAL: ResultId, PLink, ImageInfo, CustomLinks, FullText
|
275
|
-
# ====================================================================================
|
276
|
-
# ++
|
277
|
-
|
278
|
-
# Result ID.
|
279
|
-
def result_id
|
280
|
-
@record['ResultId']
|
281
|
-
end
|
282
|
-
|
283
|
-
# EBSCO's persistent link.
|
284
|
-
def plink
|
285
|
-
@record['PLink']
|
286
|
-
end
|
287
|
-
|
288
212
|
# Fulltext.
|
289
213
|
def html_fulltext
|
290
214
|
if @record.fetch('FullText',{}).fetch('Text',{}).fetch('Availability',0) == '1'
|
@@ -308,6 +232,16 @@ module EBSCO
|
|
308
232
|
returned_images
|
309
233
|
end
|
310
234
|
|
235
|
+
# related ISBNs
|
236
|
+
def item_related_isbns
|
237
|
+
isbns = get_item_data_by_label('Related ISBNs')
|
238
|
+
if isbns
|
239
|
+
isbns.split(' ').map!{|item| item.gsub(/\.$/, '')}
|
240
|
+
else
|
241
|
+
nil
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
311
245
|
# --
|
312
246
|
# ====================================================================================
|
313
247
|
# LINK HELPERS
|
@@ -443,45 +377,8 @@ module EBSCO
|
|
443
377
|
links
|
444
378
|
end
|
445
379
|
|
446
|
-
#:nodoc: all
|
447
|
-
# No need to document methods below
|
448
|
-
|
449
|
-
# ====================================================================================
|
450
|
-
# HEADER: DbId, DbLabel, An, PubType, PubTypeId, AccessLevel
|
451
|
-
# ====================================================================================
|
452
|
-
|
453
|
-
def header_an
|
454
|
-
@record['Header']['An'].to_s
|
455
|
-
end
|
456
|
-
|
457
|
-
def header_db_id
|
458
|
-
@record['Header']['DbId'].to_s
|
459
|
-
end
|
460
|
-
|
461
|
-
# only available from search not retrieve
|
462
|
-
def header_score
|
463
|
-
@record['Header']['RelevancyScore']
|
464
|
-
end
|
465
|
-
|
466
|
-
def header_publication_type
|
467
|
-
@record['Header']['PubType']
|
468
|
-
end
|
469
|
-
|
470
|
-
def header_publication_type_id
|
471
|
-
@record['Header']['PubTypeId']
|
472
|
-
end
|
473
|
-
|
474
|
-
def header_db_label
|
475
|
-
@record['Header']['DbLabel']
|
476
|
-
end
|
477
|
-
|
478
|
-
# not sure the rules for when this appears or not - RecordInfo.AccessInfo?
|
479
|
-
def header_access_level
|
480
|
-
@record['Header']['AccessLevel']
|
481
|
-
end
|
482
|
-
|
483
380
|
# ====================================================================================
|
484
|
-
#
|
381
|
+
# ITEM DATA HELPERS
|
485
382
|
# ====================================================================================
|
486
383
|
|
487
384
|
# look up by 'Name' and return 'Data'
|
@@ -512,22 +409,18 @@ module EBSCO
|
|
512
409
|
end
|
513
410
|
end
|
514
411
|
|
515
|
-
def item_related_isbns
|
516
|
-
isbns = get_item_data_by_label('Related ISBNs')
|
517
|
-
if isbns
|
518
|
-
isbns.split(' ').map!{|item| item.gsub(/\.$/, '')}
|
519
|
-
else
|
520
|
-
nil
|
521
|
-
end
|
522
|
-
end
|
523
|
-
|
524
412
|
# ====================================================================================
|
525
413
|
# BIB ENTITY
|
526
414
|
# ====================================================================================
|
527
415
|
|
528
416
|
def bib_title
|
529
417
|
if @bib_entity && @bib_entity.fetch('Titles', {}).any?
|
530
|
-
@bib_entity.fetch('Titles', {}).find{|item| item['Type'] == 'main'}
|
418
|
+
item_bib_title = @bib_entity.fetch('Titles', {}).find{|item| item['Type'] == 'main'}
|
419
|
+
if item_bib_title
|
420
|
+
item_bib_title['TitleFull']
|
421
|
+
else
|
422
|
+
nil
|
423
|
+
end
|
531
424
|
else
|
532
425
|
nil
|
533
426
|
end
|
@@ -587,7 +480,12 @@ module EBSCO
|
|
587
480
|
|
588
481
|
def bib_doi
|
589
482
|
if @bib_entity && @bib_entity.fetch('Identifiers',{}).any?
|
590
|
-
@bib_entity.fetch('Identifiers',{}).find{|item| item['Type'] == 'doi'}
|
483
|
+
item_doi = @bib_entity.fetch('Identifiers',{}).find{|item| item['Type'] == 'doi'}
|
484
|
+
if item_doi
|
485
|
+
item_doi['Value']
|
486
|
+
else
|
487
|
+
nil
|
488
|
+
end
|
591
489
|
else
|
592
490
|
nil
|
593
491
|
end
|
@@ -756,164 +654,92 @@ module EBSCO
|
|
756
654
|
end
|
757
655
|
end
|
758
656
|
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
@bibtex.year = publication_year.to_i
|
769
|
-
|
770
|
-
# bibtex type
|
771
|
-
_type = publication_type
|
772
|
-
case _type
|
773
|
-
when 'Academic Journal', 'Reference'
|
774
|
-
@bibtex.type = :article
|
775
|
-
@bibtex.journal = source_title
|
776
|
-
unless issue.nil?
|
777
|
-
@bibtex.issue = issue
|
778
|
-
end
|
779
|
-
unless volume.nil?
|
780
|
-
@bibtex.number = volume
|
781
|
-
end
|
782
|
-
if page_start && page_count
|
783
|
-
@bibtex.pages = page_start + '-' + (page_start.to_i + page_count.to_i-1).to_s
|
784
|
-
end
|
785
|
-
if bib_publication_month
|
786
|
-
@bibtex.month = bib_publication_month.to_i
|
787
|
-
end
|
788
|
-
if doi
|
789
|
-
@bibtex.doi = doi
|
790
|
-
@bibtex.url = 'https://doi.org/' + doi
|
791
|
-
end
|
792
|
-
when 'Conference'
|
793
|
-
@bibtex.type = :conference
|
794
|
-
@bibtex.booktitle = source_title
|
795
|
-
if issue
|
796
|
-
@bibtex.issue = issue
|
797
|
-
end
|
798
|
-
if volume
|
799
|
-
@bibtex.number = volume
|
800
|
-
end
|
801
|
-
if page_start && page_count
|
802
|
-
@bibtex.pages = page_start + '-' + (page_start.to_i + page_count.to_i-1).to_s
|
803
|
-
end
|
804
|
-
if bib_publication_month
|
805
|
-
@bibtex.month = bib_publication_month.to_i
|
806
|
-
end
|
807
|
-
if publisher_info
|
808
|
-
@bibtex.publisher = publisher_info
|
809
|
-
end
|
810
|
-
if series
|
811
|
-
@bibtex.series = series
|
812
|
-
end
|
813
|
-
when 'Book', 'eBook'
|
814
|
-
@bibtex.type = :book
|
815
|
-
if publisher_info
|
816
|
-
@bibtex.publisher = publisher_info
|
817
|
-
end
|
818
|
-
if series
|
819
|
-
@bibtex.series = series
|
820
|
-
end
|
821
|
-
if bib_publication_month
|
822
|
-
@bibtex.month = bib_publication_month.to_i
|
823
|
-
end
|
824
|
-
if isbns
|
825
|
-
@bibtex.isbn = isbns.first
|
826
|
-
end
|
827
|
-
else
|
828
|
-
@bibtex.type = :other
|
829
|
-
end
|
830
|
-
@bibtex
|
831
|
-
end
|
832
|
-
|
833
|
-
##
|
834
|
-
# wrap bibtex entry in a bibliography so that it can be transformed into citations using citeproc
|
835
|
-
def bibtex_bibliography
|
836
|
-
bib = BibTeX::Bibliography.new
|
837
|
-
bib << @bibtex
|
838
|
-
bib
|
839
|
-
end
|
840
|
-
|
841
|
-
# this is used to generate solr fields
|
842
|
-
def to_hash(type = 'compact')
|
843
|
-
hash = {}
|
844
|
-
|
845
|
-
# information typically required by all views
|
846
|
-
if database_id && accession_number
|
847
|
-
safe_an = accession_number.gsub(/\./,'_')
|
848
|
-
hash['id'] = database_id + '__' + safe_an
|
849
|
-
end
|
850
|
-
unless title.nil?
|
851
|
-
hash['title_display'] = title.gsub('<highlight>', '').gsub('</highlight>', '')
|
852
|
-
end
|
853
|
-
if source_title
|
854
|
-
hash['academic_journal'] = source_title
|
855
|
-
end
|
856
|
-
if publication_year
|
857
|
-
hash['pub_date'] = publication_year
|
858
|
-
end
|
859
|
-
if authors
|
860
|
-
hash['author_display'] = authors.to_s
|
861
|
-
end
|
862
|
-
if publication_type
|
863
|
-
hash['format'] = publication_type.to_s
|
864
|
-
end
|
865
|
-
if languages
|
866
|
-
if languages.kind_of?(Array)
|
867
|
-
hash['language_facet'] = languages.join(', ')
|
868
|
-
else
|
869
|
-
hash['language_facet'] = languages.to_s
|
657
|
+
def to_attr_hash
|
658
|
+
hash = Hash.new
|
659
|
+
instance_variables.each do |var|
|
660
|
+
if var != :@record &&
|
661
|
+
var != :@items &&
|
662
|
+
var != :@bib_entity &&
|
663
|
+
var != :@bib_part &&
|
664
|
+
var != :@bib_relationships
|
665
|
+
hash[var.to_s.sub(/^@/, '')] = instance_variable_get(var)
|
870
666
|
end
|
871
667
|
end
|
872
|
-
if publisher_info
|
873
|
-
hash['pub_info'] = publisher_info
|
874
|
-
end
|
875
|
-
if abstract
|
876
|
-
hash['abstract'] = abstract
|
877
|
-
end
|
878
|
-
if cover_thumb_url
|
879
|
-
hash['cover_thumb_url'] = cover_thumb_url
|
880
|
-
end
|
881
|
-
if cover_medium_url
|
882
|
-
hash['cover_medium_url'] = cover_medium_url
|
883
|
-
end
|
884
668
|
if all_links
|
885
|
-
|
886
|
-
|
887
|
-
end
|
888
|
-
# generate bibtex entry if it hasn't been done already
|
889
|
-
if @bibtex.key == 'unknown-a'
|
890
|
-
@bibtex = retrieve_bibtex
|
891
|
-
end
|
892
|
-
unless @bibtex.has_type?(:other)
|
893
|
-
hash['citation_apa'] = citation('apa').first.to_s
|
894
|
-
hash['citation_mla'] = citation('modern-language-association').first.to_s
|
895
|
-
hash['citation_chicago'] = citation('chicago-author-date').first.to_s
|
896
|
-
end
|
897
|
-
|
898
|
-
# extra information typically required by detailed item views
|
899
|
-
if type == 'verbose'
|
900
|
-
if all_links
|
901
|
-
hash['links'] = all_links
|
902
|
-
end
|
903
|
-
if doi
|
904
|
-
hash['doi'] = doi
|
905
|
-
end
|
906
|
-
if html_fulltext
|
907
|
-
hash['html_fulltext'] = html_fulltext
|
908
|
-
end
|
669
|
+
hash['eds_fulltext_link'] = { 'id' => @eds_database_id + '__' + @eds_accession_number.gsub(/\./,'_'),
|
670
|
+
'links' => all_links }
|
909
671
|
end
|
910
672
|
|
911
673
|
hash
|
912
674
|
end
|
913
675
|
|
676
|
+
# this is used to generate solr fields
|
677
|
+
# def to_hash(type = 'compact')
|
678
|
+
# hash = {}
|
679
|
+
#
|
680
|
+
# # information typically required by all views
|
681
|
+
# if database_id && accession_number
|
682
|
+
# safe_an = accession_number.gsub(/\./,'_')
|
683
|
+
# hash['eds_id'] = database_id + '__' + safe_an
|
684
|
+
# end
|
685
|
+
# unless title.nil?
|
686
|
+
# hash['eds_title'] = title.gsub('<highlight>', '').gsub('</highlight>', '')
|
687
|
+
# end
|
688
|
+
# if source_title
|
689
|
+
# hash['eds_source_title'] = source_title
|
690
|
+
# end
|
691
|
+
# if publication_year
|
692
|
+
# hash['eds_publication_year'] = publication_year
|
693
|
+
# end
|
694
|
+
# if authors
|
695
|
+
# hash['eds_authors'] = authors.to_s
|
696
|
+
# end
|
697
|
+
# if publication_type
|
698
|
+
# hash['eds_publication_type'] = publication_type.to_s
|
699
|
+
# end
|
700
|
+
# if languages
|
701
|
+
# if languages.kind_of?(Array)
|
702
|
+
# hash['eds_language'] = languages.join(', ')
|
703
|
+
# else
|
704
|
+
# hash['eds_language'] = languages.to_s
|
705
|
+
# end
|
706
|
+
# end
|
707
|
+
# if publisher_info
|
708
|
+
# hash['eds_publisher_info'] = publisher_info
|
709
|
+
# end
|
710
|
+
# if abstract
|
711
|
+
# hash['eds_abstract'] = abstract
|
712
|
+
# end
|
713
|
+
# if cover_thumb_url
|
714
|
+
# hash['eds_cover_thumb_url'] = cover_thumb_url
|
715
|
+
# end
|
716
|
+
# if cover_medium_url
|
717
|
+
# hash['eds_cover_medium_url'] = cover_medium_url
|
718
|
+
# end
|
719
|
+
# if all_links
|
720
|
+
# hash['eds_fulltext_link'] = { 'id' => database_id + '__' + safe_an, 'links' => all_links}
|
721
|
+
# end
|
722
|
+
#
|
723
|
+
# # extra information typically required by detailed item views
|
724
|
+
# if type == 'verbose'
|
725
|
+
# if all_links
|
726
|
+
# hash['eds_links'] = all_links
|
727
|
+
# end
|
728
|
+
# if doi
|
729
|
+
# hash['eds_doi'] = doi
|
730
|
+
# end
|
731
|
+
# if html_fulltext
|
732
|
+
# hash['eds_html_fulltext'] = html_fulltext
|
733
|
+
# end
|
734
|
+
# end
|
735
|
+
#
|
736
|
+
# hash
|
737
|
+
# end
|
738
|
+
|
914
739
|
def to_solr
|
915
740
|
# solr response
|
916
|
-
item_hash = to_hash 'verbose'
|
741
|
+
# item_hash = to_hash 'verbose'
|
742
|
+
item_hash = to_attr_hash
|
917
743
|
solr_response =
|
918
744
|
{
|
919
745
|
'responseHeader' => {
|
@@ -929,19 +755,6 @@ module EBSCO
|
|
929
755
|
solr_response
|
930
756
|
end
|
931
757
|
|
932
|
-
def citation(style = 'apa')
|
933
|
-
# generate bibtex entry if it hasn't been done already
|
934
|
-
if @bibtex.key == 'unknown-a'
|
935
|
-
@bibtex = retrieve_bibtex
|
936
|
-
end
|
937
|
-
# TODO: catch CSL::ParseError when style can't be found
|
938
|
-
CSL::Style.root = File.join(__dir__, 'csl/styles')
|
939
|
-
cp = CiteProc::Processor.new style: style, format: 'text'
|
940
|
-
bib_entry = @bibtex
|
941
|
-
bib_entry_id = bib_entry.to_citeproc['id']
|
942
|
-
cp.import bibtex_bibliography.to_citeproc
|
943
|
-
cp.render :bibliography, id: bib_entry_id
|
944
|
-
end
|
945
758
|
|
946
759
|
end # Class Record
|
947
760
|
end # Module EDS
|
data/lib/ebsco/eds/results.rb
CHANGED
@@ -94,11 +94,11 @@ module EBSCO
|
|
94
94
|
|
95
95
|
# todo: add solr hl.tag.pre and hl.tag.post to retrieval criteria
|
96
96
|
if retrieval_criteria && retrieval_criteria.fetch('Highlight',{}) == 'y'
|
97
|
-
hl_title = record.
|
98
|
-
hl_hash.update({ record.
|
97
|
+
hl_title = record.eds_title.gsub('<highlight>', '<em>').gsub('</highlight>', '</em>')
|
98
|
+
hl_hash.update({ record.eds_database_id + '__' + record.eds_accession_number => { 'title_display' => [hl_title]} })
|
99
99
|
#hl_hash.merge title_hl
|
100
100
|
end
|
101
|
-
solr_docs.push(record.
|
101
|
+
solr_docs.push(record.to_attr_hash)
|
102
102
|
}
|
103
103
|
end
|
104
104
|
|
@@ -108,17 +108,19 @@ module EBSCO
|
|
108
108
|
qterms = search_terms.join(' ')
|
109
109
|
rows = results_per_page
|
110
110
|
num_found = stat_total_hits.to_i
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
111
|
+
eds_search_limiters_facet = solr_search_limiters
|
112
|
+
eds_publication_type_facet = solr_facets('SourceType')
|
113
|
+
eds_language_facet = solr_facets('Language')
|
114
|
+
eds_subject_topic_facet = solr_facets('SubjectEDS')
|
115
|
+
eds_publisher_facet = solr_facets('Publisher')
|
116
|
+
eds_journal_facet = solr_facets('Journal')
|
117
|
+
eds_subjects_geographic_facet = solr_facets('SubjectGeographic')
|
118
|
+
eds_category_facet = solr_facets('Category')
|
119
|
+
eds_content_provider_facet = solr_facets('ContentProvider')
|
120
|
+
eds_library_location_facet = solr_facets('LocationLibrary')
|
121
|
+
eds_library_collection_facet = solr_facets('CollectionLibrary')
|
122
|
+
eds_author_university_facet = solr_facets('AuthorUniversity')
|
123
|
+
eds_publication_year_facet = solr_pub_date_facets
|
122
124
|
facet = true
|
123
125
|
|
124
126
|
# solr response
|
@@ -144,17 +146,19 @@ module EBSCO
|
|
144
146
|
'facet_counts' =>
|
145
147
|
{
|
146
148
|
'facet_fields' => {
|
147
|
-
'
|
148
|
-
'
|
149
|
-
'
|
150
|
-
'
|
151
|
-
'
|
152
|
-
'
|
153
|
-
'
|
154
|
-
'
|
155
|
-
'
|
156
|
-
'
|
157
|
-
'
|
149
|
+
'eds_search_limiters_facet' => eds_search_limiters_facet,
|
150
|
+
'eds_publication_type_facet' => eds_publication_type_facet,
|
151
|
+
'eds_language_facet' => eds_language_facet,
|
152
|
+
'eds_subject_topic_facet' => eds_subject_topic_facet,
|
153
|
+
'eds_publication_year_facet' => eds_publication_year_facet,
|
154
|
+
'eds_publisher_facet' => eds_publisher_facet,
|
155
|
+
'eds_journal_facet' => eds_journal_facet,
|
156
|
+
'eds_subjects_geographic_facet' => eds_subjects_geographic_facet,
|
157
|
+
'eds_category_facet' => eds_category_facet,
|
158
|
+
'eds_content_provider_facet' => eds_content_provider_facet,
|
159
|
+
'eds_library_location_facet' => eds_library_location_facet,
|
160
|
+
'eds_library_collection_facet' => eds_library_collection_facet,
|
161
|
+
'eds_author_university_facet' => eds_author_university_facet
|
158
162
|
}
|
159
163
|
}
|
160
164
|
}
|
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.1.
|
4
|
+
version: 0.1.6.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-
|
12
|
+
date: 2017-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|