ebsco-eds 0.3.9.pre → 0.3.10.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88c36614b1fbb632bebaf7a434361448bfe8f10c
4
- data.tar.gz: defab014eb6c9d3981645d0a8043a6d50da4b01f
3
+ metadata.gz: d7cb58338dd3b45c9b2413aef42f374c017133d1
4
+ data.tar.gz: 9758d4f58edac9420f206cd39bbddf3f89ad0e62
5
5
  SHA512:
6
- metadata.gz: 1516d8eea3b331946a0981e2f49e85790ff0ff23dd0cfaa8fabaa404b203c04bc65e06c0a9f711cccca9431c3a5fecb07bc094932d2ddde31d377e27a49ef019
7
- data.tar.gz: acd0f9937320e66135b1904c3d00e05c9ae5ad2a35572fe2c8fa053de0f3f9676d9d9de28eef486e80acb0f0a493b343ce2f975230577fe8bdccac5b06886596
6
+ metadata.gz: 6ceffcd8ae42678e12cad2302a7e667e5b2bde94b960d8dea7b841a3d44ec88fec65869b5ab5d597df7a030e7786c4357da0aa35007322dfffabbd91d16268b2
7
+ data.tar.gz: ebadaa47d521204c0c7090fbd111de0da7605084b55d3591b1906c68a5e655e8155ebd63e277bfbeaa3ba79bd87f243430913b3295998a3c15976c8a5a13bcb4
data/ebsco-eds.gemspec CHANGED
@@ -45,6 +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
49
 
49
50
  spec.add_development_dependency 'bundler', '~> 1.13'
50
51
  spec.add_development_dependency 'rake', '~> 12.0'
@@ -37,7 +37,8 @@ module EBSCO
37
37
  :timeout => 60,
38
38
  :open_timeout => 12,
39
39
  :max_page_jumps => 6,
40
- :max_page_jump_attempts => 10
40
+ :max_page_jump_attempts => 10,
41
+ :recover_from_bad_source_type => false
41
42
  }
42
43
  @valid_config_keys = @config.keys
43
44
  end
@@ -1,6 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'json'
3
3
  require 'cgi'
4
+ require 'sanitize'
4
5
 
5
6
  module EBSCO
6
7
 
@@ -750,7 +751,7 @@ module EBSCO
750
751
  if _item_property.nil?
751
752
  nil
752
753
  else
753
- CGI.unescapeHTML(_item_property['Data'])
754
+ sanitize_data(_item_property['Data'])
754
755
  end
755
756
  end
756
757
  end
@@ -764,11 +765,23 @@ module EBSCO
764
765
  if _item_property.nil?
765
766
  nil
766
767
  else
767
- CGI.unescapeHTML(_item_property['Data'])
768
+ sanitize_data(_item_property['Data'])
768
769
  end
769
770
  end
770
771
  end
771
772
 
773
+ # sanitize html, allow custom links
774
+ def sanitize_data(data)
775
+ html = CGI.unescapeHTML(data.to_s)
776
+ sanitize_config = Sanitize::Config.merge(Sanitize::Config::RELAXED,
777
+ :elements => Sanitize::Config::RELAXED[:elements] + ['relatesto', 'searchlink'],
778
+ :attributes => Sanitize::Config::RELAXED[:attributes].merge(
779
+ 'searchlink' => ['fieldcode', 'term']
780
+ )
781
+ )
782
+ Sanitize.fragment(html, sanitize_config)
783
+ end
784
+
772
785
  # dynamically add item metadata as 'eds_extra_ItemNameOrLabel'
773
786
  def add_extra_item_accessors(item)
774
787
  key = item['Name'] ? item['Name'].gsub(/\s+/, '_') : item['Label'].gsub(/\s+/, '_')
@@ -133,6 +133,14 @@ module EBSCO
133
133
 
