Class: Qa::Authorities::LinkedData::SearchConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/qa/authorities/linked_data/config/search_config.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ SearchConfig

Returns a new instance of SearchConfig.

Parameters:

  • config (Hash)

    the search portion of the config



9
10
11
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 9

def initialize(config)
  @search_config = config
end

Instance Method Details

#languageString

Return the preferred language for literal value selection for search query. Only applies if the authority provides language encoded literals.

Returns:

  • (String)

    the configured language for search query



47
48
49
50
51
52
53
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 47

def language
  return @language unless @language.nil?
  lang = search_config[:language]
  return nil if lang.nil?
  lang = [lang] if lang.is_a? String
  @language = lang.collect(&:to_sym)
end

#qa_replacement_encoded?(pattern_key) ⇒ Boolean

Should the replacement pattern be encoded?

Returns:

  • (Boolean)

    true, if the pattern should be encoded; otherwise, false



100
101
102
103
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 100

def qa_replacement_encoded?(pattern_key)
  map_key = qa_replacement_patterns[pattern_key].to_sym
  replacement_encoded? map_key
end

#qa_replacement_patternsHash

Return parameters that are required for QA api

Returns:

  • (Hash)

    the configured search url parameter mappings



94
95
96
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 94

def qa_replacement_patterns
  search_config.fetch(:qa_replacement_patterns)
end

#replacement_countInteger

Return the number of possible replacement values to make in the search URL

Returns:

  • (Integer)

    the configured number of possible replacements in the search url



120
121
122
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 120

def replacement_count
  replacements.size
end

#replacement_encoded?(map_key) ⇒ True|False

Should the replacement parameter be encoded?

Returns:

  • (True|False)

    true if the replacement parameter should be encoded; otherwise, false



113
114
115
116
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 113

def replacement_encoded?(map_key)
  return false unless url_mappings[map_key].key? :encode
  url_mappings[map_key][:encode]
end

#replacementsHash

Return the replacement configurations

Returns:

  • (Hash)

    the configurations for search url replacements



126
127
128
129
130
131
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 126

def replacements
  return @replacements unless @replacements.nil?
  @replacements = {}
  @replacements = url_mappings.select { |k, _v| !qa_replacement_patterns.include?(k) } unless search_config.nil? || url_mappings.nil?
  @replacements
end

#replacements?True|False

Are there replacement parameters configured for search query?

Returns:

  • (True|False)

    true if there are replacement parameters configured for search query; otherwise, false



107
108
109
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 107

def replacements?
  replacement_count.positive?
end

#resultsHash, NilClass

Return results predicates if specified

Returns:

  • (Hash, NilClass)

    all the configured predicates to pull out of the results



57
58
59
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 57

def results
  search_config[:results]
end

#results_altlabel_predicateString

Return results altlabel_predicate

Returns:

  • (String)

    the configured predicate to use to extract altlabel values from the results



75
76
77
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 75

def results_altlabel_predicate
  Config.predicate_uri(results, :altlabel_predicate)
end

#results_id_predicateString

Return results id_predicate

Returns:

  • (String)

    the configured predicate to use to extract the id from the results



63
64
65
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 63

def results_id_predicate
  Config.predicate_uri(results, :id_predicate)
end

#results_label_predicateString

Return results label_predicate

Returns:

  • (String)

    the configured predicate to use to extract label values from the results



69
70
71
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 69

def results_label_predicate
  Config.predicate_uri(results, :label_predicate)
end

#results_sort_predicateString

Return results sort_predicate

Returns:

  • (String)

    the configured predicate to use for sorting results from the query search



88
89
90
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 88

def results_sort_predicate
  Config.predicate_uri(results, :sort_predicate)
end

#subauthoritiesHash

Return the list of subauthorities for search query

Returns:

  • (Hash)

    the configurations for search url replacements



154
155
156
157
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 154

def subauthorities
  @subauthorities ||= {} if search_config.nil? || !(search_config.key? :subauthorities)
  @subauthorities ||= search_config.fetch(:subauthorities)
end

#subauthorities?True|False

Are there subauthorities configured for search query?

Returns:

  • (True|False)

    true if there are subauthorities configured for search query; otherwise, false



135
136
137
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 135

def subauthorities?
  subauthority_count.positive?
end

#subauthority?(subauth_name) ⇒ True|False

Is a specific subauthority configured for search query?

Returns:

  • (True|False)

    true if the specified subauthority is configured for search query; otherwise, false



141
142
143
144
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 141

def subauthority?(subauth_name)
  subauth_name = subauth_name.to_sym if subauth_name.is_a? String
  subauthorities.key? subauth_name
end

#subauthority_countInteger

Return the number of subauthorities defined for search query

Returns:

  • (Integer)

    the number of subauthorities defined for search query



148
149
150
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 148

def subauthority_count
  subauthorities.size
end

#subauthority_replacement_patternHash

Return the replacement configurations

Returns:

  • (Hash)

    the configurations for search url replacements



161
162
163
164
165
166
167
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 161

def subauthority_replacement_pattern
  return {} unless subauthorities?
  @subauthority_replacement_pattern ||= {} if search_config.nil? || !subauthorities?
  pattern = qa_replacement_patterns[:subauth]
  default = url_mappings[pattern.to_sym][:default]
  @subauthority_replacement_pattern ||= { pattern: pattern, default: default }
end

#supports_search?Boolean

Does this authority configuration have search defined?

Returns:

  • (Boolean)

    true if search is configured; otherwise, false



18
19
20
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 18

def supports_search?
  search_config.present?
end

#supports_sort?True|False

Does this authority configuration support sorting of search results?

Returns:

  • (True|False)

    true if sorting of search results is supported; otherwise, false



81
82
83
84
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 81

def supports_sort?
  return true unless results_sort_predicate.nil? || !results_sort_predicate.size.positive?
  false
end

#urlHash, NilClass

Return search url encoding defined in the configuration for this authority if it was provided

Returns:

  • (Hash, NilClass)

    the configured search url



25
26
27
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 25

def url
  search_config[:url]
end

#url_mappingsHash

Return search url parameter mapping defined in the configuration for this authority.

Returns:

  • (Hash)

    the configured search url parameter mappings with variable name as key



37
38
39
40
41
42
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 37

def url_mappings
  return @url_mappings unless @url_mappings.nil?
  mappings = Config.config_value(url, :mapping)
  return {} if mappings.nil?
  Hash[*mappings.collect { |m| [m[:variable].to_sym, m] }.flatten]
end

#url_templateString

Return search url template defined in the configuration for this authority.

Returns:

  • (String)

    the configured search url template



31
32
33
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 31

def url_template
  url.fetch(:template)
end

#url_with_replacements(query, sub_auth = nil, search_replacements = {}) ⇒ String

Build a linked data authority search url

Parameters:

  • the (String)

    query

  • (optional) (String)

    subauthority key

  • (optional) (Hash)

    replacement values with { pattern_name (defined in YAML config) => value }

Returns:

  • (String)

    the search encoded url



174
175
176
177
178
179
180
181
# File 'lib/qa/authorities/linked_data/config/search_config.rb', line 174

def url_with_replacements(query, sub_auth = nil, search_replacements = {})
  return nil unless supports_search?
  sub_auth = sub_auth.to_sym if sub_auth.present?
  url = Config.replace_pattern(url_template, qa_replacement_patterns[:query], query, qa_replacement_encoded?(:query))
  url = Config.process_subauthority(url, subauthority_replacement_pattern, subauthorities, sub_auth) if subauthorities?
  url = Config.apply_replacements(url, replacements, search_replacements) if replacements?
  url
end