europeana-blacklight 0.3.2 → 0.3.3

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: d892f236445610a975019d0aed2ff675ad0801f4
4
- data.tar.gz: 8d65e30ff5da21e187c64999a25fed6f2a29d225
3
+ metadata.gz: 9c009d6e64d47908e4814d19edf92c58764e208e
4
+ data.tar.gz: dae88754b44e1fabf5ba8dd7731559c4aa3fef18
5
5
  SHA512:
6
- metadata.gz: 8a72fc7996052249b3ada8dee2421b22d3969cd51f927db36441c8909f847fc52100c89a02903fdd48a4eb576bdbb7f9a4ce3d02202088e0a7158b7af1e2156f
7
- data.tar.gz: 9b7142747a9b6687dfc1f11b6343490bf113119b6d949108d09a421317907a5864a7cb906270fc71b684ff94c89454d16d9be840825d1ad4f7ebe7f2f2f48c6e
6
+ metadata.gz: 8795c06e1000dc9af5538daca798639ccf323db798aa08a2f3708ffc81fb77f390ae929cbe7b74f70a9f1ebf6bd9f1a9593090cc2a7c7a7c65d6aabe17e01cbf
7
+ data.tar.gz: b93869c448d02abb45e6cc847bcf65c630988a62a5c261b9d9006ea9afc77bfe680d50de7d106787e5669e3dd39f181e52d809df0c2a0b8f8cc12c3fd210672b
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = '>= 2.0.0'
22
22
 
23
23
  spec.add_dependency 'activesupport', '>= 4.0', '< 5.0'
24
- spec.add_dependency 'blacklight', '>= 5.12.0', '< 5.16.0'
24
+ spec.add_dependency 'blacklight', '>= 5.12.0', '< 6.0'
25
25
  spec.add_dependency 'europeana-api', '~> 0.4.1'
26
26
  spec.add_dependency 'iso-639', '~> 0.2.5'
27
27
  spec.add_dependency 'kaminari', '~> 0.16'
@@ -7,59 +7,20 @@ module Europeana
7
7
  ##
8
8
  # A Europeana document
9
9
  class Document
10
+ autoload :LangMaps, 'europeana/blacklight/document/lang_maps'
10
11
  autoload :MoreLikeThis, 'europeana/blacklight/document/more_like_this'
11
12
  autoload :Relations, 'europeana/blacklight/document/relations'
12
13
 
13
14
  include ActiveModel::Conversion
14
15
  include ::Blacklight::Document
15
16
  include ::Blacklight::Document::ActiveModelShim
17
+ include LangMaps
16
18
  include MoreLikeThis
17
19
  include Relations
18
20
 
19
21
  attr_writer :provider_id, :record_id
20
22
 
21
23
  class << self
22
- # @todo Are three-letter language codes valid in EDM?
23
- # @todo Empty key acceptance is a workaround for malformed API data
24
- # output; remove when fixed at source
25
- def lang_map?(obj)
26
- return false unless obj.is_a?(Hash)
27
- obj.keys.map(&:to_s).all? { |key| known_lang_map_key?(key) }
28
- end
29
-
30
- def known_lang_map_key?(key)
31
- key = key.dup.downcase
32
- ['def', '', 'sh'].include?(key) || (!ISO_639.find(key.split('-').first).nil?)
33
- end
34
-
35
- def localize_lang_map(lang_map)
36
- if lang_map.is_a?(Array)
37
- return lang_map.map { |l| localize_lang_map(l) }
38
- end
39
-
40
- return lang_map unless lang_map?(lang_map)
41
-
42
- lang_map_value(lang_map, I18n.locale.to_s) ||
43
- lang_map_value(lang_map, I18n.default_locale.to_s) ||
44
- lang_map[:def] ||
45
- lang_map.values
46
- end
47
-
48
- def lang_map_value(lang_map, locale)
49
- iso_locale = ISO_639.find(locale)
50
- return nil unless lang_map.key?(iso_locale.alpha2) || lang_map.key?(iso_locale.alpha3)
51
-
52
- alpha2 = lang_map[iso_locale.alpha2]
53
- alpha3 = lang_map[iso_locale.alpha3]
54
- if alpha2 && alpha3
55
- [alpha2, alpha3].flatten
56
- elsif alpha2
57
- alpha2
58
- else
59
- alpha3
60
- end
61
- end
62
-
63
24
  def model_name