134
134
  (ENV.has_key? 'EDS_HOSTS') ? @api_hosts_list = ENV['EDS_HOSTS'].split(',') : @api_hosts_list = @config[:api_hosts_list]
135
135
 
136
+ (ENV.has_key? 'EDS_RECOVER_FROM_BAD_SOURCE_TYPE') ?
137
+ if %w(y Y yes Yes true True).include?(ENV['EDS_RECOVER_FROM_BAD_SOURCE_TYPE'])
138
+ @recover_130 = true
139
+ else
140
+ @recover_130 = false
141
+ end :
142
+ @recover_130 = @config[:recover_from_bad_source_type]
143
+
136
144
  # use cache for auth token, info, search and retrieve calls?
137
145
  if @use_cache
138
146
  cache_dir = File.join(@cache_dir, 'faraday_eds_cache')
@@ -796,29 +804,32 @@ module EBSCO
796
804
  end
797
805
 
798
806
  # invalid source type, attempt to recover gracefully
799
- # when '130'
800
- # bad_source_type = e.fault[:error_body]['DetailedErrorDescription']
801
- # bad_source_type.gsub!(/Value Provided\s+/, '')
802
- # bad_source_type.gsub!(/\.\s*$/, '')
803
- # new_actions = []
804
- # payload.Actions.each { |action|
805
- # if action.start_with?('addfacetfilter(SourceType:')
806
- # if bad_source_type.nil?
807
- # # skip the source type since we don't know if it's bad or not
808
- # else
809
- # if !action.include?('SourceType:'+bad_source_type+')')
810
- # # not a bad source type, keep it
811
- # new_actions >> action
812
- # end
813
- # end
814
- # else
815
- # # not a source type action, add it
816
- # new_actions << action
817
- # end
818
- # }
819
- # payload.Actions = new_actions
820
- # do_request(method, path: path, payload: payload, attempt: attempt+1)
821
-
807
+ when '130'
808
+ if @recover_130
809
+ bad_source_type = e.fault[:error_body]['DetailedErrorDescription']
810
+ bad_source_type.gsub!(/Value Provided\s+/, '')
811
+ bad_source_type.gsub!(/\.\s*$/, '')
812
+ new_actions = []
813
+ payload.Actions.each { |action|
814
+ if action.downcase.start_with?('addfacetfilter(sourcetype:')
815
+ if bad_source_type.nil?
816
+ # skip the source type since we don't know if it's bad or not
817
+ else
818
+ if !action.include?('SourceType:'+bad_source_type+')')
819
+ # not a bad source type, keep it
820
+ new_actions >> action
821
+ end
822
+ end
823
+ else
824
+ # not a source type action, add it
825
+ new_actions << action
826
+ end
827
+ }
828
+ payload.Actions = new_actions
829
+ do_request(method, path: path, payload: payload, attempt: attempt+1)
830
+ else
831
+ raise e
832
+ end
822
833
 
823
834
  else
824
835
  raise e
@@ -1,5 +1,5 @@
1
1
  module EBSCO
2
2
  module EDS
3
- VERSION = '0.3.9.pre'
3
+ VERSION = '0.3.10.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.9.pre
4
+ version: 0.3.10.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-05 00:00:00.000000000 Z
12
+ date: 2017-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -225,6 +225,20 @@ dependencies:
225
225
  - - "~>"
226
226
  - !ruby/object:Gem::Version
227
227
  version: '2.9'
228
+ - !ruby/object:Gem::Dependency
229
+ name: sanitize
230
+ requirement: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - "~>"
233
+ - !ruby/object:Gem::Version
234
+ version: 4.5.0
235
+ type: :runtime
236
+ prerelease: false
237
+ version_requirements: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - "~>"
240
+ - !ruby/object:Gem::Version
241
+ version: 4.5.0
228
242
  - !ruby/object:Gem::Dependency
229
243
  name: bundler
230
244
  requirement: !ruby/object:Gem::Requirement