ebsco-eds 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +72 -0
- data/README.md +8 -2
- data/lib/ebsco/eds.rb +1 -0
- data/lib/ebsco/eds/citations.rb +80 -0
- data/lib/ebsco/eds/configuration.rb +4 -0
- data/lib/ebsco/eds/info.rb +15 -1
- data/lib/ebsco/eds/record.rb +49 -6
- data/lib/ebsco/eds/results.rb +1 -1
- data/lib/ebsco/eds/session.rb +122 -10
- data/lib/ebsco/eds/version.rb +1 -1
- data/lib/faraday/eds_caching_middleware.rb +11 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0c34a0593ea537adc590f422fbbc06a4c465e9d
|
4
|
+
data.tar.gz: 06a8d582c1f568207565295eaf2c3d62a37ffae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec9f1aaf05490c9195125e2d89b52abec45e026bf7af43b02fe79edf2083a6294e0ed3c12783bc6413d2bf375b7ce567ef9f680f8773339540d829fe62ba8c0a
|
7
|
+
data.tar.gz: 76dde522d01b29aa103173627c67320f2b3173c8b4ad7c822707f963f9cb9fb8d136a1309db4b33180713a4c6372bfa782bd30986cf94c377a7b2b3beb6f9542
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
|
+
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## [Unreleased]
|
8
|
+
|
9
|
+
### Added
|
10
|
+
### Changed
|
11
|
+
### Deprecated
|
12
|
+
### Removed
|
13
|
+
### Fixed
|
14
|
+
### Security
|
15
|
+
|
16
|
+
## [1.0.1] - 2018-10-10
|
17
|
+
### Added
|
18
|
+
- Citation styles/exports are added to Records
|
19
|
+
- Retrieve citation styles/exports for a Record ID or list of Record IDs
|
20
|
+
- Retrieve a list of available citation styles/exports from Info
|
21
|
+
- Citation styles/exports available in guest mode
|
22
|
+
### Fixed
|
23
|
+
- Double-unescapes data with an ephtml section (sul-dlss/SearchWorks #1504)
|
24
|
+
- Adds searchlinks to subject items when they don't exist #80 (sul-dlss/SearchWorks #1791)
|
25
|
+
### Changed
|
26
|
+
- Updates test cassettes with new citation styles/exports API calls
|
27
|
+
|
28
|
+
## [1.0.0] - 2018-03-05
|
29
|
+
### Changed
|
30
|
+
- Increments version to reflect production ready status
|
31
|
+
|
32
|
+
## [0.3.19.pre] - 2018-03-05
|
33
|
+
### Added
|
34
|
+
- Optionally (default=off) include quick view images with Records
|
35
|
+
### Changed
|
36
|
+
- Reorganizes VCR tests
|
37
|
+
|
38
|
+
## [0.3.18.pre] - 2017-10-10
|
39
|
+
### Fixed
|
40
|
+
- Fixes session config bug #84
|
41
|
+
|
42
|
+
## [0.3.17.pre] - 2017-09-27
|
43
|
+
### Changed
|
44
|
+
- Optionally (default=off) titleize facets via `titleize_facets` in config
|
45
|
+
|
46
|
+
## [0.3.16.pre] - 2017-09-20
|
47
|
+
### Added
|
48
|
+
- Titleize facets
|
49
|
+
- Autocorrect feature
|
50
|
+
|
51
|
+
## [0.3.15.pre] - 2017-09-18
|
52
|
+
### Added
|
53
|
+
- Optionally (default=off) converts all searchLink field codes to DE via `all_subjects_search_links` in config
|
54
|
+
- Optionally (default=off) decodes/sanitizes html in item data and fulltext html via `decode_sanitize_html` in config
|
55
|
+
|
56
|
+
## [0.3.14.pre] - 2017-09-14
|
57
|
+
### Fixed
|
58
|
+
- Fixes 250+ pagination issues with SourceType and ContentProvider facets
|
59
|
+
|
60
|
+
## [0.3.13.pre] - 2017-09-13
|
61
|
+
### Fixed
|
62
|
+
- Includes additional Subject and Geographic Subject metadata
|
63
|
+
|
64
|
+
## [0.3.12.pre] - 2017-09-11
|
65
|
+
### Fixed
|
66
|
+
- Fixes some 250+ pagination issues
|
67
|
+
### Changed
|
68
|
+
- Updates tests
|
69
|
+
|
70
|
+
## [0.3.11.pre] - 2017-09-06
|
71
|
+
### Added
|
72
|
+
- Adds KW (keywords) and SH (subject heading) to solr search fields
|
data/README.md
CHANGED
@@ -4,7 +4,6 @@ A Ruby interface to the EBSCO Discovery Services API.
|
|
4
4
|
|
5
5
|
[![Build Status](https://travis-ci.org/ebsco/edsapi-ruby.svg)](https://travis-ci.org/ebsco/edsapi-ruby)
|
6
6
|
[![codecov](https://codecov.io/gh/ebsco/edsapi-ruby/branch/master/graph/badge.svg)](https://codecov.io/gh/ebsco/edsapi-ruby/branch/master)
|
7
|
-
[![Dependency Status](https://gemnasium.com/badges/github.com/ebsco/edsapi-ruby.svg)](https://gemnasium.com/github.com/ebsco/edsapi-ruby)
|
8
7
|
[![Gem Version](https://img.shields.io/gem/v/ebsco-eds.svg?style=flat)](http://rubygems.org/gems/ebsco-eds)
|
9
8
|
|
10
9
|
## Dependencies
|
@@ -27,12 +26,19 @@ Or install it yourself as:
|
|
27
26
|
|
28
27
|
$ gem install ebsco-eds
|
29
28
|
|
29
|
+
## Feature Support
|
30
|
+
|
31
|
+
- Research Starters are included in results response, when available
|
32
|
+
- Configurable auto-suggest or 'Did you mean' support
|
33
|
+
- Configurable auto-correct support
|
34
|
+
- Quick-view images can be included in results, when available - [screencast](https://youtu.be/HxtWEq_Fhks)
|
35
|
+
- RIS citations are now included in the record response
|
36
|
+
|
30
37
|
## Documentation
|
31
38
|
|
32
39
|
- [Configuration](https://github.com/ebsco/edsapi-ruby/wiki/Configuration)
|
33
40
|
- [Quick Start](https://github.com/ebsco/edsapi-ruby/wiki/Quick-Start)
|
34
41
|
- [Blacklight Support](https://github.com/ebsco/edsapi-ruby/wiki/Solr-and-Blacklight-Support)
|
35
|
-
- [Citation Formats (Experimental)](https://github.com/ebsco/edsapi-ruby/wiki/Citation-Formats-(Experimental))
|
36
42
|
|
37
43
|
### Models
|
38
44
|
|
data/lib/ebsco/eds.rb
CHANGED
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'ebsco/eds/jsonable'
|
2
|
+
|
3
|
+
module EBSCO
|
4
|
+
module EDS
|
5
|
+
class Citations
|
6
|
+
include JSONable
|
7
|
+
|
8
|
+
attr_accessor :eds_database_id, :eds_accession_number, :eds_record_id, :items
|
9
|
+
|
10
|
+
def initialize(dbid:, an:, citation_result:, eds_config: nil)
|
11
|
+
|
12
|
+
@eds_database_id = dbid
|
13
|
+
@eds_accession_number = an
|
14
|
+
@eds_record_id = @eds_database_id + '__' + @eds_accession_number
|
15
|
+
|
16
|
+
@items = []
|
17
|
+
|
18
|
+
if citation_result.key? 'Citations'
|
19
|
+
|
20
|
+
# citation styles
|
21
|
+
citation_result['Citations'].each do |style|
|
22
|
+
item = {}
|
23
|
+
|
24
|
+
if style.key? 'Id'
|
25
|
+
item['id'] = JSON.parse(style['Id'].to_json)
|
26
|
+
end
|
27
|
+
|
28
|
+
if style.key? 'Label'
|
29
|
+
item['label'] = JSON.parse(style['Label'].to_json)
|
30
|
+
end
|
31
|
+
|
32
|
+
if style.key? 'Data'
|
33
|
+
item['data'] = JSON.parse(style['Data'].to_json)
|
34
|
+
end
|
35
|
+
|
36
|
+
if style.key? 'Caption'
|
37
|
+
item['caption'] = JSON.parse(style['Caption'].to_json)
|
38
|
+
end
|
39
|
+
|
40
|
+
if style.key? 'SectionLabel'
|
41
|
+
item['section_label'] = JSON.parse(style['SectionLabel'].to_json)
|
42
|
+
end
|
43
|
+
|
44
|
+
if style.key? 'Error'
|
45
|
+
item['error'] = JSON.parse(style['Error'].to_json)
|
46
|
+
end
|
47
|
+
|
48
|
+
@items.push item
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
else
|
53
|
+
|
54
|
+
# citation exports
|
55
|
+
item = {}
|
56
|
+
if citation_result.key? 'Format'
|
57
|
+
item['id'] = JSON.parse(citation_result['Format'].to_json)
|
58
|
+
end
|
59
|
+
|
60
|
+
if citation_result.key? 'Label'
|
61
|
+
item['label'] = JSON.parse(citation_result['Label'].to_json)
|
62
|
+
end
|
63
|
+
|
64
|
+
if citation_result.key? 'Data'
|
65
|
+
item['data'] = JSON.parse(citation_result['Data'].to_json)
|
66
|
+
end
|
67
|
+
|
68
|
+
if citation_result.key? 'Error'
|
69
|
+
item['error'] = JSON.parse(citation_result['Error'].to_json)
|
70
|
+
end
|
71
|
+
|
72
|
+
@items.push item
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -25,6 +25,10 @@ module EBSCO
|
|
25
25
|
:info_url => '/edsapi/rest/Info',
|
26
26
|
:search_url => '/edsapi/rest/Search',
|
27
27
|
:retrieve_url => '/edsapi/rest/Retrieve',
|
28
|
+
:citation_exports_url => '/edsapi/rest/ExportFormat',
|
29
|
+
:citation_exports_formats => 'all',
|
30
|
+
:citation_styles_url => '/edsapi/rest/CitationStyles',
|
31
|
+
:citation_styles_formats => 'all',
|
28
32
|
:user_agent => 'EBSCO EDS GEM v0.0.1',
|
29
33
|
:interface_id => 'edsapi_ruby_gem',
|
30
34
|
:log => 'faraday.log',
|
data/lib/ebsco/eds/info.rb
CHANGED
@@ -5,7 +5,7 @@ module EBSCO
|
|
5
5
|
module EDS
|
6
6
|
class Info
|
7
7
|
|
8
|
-
attr_accessor :available_search_criteria, :view_result_settings, :application_settings, :api_settings
|
8
|
+
attr_accessor :available_search_criteria, :view_result_settings, :application_settings, :api_settings, :citation_style_settings, :export_format_settings
|
9
9
|
|
10
10
|
def initialize(info, config = {})
|
11
11
|
@results_per_page = config[:max_results_per_page] ? config[:max_results_per_page] : 100
|
@@ -13,6 +13,8 @@ module EBSCO
|
|
13
13
|
@view_result_settings = info['ViewResultSettings']
|
14
14
|
@application_settings = info['ApplicationSettings']
|
15
15
|
@api_settings = info['ApiSettings']
|
16
|
+
@citation_style_settings = info['CitationStyleSettings']
|
17
|
+
@export_format_settings = info['ExportFormatSettings']
|
16
18
|
end
|
17
19
|
|
18
20
|
# ====================================================================================
|
@@ -143,6 +145,18 @@ module EBSCO
|
|
143
145
|
@available_search_criteria.fetch('AvailableDidYouMeanOptions',{}).find{|item| item['Id'] == 'AutoCorrect'}['DefaultOn']
|
144
146
|
end
|
145
147
|
|
148
|
+
# ====================================================================================
|
149
|
+
# CITATION STYLES AND EXPORT FORMATS
|
150
|
+
# ====================================================================================
|
151
|
+
|
152
|
+
def available_citation_styles (id = 'all')
|
153
|
+
@citation_style_settings.fetch('AvailableStyles',{}).select{|item| item['Id'] == id || id == 'all'}
|
154
|
+
end
|
155
|
+
|
156
|
+
def available_citation_exports (id = 'all')
|
157
|
+
@export_format_settings.fetch('AvailableFormats',{}).select{|item| item['Id'] == id || id == 'all'}
|
158
|
+
end
|
159
|
+
|
146
160
|
# ====================================================================================
|
147
161
|
# RESULTS VIEW SETTINGS
|
148
162
|
# ====================================================================================
|
data/lib/ebsco/eds/record.rb
CHANGED
@@ -80,7 +80,9 @@ module EBSCO
|
|
80
80
|
# publication record attributes
|
81
81
|
:eds_publication_id,
|
82
82
|
:eds_publication_is_searchable,
|
83
|
-
:eds_publication_scope_note
|
83
|
+
:eds_publication_scope_note,
|
84
|
+
:eds_citation_exports,
|
85
|
+
:eds_citation_styles
|
84
86
|
]
|
85
87
|
|
86
88
|
KNOWN_ITEM_NAMES = %w(
|
@@ -190,6 +192,7 @@ module EBSCO
|
|
190
192
|
get_item_data({name: 'Subject', label: 'Subject Terms', group: 'Su'}) ||
|
191
193
|
get_item_data({name: 'Subject', label: 'Subject Indexing', group: 'Su'}) ||
|
192
194
|
get_item_data({name: 'Subject', label: 'Subject Category', group: 'Su'}) ||
|
195
|
+
get_item_data({name: 'Subject', label: 'KeyWords Plus', group: 'Su'}) ||
|
193
196
|
bib_subjects
|
194
197
|
@eds_subjects_geographic =
|
195
198
|
get_item_data({name: 'SubjectGeographic', label: 'Geographic Terms', group: 'Su'}) ||
|
@@ -789,15 +792,26 @@ module EBSCO
|
|
789
792
|
var != :@bib_entity &&
|
790
793
|
var != :@bib_part &&
|
791
794
|
var != :@bib_relationships &&
|
792
|
-
var != :@image_quick_view_items
|
795
|
+
var != :@image_quick_view_items &&
|
796
|
+
var != :@eds_citation_exports &&
|
797
|
+
var != :@eds_citation_styles
|
793
798
|
hash[var.to_s.sub(/^@/, '')] = instance_variable_get(var)
|
794
799
|
end
|
795
800
|
end
|
801
|
+
|
796
802
|
if all_links
|
797
803
|
hash['eds_fulltext_link'] = { 'id' => @eds_database_id + '__' + @eds_accession_number,
|
798
804
|
'links' => all_links }
|
799
805
|
end
|
800
806
|
|
807
|
+
# add citation styles and exports
|
808
|
+
unless @eds_citation_exports.nil?
|
809
|
+
hash['eds_citation_exports'] = @eds_citation_exports.items
|
810
|
+
end
|
811
|
+
unless @eds_citation_styles.nil?
|
812
|
+
hash['eds_citation_styles'] = @eds_citation_styles.items
|
813
|
+
end
|
814
|
+
|
801
815
|
hash
|
802
816
|
end
|
803
817
|
|
@@ -897,6 +911,7 @@ module EBSCO
|
|
897
911
|
if item['Group']
|
898
912
|
group = item['Group']
|
899
913
|
if group == 'Su'
|
914
|
+
data = add_subject_searchlinks(data)
|
900
915
|
# translate searchLink field codes to DE?
|
901
916
|
if @all_subjects_search_links
|
902
917
|
data = data.gsub(/(searchLink fieldCode=")([A-Z]+)/, '\1DE')
|
@@ -923,11 +938,20 @@ module EBSCO
|
|
923
938
|
def html_decode_and_sanitize(data, config = nil)
|
924
939
|
default_config = Sanitize::Config.merge(Sanitize::Config::RELAXED,
|
925
940
|
:elements => Sanitize::Config::RELAXED[:elements] +
|
926
|
-
%w[relatesto searchlink],
|
941
|
+
%w[relatesto searchlink ephtml],
|
927
942
|
:attributes => Sanitize::Config::RELAXED[:attributes].merge(
|
928
943
|
'searchlink' => %w[fieldcode term]))
|
929
944
|
sanitize_config = config.nil? ? default_config : config
|
930
|
-
|
945
|
+
|
946
|
+
html = CGI.unescapeHTML(data.to_s)
|
947
|
+
# need to double-unescape data with an ephtml section
|
948
|
+
if html =~ /<ephtml>/
|
949
|
+
html = CGI.unescapeHTML(html)
|
950
|
+
html = html.gsub!(/\\"/, '"')
|
951
|
+
html = html.gsub!(/\\n /, '')
|
952
|
+
end
|
953
|
+
|
954
|
+
Sanitize.fragment(html, sanitize_config)
|
931
955
|
end
|
932
956
|
|
933
957
|
# dynamically add item metadata as 'eds_extra_ItemNameOrLabel'
|
@@ -941,12 +965,31 @@ module EBSCO
|
|
941
965
|
unless key.nil?
|
942
966
|
key = "eds_extras_#{key}"
|
943
967
|
unless value.nil?
|
944
|
-
class_eval { attr_accessor key }
|
945
|
-
instance_variable_set "@#{key}", CGI.unescapeHTML(value)
|
968
|
+
self.class.class_eval { attr_accessor key }
|
969
|
+
self.instance_variable_set "@#{key}", CGI.unescapeHTML(value)
|
946
970
|
end
|
947
971
|
end
|
948
972
|
end
|
949
973
|
|
974
|
+
def set_citation_exports(val)
|
975
|
+
@eds_citation_exports = val
|
976
|
+
end
|
977
|
+
|
978
|
+
def set_citation_styles(val)
|
979
|
+
@eds_citation_styles = val
|
980
|
+
end
|
981
|
+
|
982
|
+
# add searchlinks when they don't exist
|
983
|
+
def add_subject_searchlinks(data)
|
984
|
+
subjects = data
|
985
|
+
unless data.include? 'searchLink'
|
986
|
+
subjects = subjects.split('<br />').map do |su|
|
987
|
+
'<searchLink fieldCode="DE" term="%22' + su + '%22">' + su + '</searchLink>'
|
988
|
+
end.join('<br />')
|
989
|
+
end
|
990
|
+
subjects
|
991
|
+
end
|
992
|
+
|
950
993
|
end # Class Record
|
951
994
|
end # Module EDS
|
952
995
|
end # Module EBSCO
|
data/lib/ebsco/eds/results.rb
CHANGED
@@ -29,7 +29,7 @@ module EBSCO
|
|
29
29
|
|
30
30
|
# Creates search results from the \EDS API search response. It includes information about the results and a list
|
31
31
|
# of Record items.
|
32
|
-
def initialize(search_results, eds_config =
|
32
|
+
def initialize(search_results, eds_config = {}, additional_limiters = {}, options = {})
|
33
33
|
|
34
34
|
@results = search_results
|
35
35
|
@limiters = additional_limiters
|
data/lib/ebsco/eds/session.rb
CHANGED
@@ -28,6 +28,7 @@ module EBSCO
|
|
28
28
|
attr_accessor :auth_token # :nodoc:
|
29
29
|
# The session token. This is passed along in the x-sessionToken HTTP header.
|
30
30
|
attr_accessor :session_token # :nodoc:
|
31
|
+
attr_accessor :citation_token # :nodoc:
|
31
32
|
# The session configuration.
|
32
33
|
attr_reader :config
|
33
34
|
|
@@ -67,6 +68,7 @@ module EBSCO
|
|
67
68
|
def initialize(options = {})
|
68
69
|
|
69
70
|
@session_token = ''
|
71
|
+
@citation_token = ''
|
70
72
|
@auth_token = ''
|
71
73
|
@config = {}
|
72
74
|
@guest = true
|
@@ -161,17 +163,25 @@ module EBSCO
|
|
161
163
|
else
|
162
164
|
@session_token = create_session_token
|
163
165
|
end
|
166
|
+
|
167
|
+
if options.key? :citation_token
|
168
|
+
@citation_token = options[:citation_token]
|
169
|
+
else
|
170
|
+
@citation_token = create_citation_token
|
171
|
+
end
|
172
|
+
|
164
173
|
@info = EBSCO::EDS::Info.new(do_request(:get, path: @config[:info_url]), @config)
|
165
174
|
@current_page = 0
|
166
175
|
@search_options = nil
|
167
176
|
|
168
177
|
if @debug
|
169
178
|
if options.key? :caller
|
170
|
-
puts 'CREATE SESSION CALLER: ' + options[:caller].inspect
|
171
|
-
puts 'CALLER OPTIONS: ' + options.inspect
|
179
|
+
puts '*** CREATE SESSION CALLER: ' + options[:caller].inspect
|
180
|
+
puts '*** CALLER OPTIONS: ' + options.inspect
|
172
181
|
end
|
173
|
-
puts 'AUTH TOKEN: ' + @auth_token.inspect
|
174
|
-
puts 'SESSION TOKEN: ' + @session_token.inspect
|
182
|
+
puts '*** AUTH TOKEN: ' + @auth_token.inspect
|
183
|
+
puts '*** SESSION TOKEN: ' + @session_token.inspect
|
184
|
+
puts '*** CITATION TOKEN: ' + @citation_token.inspect
|
175
185
|
end
|
176
186
|
|
177
187
|
end
|
@@ -265,7 +275,7 @@ module EBSCO
|
|
265
275
|
end
|
266
276
|
@search_results
|
267
277
|
else
|
268
|
-
@search_results = EBSCO::EDS::Results.new(empty_results)
|
278
|
+
@search_results = EBSCO::EDS::Results.new(empty_results, @config)
|
269
279
|
end
|
270
280
|
end
|
271
281
|
end
|
@@ -303,13 +313,81 @@ module EBSCO
|
|
303
313
|
def retrieve(dbid:, an:, highlight: nil, ebook: 'ebook-pdf')
|
304
314
|
payload = { DbId: dbid, An: an, HighlightTerms: highlight, EbookPreferredFormat: ebook }
|
305
315
|
retrieve_response = do_request(:post, path: @config[:retrieve_url], payload: payload)
|
306
|
-
#retrieve_params = "?an=#{an}&dbid=#{dbid}&ebookpreferredformat=#{ebook}"
|
307
|
-
#retrieve_response = do_request(:get, path: @config[:retrieve_url] + retrieve_params)
|
308
316
|
record = EBSCO::EDS::Record.new(retrieve_response, @config)
|
309
|
-
|
317
|
+
record_citation_exports = get_citation_exports({dbid: dbid, an: an, format: @config[:citation_exports_formats]})
|
318
|
+
unless record_citation_exports.nil?
|
319
|
+
record.set_citation_exports(record_citation_exports)
|
320
|
+
end
|
321
|
+
record_citation_styles = get_citation_styles({dbid: dbid, an: an, format: @config[:citation_styles_formats]})
|
322
|
+
unless record_citation_styles.nil?
|
323
|
+
record.set_citation_styles(record_citation_styles)
|
324
|
+
end
|
310
325
|
record
|
311
326
|
end
|
312
327
|
|
328
|
+
# fetch the citation from the citation rest endpoint
|
329
|
+
def get_citation_exports(dbid:, an:, format: 'all')
|
330
|
+
begin
|
331
|
+
# only available as non-guest otherwise 148 error
|
332
|
+
citation_exports_params = "?an=#{an}&dbid=#{dbid}&format=#{format}"
|
333
|
+
citation_exports_response = do_request(:get, path: @config[:citation_exports_url] + citation_exports_params)
|
334
|
+
EBSCO::EDS::Citations.new(dbid: dbid, an: an, citation_result: citation_exports_response, eds_config: @config)
|
335
|
+
rescue EBSCO::EDS::BadRequest => e
|
336
|
+
custom_error_message = JSON.parse e.message.gsub('=>', ':')
|
337
|
+
# ErrorNumber 112 - Invalid Argument Value
|
338
|
+
# ErrorNumber 132 - Record not found
|
339
|
+
if custom_error_message['ErrorNumber'] == '112'
|
340
|
+
unknown_export_format = {"Format"=>format, "Label"=>"", "Data"=>"", "Error"=>"Invalid citation export format"}
|
341
|
+
EBSCO::EDS::Citations.new(dbid: dbid, an: an, citation_result: unknown_export_format, eds_config: @config)
|
342
|
+
elsif custom_error_message['ErrorNumber'] == '132'
|
343
|
+
record_not_found = {"Format"=>format, "Label"=>"", "Data"=>"", "Error"=>"Record not found"}
|
344
|
+
EBSCO::EDS::Citations.new(dbid: dbid, an: an, citation_result: record_not_found, eds_config: @config)
|
345
|
+
else
|
346
|
+
unknown_error = {"Format"=>format, "Label"=>"", "Data"=>"", "Error"=>custom_error_message['ErrorDescription']}
|
347
|
+
EBSCO::EDS::Citations.new(dbid: dbid, an: an, citation_result: unknown_error, eds_config: @config)
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
# fetch the citation from the citation rest endpoint
|
353
|
+
def get_citation_styles(dbid:, an:, format: 'all')
|
354
|
+
begin
|
355
|
+
citation_styles_params = "?an=#{an}&dbid=#{dbid}&styles=#{format}"
|
356
|
+
citation_styles_response = do_request(:get, path: @config[:citation_styles_url] + citation_styles_params)
|
357
|
+
EBSCO::EDS::Citations.new(dbid: dbid, an: an, citation_result: citation_styles_response, eds_config: @config)
|
358
|
+
rescue EBSCO::EDS::BadRequest => e
|
359
|
+
custom_error_message = JSON.parse e.message.gsub('=>', ':')
|
360
|
+
unknown_error = {"Id"=>format, "Label"=>"", "Data"=>"", "Error"=>custom_error_message['ErrorDescription']}
|
361
|
+
EBSCO::EDS::Citations.new(dbid: dbid, an: an, citation_result: unknown_error, eds_config: @config)
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
# get citation styles for a list of result ids
|
366
|
+
def get_citation_styles_list(id_list: [], format: 'all')
|
367
|
+
citations = []
|
368
|
+
if id_list.any?
|
369
|
+
id_list.each { |id|
|
370
|
+
dbid = id.split('__',2).first
|
371
|
+
accession = id.split('__',2).last
|
372
|
+
citations.push get_citation_styles(dbid: dbid, an: accession, format: format)
|
373
|
+
}
|
374
|
+
end
|
375
|
+
citations
|
376
|
+
end
|
377
|
+
|
378
|
+
# get citation exports for a list of result ids
|
379
|
+
def get_citation_exports_list(id_list: [], format: 'all')
|
380
|
+
citations = []
|
381
|
+
if id_list.any?
|
382
|
+
id_list.each { |id|
|
383
|
+
dbid = id.split('__',2).first
|
384
|
+
accession = id.split('__',2).last
|
385
|
+
citations.push get_citation_exports(dbid: dbid, an: accession, format: format)
|
386
|
+
}
|
387
|
+
end
|
388
|
+
citations
|
389
|
+
end
|
390
|
+
|
313
391
|
# Create a result set with just the record before and after the current detailed record
|
314
392
|
def solr_retrieve_previous_next(options = {})
|
315
393
|
|
@@ -714,11 +792,19 @@ module EBSCO
|
|
714
792
|
raise EBSCO::EDS::ApiError, 'EBSCO API error: Multiple attempts to perform request failed.'
|
715
793
|
end
|
716
794
|
begin
|
717
|
-
|
795
|
+
|
796
|
+
conn = connection
|
797
|
+
|
798
|
+
# use a citation api connection?
|
799
|
+
if path.include?(@config[:citation_exports_url]) || path.include?(@config[:citation_styles_url])
|
800
|
+
conn = citation_connection
|
801
|
+
end
|
802
|
+
|
803
|
+
resp = conn.send(method) do |req|
|
718
804
|
case method
|
719
805
|
when :get
|
720
806
|
unless payload.nil?
|
721
|
-
qs = CGI.
|
807
|
+
qs = CGI.unescape(payload.to_query(nil))
|
722
808
|
path << '?' + qs
|
723
809
|
end
|
724
810
|
req.url path
|
@@ -1009,6 +1095,26 @@ module EBSCO
|
|
1009
1095
|
end
|
1010
1096
|
end
|
1011
1097
|
|
1098
|
+
def citation_connection
|
1099
|
+
logger = Logger.new(@config[:log])
|
1100
|
+
logger.level = Logger.const_get(@log_level)
|
1101
|
+
Faraday.new(url: 'https://' + @api_hosts_list[@api_host_index]) do |conn|
|
1102
|
+
conn.headers['Content-Type'] = 'application/json;charset=UTF-8'
|
1103
|
+
conn.headers['Accept'] = 'application/json'
|
1104
|
+
conn.headers['x-sessionToken'] = @citation_token ? @citation_token : ''
|
1105
|
+
conn.headers['x-authenticationToken'] = @auth_token ? @auth_token : ''
|
1106
|
+
conn.headers['User-Agent'] = @config[:user_agent]
|
1107
|
+
conn.request :url_encoded
|
1108
|
+
conn.use :eds_caching_middleware, store: @cache_store, logger: @debug ? logger : nil if @use_cache
|
1109
|
+
conn.use :eds_exception_middleware
|
1110
|
+
conn.response :json, content_type: /\bjson$/
|
1111
|
+
conn.response :detailed_logger, logger if @debug
|
1112
|
+
conn.options[:open_timeout] = @config[:open_timeout]
|
1113
|
+
conn.options[:timeout] = @config[:timeout]
|
1114
|
+
conn.adapter :net_http_persistent
|
1115
|
+
end
|
1116
|
+
end
|
1117
|
+
|
1012
1118
|
def create_auth_token
|
1013
1119
|
if blank?(@auth_token)
|
1014
1120
|
# ip auth
|
@@ -1032,6 +1138,12 @@ module EBSCO
|
|
1032
1138
|
@session_token = resp['SessionToken']
|
1033
1139
|
end
|
1034
1140
|
|
1141
|
+
def create_citation_token
|
1142
|
+
resp = do_request(:get, path: @config[:create_session_url] +
|
1143
|
+
'?profile=' + @profile + '&guest=n&displaydatabasename=y')
|
1144
|
+
@citation_token = resp['SessionToken']
|
1145
|
+
end
|
1146
|
+
|
1035
1147
|
# helper methods
|
1036
1148
|
def blank?(var)
|
1037
1149
|
var.nil? || var.respond_to?(:length) && var.empty?
|
data/lib/ebsco/eds/version.rb
CHANGED
@@ -19,7 +19,7 @@ module Faraday
|
|
19
19
|
|
20
20
|
initialize_store
|
21
21
|
|
22
|
-
@cacheable_paths = %w(/edsapi/rest/Info /authservice/rest/uidauth /authservice/rest/uidauth /edsapi/rest/Retrieve? /edsapi/rest/Search?)
|
22
|
+
@cacheable_paths = %w(/edsapi/rest/Info /authservice/rest/uidauth /authservice/rest/uidauth /edsapi/rest/Retrieve? /edsapi/rest/Search? /edsapi/rest/ExportFormat /edsapi/rest/CitationStyles)
|
23
23
|
|
24
24
|
end
|
25
25
|
|
@@ -70,6 +70,16 @@ module Faraday
|
|
70
70
|
info "#{uri} - Setting custom expires: #{custom_expires_in}"
|
71
71
|
end
|
72
72
|
|
73
|
+
if uri.request_uri.include?('/edsapi/rest/ExportFormat')
|
74
|
+
custom_expires_in = 86400 # 24 hours
|
75
|
+
info "#{uri} - Setting custom expires: #{custom_expires_in}"
|
76
|
+
end
|
77
|
+
|
78
|
+
if uri.request_uri.include?('/edsapi/rest/CitationStyles')
|
79
|
+
custom_expires_in = 86400 # 24 hours
|
80
|
+
info "#{uri} - Setting custom expires: #{custom_expires_in}"
|
81
|
+
end
|
82
|
+
|
73
83
|
@store.write(key(env), env, expires_in: custom_expires_in)
|
74
84
|
end
|
75
85
|
|
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: 1.0.
|
4
|
+
version: 1.0.1
|
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: 2018-
|
12
|
+
date: 2018-10-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -368,6 +368,7 @@ files:
|
|
368
368
|
- ".gitignore"
|
369
369
|
- ".rubocop.yml"
|
370
370
|
- ".travis.yml"
|
371
|
+
- CHANGELOG.md
|
371
372
|
- Gemfile
|
372
373
|
- LICENSE.txt
|
373
374
|
- README.md
|
@@ -376,6 +377,7 @@ files:
|
|
376
377
|
- bin/setup
|
377
378
|
- ebsco-eds.gemspec
|
378
379
|
- lib/ebsco/eds.rb
|
380
|
+
- lib/ebsco/eds/citations.rb
|
379
381
|
- lib/ebsco/eds/configuration.rb
|
380
382
|
- lib/ebsco/eds/csl/styles/apa.csl
|
381
383
|
- lib/ebsco/eds/csl/styles/chicago-author-date.csl
|
@@ -412,7 +414,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
412
414
|
version: '0'
|
413
415
|
requirements: []
|
414
416
|
rubyforge_project:
|
415
|
-
rubygems_version: 2.
|
417
|
+
rubygems_version: 2.5.2.3
|
416
418
|
signing_key:
|
417
419
|
specification_version: 4
|
418
420
|
summary: 'Summary: EBSCO EDS API'
|