64
25
  @_model_name ||= begin
65
26
  ActiveModel::Name.new(self, nil, 'Document')
@@ -67,8 +28,6 @@ module Europeana
67
28
  end
68
29
  end
69
30
 
70
- delegate :lang_map?, :localize_lang_map, to: :class
71
-
72
31
  def initialize(source_doc = {}, response = nil)
73
32
  fields, @relations = extract_relations(source_doc)
74
33
  super(fields, response)
@@ -0,0 +1,65 @@
1
+ module Europeana
2
+ module Blacklight
3
+ class Document
4
+ ##
5
+ # Methods for working with "LangMap" data types in API JSON responses
6
+ # @see http://labs.europeana.eu/api/getting-started#datatypes
7
+ module LangMaps
8
+ extend ActiveSupport::Concern
9
+
10
+ # @see https://www.loc.gov/standards/iso639-2/php/code_changes.php
11
+ DEPRECATED_ISO_LANG_CODES = %w(in iw jaw ji jw mo mol scc scr sh)
12
+
13
+ # Special keys API may return in a LangMap, not ISO codes
14
+ # @todo Empty key acceptance is a workaround for malformed API data
15
+ # output; remove when fixed at source
16
+ NON_ISO_LANG_CODES = ['def', '']
17
+
18
+ class_methods do
19
+ # @todo Are three-letter language codes valid in EDM?
20
+ def lang_map?(obj)
21
+ return false unless obj.is_a?(Hash)
22
+ obj.keys.map(&:to_s).all? { |key| known_lang_map_key?(key) }
23
+ end
24
+
25
+ def known_lang_map_key?(key)
26
+ key = key.dup.downcase
27
+ DEPRECATED_ISO_LANG_CODES.include?(key) ||
28
+ NON_ISO_LANG_CODES.include?(key) ||
29
+ (!ISO_639.find(key.split('-').first).nil?)
30
+ end
31
+
32
+ def localize_lang_map(lang_map)
33
+ if lang_map.is_a?(Array)
34
+ return lang_map.map { |l| localize_lang_map(l) }
35
+ end
36
+
37
+ return lang_map unless lang_map?(lang_map)
38
+
39
+ lang_map_value(lang_map, I18n.locale.to_s) ||
40
+ lang_map_value(lang_map, I18n.default_locale.to_s) ||
41
+ lang_map[:def] ||
42
+ lang_map.values
43
+ end
44
+
45
+ def lang_map_value(lang_map, locale)
46
+ iso_locale = ISO_639.find(locale)
47
+ return nil unless lang_map.key?(iso_locale.alpha2) || lang_map.key?(iso_locale.alpha3)
48
+
49
+ alpha2 = lang_map[iso_locale.alpha2]
50
+ alpha3 = lang_map[iso_locale.alpha3]
51
+ if alpha2 && alpha3
52
+ [alpha2, alpha3].flatten
53
+ elsif alpha2
54
+ alpha2
55
+ else
56
+ alpha3
57
+ end
58
+ end
59
+ end
60
+
61
+ delegate :lang_map?, :localize_lang_map, to: :class
62
+ end
63
+ end
64
+ end
65
+ end
@@ -26,7 +26,7 @@ module Europeana
26
26
 
27
27
  def more_like_this_field_terms(*fields)
28
28
  fields.flatten.map do |field|
29
- fetch(field, []).compact
29
+ fetch(field, []).compact[0..9]
30
30
  end.flatten
31
31
  end
32
32
 
