Module: RelatonJis::Bibliography

Extended by:
Bibliography
Included in:
Bibliography
Defined in:
lib/relaton_jis/bibliography.rb

Constant Summary collapse

SOURCE =
"https://webdesk.jsa.or.jp/books/W11M".freeze

Instance Method Summary collapse

Instance Method Details

#get(ref, year = nil, opts = {}) ⇒ RelatonJis::BibliographicItem?

Get JIS document by reference

Parameters:

  • ref (String)

    JIS document reference

  • year (String) (defaults to: nil)

    JIS document year

  • opts (Hash) (defaults to: {})

    options

Options Hash (opts):

  • :all_parts (String)

    return all parts of document

Returns:



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/relaton_jis/bibliography.rb', line 36

def get(ref, year = nil, opts = {}) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
  code = ref.sub(/\s\((all parts|規格群)\)/, "")
  opts[:all_parts] ||= !$1.nil?
  Util.warn "(#{ref}) fetching..."
  hits = search(code, year)
  unless hits
    hint [], ref, year
    return
  end
  result = opts[:all_parts] ? hits.find_all_parts : hits.find
  if result.is_a? RelatonJis::BibliographicItem
    Util.warn "(#{ref}) found `#{result.docidentifier[0].id}`"
    return result
  end
  hint result, ref, year
end

#hint(result, ref, year) ⇒ Object

Log hint message

Parameters:

  • result (Array)

    search result

  • ref (String)

    reference to search

  • year (String, nil)

    year to search



60
61
62
63
64
65
66
67
68
# File 'lib/relaton_jis/bibliography.rb', line 60

def hint(result, ref, year)
  Util.warn "(#{ref}) not found. The identifier must be " \
            "exactly as shown on the webdesk.jsa.or.jp website."
  if result.any?
    Util.warn "(#{ref}) TIP: No match for edition year `#{year}`, " \
              "but matches exist for `#{result.uniq.join('`, `')}`."
  end
  nil
end

#search(code, year = nil) ⇒ RelatonJis::HitCollection

Search JIS by keyword

Parameters:

  • code (String)

    JIS documetnt code

  • year (String, nil) (defaults to: nil)

    JIS document year

Returns:



15
16
17
18
19
20
21
22
23
24
# File 'lib/relaton_jis/bibliography.rb', line 15

def search(code, year = nil)
  agent = Mechanize.new
  resp = agent.post "#{SOURCE}0010/searchByKeyword", search_type: "JIS", keyword: code
  disp = JSON.parse resp.body
  # raise RelatonBib::RequestError, "No results found for #{code}" if disp["disp_screen"].nil?
  return if disp["disp_screen"].nil?

  result = agent.get "#{SOURCE}#{disp['disp_screen']}/index"
  HitCollection.new code, year, result: result.xpath("//div[@class='blockGenaral']")
end