module QldlibrarySearch
Public Instance Methods
Source
# File lib/qldlibrary_search.rb, line 56 def clean_field(value) text = value.to_s text = text.gsub(/\$\$Q/, " — ") text = text.gsub(/\$\$[A-Z]/, " ") TextUtil.squish(text) end
Source
# File lib/qldlibrary_search.rb, line 107 def default_fetch lambda do |url| RabbotHttp.fetch(url, user_agent: QldlibraryConfig::USER_AGENT) end end
Source
# File lib/qldlibrary_search.rb, line 113 def fetch_json(url, fetch: nil) body = (fetch || default_fetch).call(url) JSON.parse(body) end
Source
# File lib/qldlibrary_search.rb, line 63 def first_field(values) clean_field(Array(values).first) end
Source
# File lib/qldlibrary_search.rb, line 135 def lookup(query, fetch: nil) SearchLookup.format(search(query, fetch: fetch), report: QldlibraryReport) end
Source
# File lib/qldlibrary_search.rb, line 71 def parse_doc(doc) pnx = doc.fetch("pnx", {}) display = pnx.fetch("display", {}) control = pnx.fetch("control", {}) addata = pnx.fetch("addata", {}) record_id = first_field(control["recordid"]) context = doc["context"].to_s.strip context = "L" if context.empty? title = first_field(display["title"]) creator = first_field(display["creator"]) type = first_field(display["type"]) date = first_field(display["creationdate"]) date = first_field(addata["date"]) if date.empty? { title: title, creator: creator, type: type, date: date, record_id: record_id, context: context, url: record_id.empty? ? "" : record_url(record_id: record_id, context: context) } end
Source
# File lib/qldlibrary_search.rb, line 26 def parse_query(text) SearchQuery.parse(text, max_length: QldlibraryConfig::MAX_QUERY_LENGTH) end
Source
# File lib/qldlibrary_search.rb, line 98 def parse_results(payload) data = payload.is_a?(String) ? JSON.parse(payload) : payload info = data.fetch("info", {}) total = info["total"] || info["totalResultsLocal"] || 0 items = Array(data["docs"]).map { |doc| parse_doc(doc) }.reject { |row| row[:title].empty? } { total: total.to_i, items: items } end
Source
# File lib/qldlibrary_search.rb, line 44 def record_url(record_id:, context: "L") params = { docid: record_id, context: context, vid: QldlibraryConfig::VID, tab: QldlibraryConfig::TAB, search_scope: QldlibraryConfig::SCOPE, lang: QldlibraryConfig::LANG } "#{QldlibraryConfig::DISPLAY_BASE}?#{URI.encode_www_form(params)}" end
Source
# File lib/qldlibrary_search.rb, line 118 def search(query, fetch: nil, limit: QldlibraryConfig::MAX_RESULTS) parsed = parse_query(query) return { error: :usage } if parsed[:empty] url = search_url(parsed[:query], limit: limit) payload = fetch_json(url, fetch: fetch) results = parse_results(payload) { query: parsed[:query], total: results[:total], items: results[:items] } rescue StandardError { error: :fetch, query: parsed&.dig(:query) || query.to_s.strip } end
Source
# File lib/qldlibrary_search.rb, line 30 def search_url(query, limit: QldlibraryConfig::MAX_RESULTS, offset: 0) params = { vid: QldlibraryConfig::VID, tab: QldlibraryConfig::TAB, scope: QldlibraryConfig::SCOPE, q: "any,contains,#{query}", offset: offset, limit: limit, lang: QldlibraryConfig::LANG, pcAvailability: "false" } "#{QldlibraryConfig::SEARCH_BASE}?#{URI.encode_www_form(params)}" end
Source
# File lib/qldlibrary_search.rb, line 67 def truncate_text(text, max_length) TextUtil.truncate(text, max_length) end
Source
# File lib/qldlibrary_search.rb, line 22 def usage_message "Usage: !qldlibrary <query> — search SLQ collections via One Search" end