@@ -42,7 +42,11 @@ module Europeana
42
42
 
43
43
  def more_like_this_param_query(param, terms, boost)
44
44
  return nil unless terms.present?
45
- or_terms = terms.map do |v|
45
+
46
+ string_terms = terms.select { |t| t.is_a?(String) }
47
+ return nil unless string_terms.present?
48
+
49
+ or_terms = string_terms.map do |v|
46
50
  '"' + Europeana::API::Search.escape(v) + '"'
47
51
  end.join(' OR ')
48
52
  "#{param}: (#{or_terms})^#{boost}"
@@ -99,15 +99,16 @@ module Europeana
99
99
  salient_facets.each_pair do |facet_field, value_list|
100
100
  Array(value_list).reject(&:blank?).each do |value|
101
101
  api_parameters[:qf] ||= []
102
- if Europeana::API::Search::Fields::MEDIA.include?(facet_field)
103
- api_parameters[:qf] << "#{facet_field}:#{value}"
104
- else
105
- api_parameters[:qf] << "#{facet_field}:\"#{value}\""
106
- end
102
+ api_parameters[:qf] << "#{facet_field}:" + quote_facet_value(facet_field, value)
107
103
  end
108
104
  end
109
105
  end
110
106
 
107
+ def quote_facet_value(facet_field, value)
108
+ return value if Europeana::API::Search::Fields::MEDIA.include?(facet_field)
109
+ '"' + value.gsub('"', '\"') + '"'
110
+ end
111
+
111
112
  ##
112
113
  # Filter results by a query facet
113
114
  def add_query_facet_to_api(_api_parameters)
@@ -173,8 +174,17 @@ module Europeana
173
174
  ##
174
175
  # Europeana API start param counts from 1
175
176
  def start(start = nil)
176
- super_start = super
177
- super_start == self ? super_start : super_start + 1
177
+ if start
178
+ params_will_change!
179
+ @start = start.to_i
180
+ self
181
+ else
182
+ @start ||= (page - 1) * (rows || 10) + 1
183
+
184
+ val = @start || 1
185
+ val = 1 if @start < 1
186
+ val
187
+ end
178
188
  end
179
189
 
180
190
  protected
@@ -3,14 +3,16 @@ module Europeana
3
3
  ##
4
4
  # Local overrides for {Blacklight::SearchHelper}
5
5
  module SearchHelper
6
+ # index arg counts from 0; API start param counts from 1
6
7
  def previous_and_next_document_params(index, window = 1)
8
+ start = index + 1
7
9
  api_params = {}
8
10
 
9
- if index > 1
10
- api_params[:start] = index - window # get one before
11
+ if start > 1
12
+ api_params[:start] = start - window # get one before
11
13
  api_params[:rows] = 2 * window + 1 # and one after
12
14
  else
13
- api_params[:start] = 1 # there is no previous doc
15
+ api_params[:start] = start # there is no previous doc
14
16
  api_params[:rows] = 2 * window # but there should be one after
15
17
  end
16
18
 
@@ -1,5 +1,5 @@
1
1
  module Europeana
2
2
  module Blacklight
3
- VERSION = '0.3.2'
3
+ VERSION = '0.3.3'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: europeana-blacklight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Doe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-14 00:00:00.000000000 Z
11
+ date: 2016-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: 5.12.0
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: 5.16.0
42
+ version: '6.0'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: 5.12.0
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: 5.16.0
52
+ version: '6.0'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: europeana-api
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -187,6 +187,7 @@ files:
187
187
  - lib/europeana/blacklight.rb
188
188
  - lib/europeana/blacklight/api_repository.rb
189
189
  - lib/europeana/blacklight/document.rb
190
+ - lib/europeana/blacklight/document/lang_maps.rb
190
191
  - lib/europeana/blacklight/document/more_like_this.rb
191
192
  - lib/europeana/blacklight/document/relations.rb
192
193
  - lib/europeana/blacklight/document_presenter.rb