Class: Scopus2

Inherits:
Service show all
Includes:
ActionView::Helpers::SanitizeHelper, MetadataHelper, UmlautHttp
Defined in:
app/service_adaptors/scopus2.rb

Overview

Service adapter plug-in.

PURPOSE: Includes "cited by", "similar articles" and "more by these authors" links from scopus.

LIMTATIONS: You must be a Scopus customer for these links generated to work for your users at all! Off-campus users should be probably going through ezproxy, see the EZProxy plug-in. Must find a match in scopus, naturally. "cited by" will only be included if Scopus has non-0 "cited by" links. But there's no good way to precheck similar/more-by for this, so they are provided blind and may result in 0 hits. You can turn them off if you like, with @include_similar, and @include_more_by_authors. Abstracts are not used because it seems to violate Scopus terms of service to use them.

REGISTERING: Register for a Scopus API key at: http://www.developers.elsevier.com/action/devprojects?pageOrigin=cmsPage&zone=topNavBar Look for "Register a new site" button at the bottom right of the page.

For the second Scopus API, you theoretically need a Scopus "PartnerID" and corresponding "release number", in @partner_id and @scopus_release There's no real easy way to get one. Scopus says:

"To obtain a partner ID or release number, contact your nearest regional
Scopus office. A list of Scopus contacts is available at
http://www.info.scopus.com/contactus/index.shtml"

Bah! But fortunately, using the "partnerID" assigned to the Scopus Json API, 65, seems to work, and is coded here as the default. You could try going with that. When you register a partnerID, you also get a 'salt key', which is currently not used by this code, but @link_salt_key is reserved for it in case added functionality does later.

SCOPUS USEFUL URLS:

api key register: http://www.developers.elsevier.com/action/devprojects?pageOrigin=cmsPage&zone=topNavBar

'content policies' terms of use: http://www.developers.elsevier.com/cms/content-apis

API overview docs: http://www.developers.elsevier.com/cms/content-apis

Various other api docs? Confused myself as to organization here.

Some API recommendations for federated search: http://www.developers.elsevier.com/cms/restful-api-federated-search

Constant Summary

Constants inherited from Service

Service::LinkOutFilterTask, Service::StandardTask

Instance Attribute Summary collapse

Attributes inherited from Service

#group, #name, #priority, #request, #service_id, #status, #task, #url

Instance Method Summary collapse

Methods included from UmlautHttp

#http_fetch, #proxy_like_headers

Methods included from MetadataHelper

#get_doi, #get_epage, #get_gpo_item_nums, #get_identifier, #get_isbn, #get_issn, #get_lccn, #get_month, #get_oclcnum, #get_pmid, #get_search_creator, #get_search_terms, #get_search_title, #get_spage, #get_sudoc, #get_top_level_creator, #get_year, #normalize_lccn, #normalize_title, #raw_search_title, title_is_serial?

Methods included from MarcHelper

#add_856_links, #edition_statement, #get_title, #get_years, #gmd_values, #service_type_for_856, #should_skip_856_link?, #strip_gmd

Methods inherited from Service

#credits, #display_name, #handle_wrapper, #link_out_filter, #preempted_by, required_config_params, #response_url, #translate

Constructor Details

#initialize(config) ⇒ Scopus2

Returns a new instance of Scopus2.



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'app/service_adaptors/scopus2.rb', line 73

def initialize(config)
  #defaults
  @display_name = "Scopus"
  @registered_referer
  @scopus_search_base = 'http://api.elsevier.com/content/search/index:SCOPUS'
  
  @include_cited_by = true
  @include_similar = true
  @include_more_by_authors = true
  @more_by_authors_type = "similar"

  @inward_cited_by_url = "http://www.scopus.com/scopus/inward/citedby.url"
  #@partner_id = "E5wmcMWC"
  @partner_id = 65
  @link_salt_key = nil
  @scopus_release = "R6.0.0"

  # Scopus offers two algorithms for finding similar items.
  # This variable can be:
  # "key" => keyword based similarity 
  # "ref" => reference based similiarity (cites similar refs?) Seems to offer 0 hits quite often, so we use keyword instead. 
  # "aut" => author. More docs by same authors. Incorporated as seperate link usually. 
  @more_like_this_type = "key"
  @inward_more_like_url = "http://www.scopus.com/scopus/inward/mlt.url"
  
  @credits = {
    @display_name => "http://www.scopus.com/home.url"
  }
  
  super(config)
end

Instance Attribute Details

#scopus_search_base ⇒ Object

Returns the value of attribute scopus_search_base.



61
62
63
# File 'app/service_adaptors/scopus2.rb', line 61

def scopus_search_base
  @scopus_search_base
end

Instance Method Details

#check_for_hits(url) ⇒ Object

NOT currently working. Scopus doesn't make this easy. Takes a scopus direct url for which we're not sure if there will be results or not, and requests it and html screen-scrapes to get hit count. (We can conveniently find this just in the html at least). Works for cited_by and more_like_this searches at present. May break if Scopus changes their html title!</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 311</span> <span class='kw'>def</span> <span class='id identifier rubyid_check_for_hits'>check_for_hits</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='rparen'>)</span> <span class='id identifier rubyid_response'>response</span> <span class='op'>=</span> <span class='id identifier rubyid_http_fetch'>http_fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span> <span class='id identifier rubyid_response_html'>response_html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='op'>::</span><span class='const'>HTML</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='rparen'>)</span> <span class='id identifier rubyid_title'>title</span> <span class='op'>=</span> <span class='id identifier rubyid_response_xml'>response_xml</span><span class='period'>.</span><span class='id identifier rubyid_at'>at</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>title</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_inner_text'>inner_text</span> <span class='comment'># title is "X documents" (or 'Documents') if there are hits. </span> <span class='comment'># It's annoyingly "Search Error" if there are either 0 hits, or </span> <span class='comment'># if there was an actual error. So we can't easily log actual </span> <span class='comment'># errors, sorry. </span> <span class='id identifier rubyid_title'>title</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\s*(\d+)?\s+document</span><span class='regexp_end'>/</span></span> <span class='kw'>if</span> <span class='lparen'>(</span> <span class='id identifier rubyid_hits'>hits</span> <span class='op'>=</span> <span class='backref'>$1</span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='id identifier rubyid_hits'>hits</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='kw'>else</span> <span class='kw'>return</span> <span class='int'>0</span> <span class='kw'>end</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="cited_by_url-instance_method"> #<strong>cited_by_url</strong>(result) ⇒ <tt>Object</tt> </h3><script> document.getElementById("cited_by_url-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:cited_by_url">permalink</a>' ); </script> <table class="source_code"> <tr> <td> <pre class="lines"> 290 291 292 293 294 295 296</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 290</span> <span class='kw'>def</span> <span class='id identifier rubyid_cited_by_url'>cited_by_url</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span> <span class='id identifier rubyid_eid'>eid</span> <span class='op'>=</span> <span class='const'>CGI</span><span class='period'>.</span><span class='id identifier rubyid_escape'>escape</span><span class='lparen'>(</span> <span class='id identifier rubyid_eid_from_hit'>eid_from_hit</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span> <span class='rparen'>)</span> <span class='comment'>#return "#{@scopus_cited_by_base}?eid=#{eid}&src=s&origin=recordpage" </span> <span class='comment'># Use the new scopus direct link format! </span> <span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='ivar'>@inward_cited_by_url</span><span class='embexpr_end'>}</span><span class='tstring_content'>?partnerID=</span><span class='embexpr_beg'>#{</span><span class='ivar'>@partner_id</span><span class='embexpr_end'>}</span><span class='tstring_content'>&rel=</span><span class='embexpr_beg'>#{</span><span class='ivar'>@scopus_release</span><span class='embexpr_end'>}</span><span class='tstring_content'>&eid=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_eid'>eid</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='kw'>return</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="eid_from_hit-instance_method"> #<strong>eid_from_hit</strong>(result) ⇒ <tt>Object</tt> </h3><script> document.getElementById("eid_from_hit-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:eid_from_hit">permalink</a>' ); </script> <table class="source_code"> <tr> <td> <pre class="lines"> 286 287 288</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 286</span> <span class='kw'>def</span> <span class='id identifier rubyid_eid_from_hit'>eid_from_hit</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span> <span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>atom:eid/text()</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_xml_namespaces'>xml_namespaces</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="handle-instance_method"> #<strong>handle</strong>(request) ⇒ <tt>Object</tt> </h3><script> document.getElementById("handle-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:handle">permalink</a>' ); </script> <table class="source_code"> <tr> <td> <pre class="lines"> 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 114</span> <span class='kw'>def</span> <span class='id identifier rubyid_handle'>handle</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span> <span class='id identifier rubyid_scopus_query'>scopus_query</span> <span class='op'>=</span> <span class='id identifier rubyid_scopus_query'>scopus_query</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span> <span class='comment'># we can't make a good query, nevermind. </span> <span class='kw'>return</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_dispatched'>dispatched</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_scopus_query'>scopus_query</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='id identifier rubyid_url'>url</span> <span class='op'>=</span> <span class='id identifier rubyid_scopus_url'>scopus_url</span><span class='lparen'>(</span><span class='id identifier rubyid_scopus_query'>scopus_query</span><span class='rparen'>)</span> <span class='comment'># Make the call. </span> <span class='id identifier rubyid_headers'>headers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Accept</span><span class='tstring_end'>"</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>application/xml</span><span class='tstring_end'>"</span></span><span class='rbrace'>}</span> <span class='id identifier rubyid_headers'>headers</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Referer</span><span class='tstring_end'>"</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='ivar'>@registered_referer</span> <span class='kw'>if</span> <span class='ivar'>@registered_referer</span> <span class='id identifier rubyid_response'>response</span> <span class='op'>=</span> <span class='id identifier rubyid_http_fetch'>http_fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='comma'>,</span> <span class='symbol'>:headers</span> <span class='op'>=></span> <span class='id identifier rubyid_headers'>headers</span><span class='comma'>,</span> <span class='symbol'>:raise_on_http_error_code</span> <span class='op'>=></span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>HTTPSuccess</span> <span class='comment'># error, sometimes we have info in XML <service-error> </span> <span class='id identifier rubyid_xml'>xml</span> <span class='op'>=</span> <span class='kw'>begin</span> <span class='const'>Nokogiri</span><span class='op'>::</span><span class='const'>XML</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span><span class='rparen'>)</span> <span class='kw'>rescue</span> <span class='const'>Exception</span> <span class='kw'>nil</span> <span class='kw'>end</span> <span class='id identifier rubyid_code'>code</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_xml'>xml</span> <span class='op'>&&</span> <span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='id identifier rubyid_xml'>xml</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>./service-error</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='id identifier rubyid_code'>code</span> <span class='op'>=</span> <span class='id identifier rubyid_error'>error</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>./status/statusCode</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_error'>error</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>./status/statusText</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='id identifier rubyid_e'>e</span> <span class='op'>=</span> <span class='const'>StandardError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Scopus returned error HTTP status </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_code'>code</span><span class='embexpr_end'>}</span><span class='tstring_content'>: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_code'>code</span><span class='embexpr_end'>}</span><span class='tstring_content'>: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_content'>: scopus query: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_dispatched'>dispatched</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/DispatchedService" title="DispatchedService (class)">DispatchedService</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="/gems/umlaut/DispatchedService#FailedFatal-constant" title="DispatchedService::FailedFatal (constant)">FailedFatal</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='id identifier rubyid_xml'>xml</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='op'>::</span><span class='const'>XML</span><span class='lparen'>(</span><span class='id identifier rubyid_response'>response</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span><span class='rparen'>)</span> <span class='comment'># Take the first hit from scopus's results, hope they relevancy ranked it </span> <span class='comment'># well. For DOI/pmid search, there should ordinarly be only one hit! </span> <span class='id identifier rubyid_first_hit'>first_hit</span> <span class='op'>=</span> <span class='id identifier rubyid_xml'>xml</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>//atom:entry[1]</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_xml_namespaces'>xml_namespaces</span><span class='rparen'>)</span> <span class='comment'># Weirdly, a zero-hit result has one <atom:entry> containing an </span> <span class='comment'># <atom:error> (Sic). Could other kinds of errors be reported that </span> <span class='comment'># way too? Maybe. Better check just in case, ugh. </span> <span class='kw'>if</span> <span class='id identifier rubyid_first_hit'>first_hit</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='id identifier rubyid_first_hit'>first_hit</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>./atom:error</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_xml_namespaces'>xml_namespaces</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='id identifier rubyid_scopus_message'>scopus_message</span> <span class='op'>=</span> <span class='id identifier rubyid_error'>error</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span> <span class='kw'>if</span> <span class='id identifier rubyid_scopus_message'>scopus_message</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Result set was empty</span><span class='tstring_end'>"</span></span> <span class='comment'># Just zero hits, no big deal, but nothing to do. </span> <span class='kw'>return</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_dispatched'>dispatched</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='kw'>else</span> <span class='comment'># real error, log it. </span> <span class='id identifier rubyid_e'>e</span> <span class='op'>=</span> <span class='const'>StandardError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Scopus returned error: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_error'>error</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='embexpr_end'>}</span><span class='tstring_content'>: scopus query: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_dispatched'>dispatched</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/DispatchedService" title="DispatchedService (class)">DispatchedService</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="/gems/umlaut/DispatchedService#FailedFatal-constant" title="DispatchedService::FailedFatal (constant)">FailedFatal</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_first_hit'>first_hit</span> <span class='kw'>if</span> <span class='id identifier rubyid_first_hit'>first_hit</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='id identifier rubyid_first_hit'>first_hit</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>./atom:error</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_xml_namespaces'>xml_namespaces</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='id identifier rubyid_e'>e</span> <span class='op'>=</span> <span class='const'>StandardError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Scopus returned error: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_error'>error</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_dispatched'>dispatched</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/DispatchedService" title="DispatchedService (class)">DispatchedService</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="/gems/umlaut/DispatchedService#FailedFatal-constant" title="DispatchedService::FailedFatal (constant)">FailedFatal</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='ivar'>@include_cited_by</span><span class='rparen'>)</span> <span class='id identifier rubyid_try_add_cited_by_response'>try_add_cited_by_response</span><span class='lparen'>(</span><span class='id identifier rubyid_first_hit'>first_hit</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='ivar'>@include_similar</span><span class='rparen'>)</span> <span class='id identifier rubyid_url'>url</span> <span class='op'>=</span> <span class='id identifier rubyid_more_like_this_url'>more_like_this_url</span><span class='lparen'>(</span><span class='id identifier rubyid_first_hit'>first_hit</span><span class='rparen'>)</span> <span class='comment'># Pre-checking for actual hits not currently working, disabled. </span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>true</span> <span class='op'>||</span> <span class='lparen'>(</span> <span class='id identifier rubyid_hits'>hits</span> <span class='op'>=</span> <span class='id identifier rubyid_check_for_hits'>check_for_hits</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='rparen'>)</span> <span class='rparen'>)</span> <span class='op'>></span> <span class='int'>0</span> <span class='rparen'>)</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_add_service_response'>add_service_response</span><span class='lparen'>(</span> <span class='symbol'>:service</span><span class='op'>=></span><span class='kw'>self</span><span class='comma'>,</span> <span class='symbol'>:display_text</span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_hits'>hits</span><span class='embexpr_end'>}</span><span class='tstring_content'> </span><span class='embexpr_beg'>#{</span><span class='const'><span class='object_link'><a href="/gems/umlaut/ServiceTypeValue" title="ServiceTypeValue (class)">ServiceTypeValue</a></span></span><span class='lbracket'>[</span><span class='symbol'>:similar</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_display_name_pluralize'>display_name_pluralize</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='period'>.</span><span class='id identifier rubyid_capitalize'>capitalize</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='symbol'>:url</span> <span class='op'>=></span> <span class='id identifier rubyid_url'>url</span><span class='comma'>,</span> <span class='symbol'>:service_type_value</span> <span class='op'>=></span> <span class='symbol'>:similar</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='lparen'>(</span> <span class='ivar'>@include_more_by_authors</span><span class='rparen'>)</span> <span class='id identifier rubyid_url'>url</span> <span class='op'>=</span> <span class='id identifier rubyid_more_like_this_url'>more_like_this_url</span><span class='lparen'>(</span><span class='id identifier rubyid_first_hit'>first_hit</span><span class='comma'>,</span> <span class='symbol'>:type</span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>aut</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='comment'># Pre-checking for actual hits not currently working, disabled. </span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>true</span> <span class='op'>||</span> <span class='lparen'>(</span> <span class='id identifier rubyid_hits'>hits</span> <span class='op'>=</span> <span class='id identifier rubyid_check_for_hits'>check_for_hits</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='rparen'>)</span> <span class='rparen'>)</span> <span class='op'>></span> <span class='int'>0</span> <span class='rparen'>)</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_add_service_response'>add_service_response</span><span class='lparen'>(</span> <span class='symbol'>:service</span><span class='op'>=></span><span class='kw'>self</span><span class='comma'>,</span> <span class='symbol'>:display_text</span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_hits'>hits</span><span class='embexpr_end'>}</span><span class='tstring_content'> More from these authors</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='symbol'>:url</span> <span class='op'>=></span> <span class='id identifier rubyid_url'>url</span><span class='comma'>,</span> <span class='symbol'>:service_type_value</span> <span class='op'>=></span> <span class='symbol'>:similar</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='kw'>return</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_dispatched'>dispatched</span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="more_like_this_url-instance_method"> #<strong>more_like_this_url</strong>(result, options = {}) ⇒ <tt>Object</tt> </h3><script> document.getElementById("more_like_this_url-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:more_like_this_url">permalink</a>' ); </script> <table class="source_code"> <tr> <td> <pre class="lines"> 298 299 300 301 302 303</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 298</span> <span class='kw'>def</span> <span class='id identifier rubyid_more_like_this_url'>more_like_this_url</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:type</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='ivar'>@more_like_this_type</span> <span class='id identifier rubyid_eid'>eid</span> <span class='op'>=</span> <span class='const'>CGI</span><span class='period'>.</span><span class='id identifier rubyid_escape'>escape</span> <span class='id identifier rubyid_eid_from_hit'>eid_from_hit</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='ivar'>@inward_more_like_url</span><span class='embexpr_end'>}</span><span class='tstring_content'>?partnerID=</span><span class='embexpr_beg'>#{</span><span class='ivar'>@partner_id</span><span class='embexpr_end'>}</span><span class='tstring_content'>&rel=</span><span class='embexpr_beg'>#{</span><span class='ivar'>@scopus_release</span><span class='embexpr_end'>}</span><span class='tstring_content'>&eid=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_eid'>eid</span><span class='embexpr_end'>}</span><span class='tstring_content'>&mltType=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:type</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="phrase-instance_method"> #<strong>phrase</strong>(str) ⇒ <tt>Object</tt> </h3><script> document.getElementById("phrase-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:phrase">permalink</a>' ); </script> <div class="docstring"> <div class="discussion"> <p>backslash escapes any double quotes, and embeds string in scopus phrase search double quotes. Does NOT uri-escape.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 256 257 258</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 256</span> <span class='kw'>def</span> <span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_str'>str</span><span class='rparen'>)</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>"</span><span class='tstring_end'>'</span></span> <span class='op'>+</span> <span class='id identifier rubyid_str'>str</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>"</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>\\"</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>"</span><span class='tstring_end'>'</span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="scopus_query-instance_method"> #<strong>scopus_query</strong>(request) ⇒ <tt>Object</tt> </h3><script> document.getElementById("scopus_query-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:scopus_query">permalink</a>' ); </script> <div class="docstring"> <div class="discussion"> <p>Returns a scopus advanced search query intended to find the exact known item identified by this citation.</p> <p>NOT uri-escaped yet, make sure to uri-escape before putting it in a uri param!</p> <p>Will try to use DOI or PMID if available. Otherwise will use issn/year/vol/iss/start page if available. In some cases may resort to author/title.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 218</span> <span class='kw'>def</span> <span class='id identifier rubyid_scopus_query'>scopus_query</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_doi'>doi</span> <span class='op'>=</span> <span class='id identifier rubyid_get_doi'>get_doi</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_referent'>referent</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>DOI(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_doi'>doi</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>"</span></span> <span class='kw'>elsif</span> <span class='lparen'>(</span><span class='id identifier rubyid_pmid'>pmid</span> <span class='op'>=</span> <span class='id identifier rubyid_get_pmid'>get_pmid</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_referent'>referent</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>PMID(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_pmid'>pmid</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>"</span></span> <span class='kw'>elsif</span> <span class='lparen'>(</span><span class='id identifier rubyid_isbn'>isbn</span> <span class='op'>=</span> <span class='id identifier rubyid_get_isbn'>get_isbn</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_referent'>referent</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='comment'># I don't think scopus has a lot of ISBN-holding citations, but </span> <span class='comment'># it allows search so we might as well try. </span> <span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>ISBN(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_isbn'>isbn</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>"</span></span> <span class='kw'>else</span> <span class='comment'># Okay, we're going to try to do it on issn/vol/issue/page. </span> <span class='comment'># If we don't have issn, we'll reluctantly use journal title </span> <span class='comment'># (damn you google scholar). </span> <span class='id identifier rubyid_metadata'>metadata</span> <span class='op'>=</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_referent'>referent</span><span class='period'>.</span><span class='id identifier rubyid_metadata'>metadata</span> <span class='id identifier rubyid_issn'>issn</span> <span class='op'>=</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_referent'>referent</span><span class='period'>.</span><span class='id identifier rubyid_issn'>issn</span> <span class='kw'>if</span> <span class='lparen'>(</span> <span class='lparen'>(</span><span class='id identifier rubyid_issn'>issn</span> <span class='op'>||</span> <span class='op'>!</span> <span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>jtitle</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='rparen'>)</span> <span class='op'>&&</span> <span class='op'>!</span> <span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>volume</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&&</span> <span class='op'>!</span> <span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>issue</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&&</span> <span class='op'>!</span> <span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>spage</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='rparen'>)</span> <span class='id identifier rubyid_query'>query</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>VOLUME(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>volume</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>) AND ISSUE(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>issue</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>) AND PAGEFIRST(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>spage</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>) </span><span class='tstring_end'>"</span></span> <span class='kw'>if</span> <span class='lparen'>(</span> <span class='id identifier rubyid_issn'>issn</span> <span class='rparen'>)</span> <span class='id identifier rubyid_query'>query</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'> AND (ISSN(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_issn'>issn</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>) OR EISSN(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_issn'>issn</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>))</span><span class='tstring_end'>"</span></span> <span class='kw'>else</span> <span class='id identifier rubyid_query'>query</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'> AND EXACTSRCTITLE(</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_phrase'>phrase</span><span class='lparen'>(</span><span class='id identifier rubyid_metadata'>metadata</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>jtitle</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span> <span class='kw'>return</span> <span class='id identifier rubyid_query'>query</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="scopus_url-instance_method"> #<strong>scopus_url</strong>(query) ⇒ <tt>Object</tt> </h3><script> document.getElementById("scopus_url-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:scopus_url">permalink</a>' ); </script> <table class="source_code"> <tr> <td> <pre class="lines"> 250 251 252</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 250</span> <span class='kw'>def</span> <span class='id identifier rubyid_scopus_url'>scopus_url</span><span class='lparen'>(</span><span class='id identifier rubyid_query'>query</span><span class='rparen'>)</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='ivar'>@scopus_search_base</span><span class='embexpr_end'>}</span><span class='tstring_content'>?apiKey=</span><span class='embexpr_beg'>#{</span><span class='const'>CGI</span><span class='period'>.</span><span class='id identifier rubyid_escape'>escape</span> <span class='ivar'>@api_key</span><span class='embexpr_end'>}</span><span class='tstring_content'>&query=</span><span class='embexpr_beg'>#{</span><span class='const'>CGI</span><span class='period'>.</span><span class='id identifier rubyid_escape'>escape</span> <span class='id identifier rubyid_query'>query</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="service_types_generated-instance_method"> #<strong>service_types_generated</strong> ⇒ <tt>Object</tt> </h3><script> document.getElementById("service_types_generated-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:service_types_generated">permalink</a>' ); </script> <table class="source_code"> <tr> <td> <pre class="lines"> 63 64 65 66 67 68 69 70 71</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 63</span> <span class='kw'>def</span> <span class='id identifier rubyid_service_types_generated'>service_types_generated</span> <span class='id identifier rubyid_types'>types</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='id identifier rubyid_types'>types</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/ServiceTypeValue" title="ServiceTypeValue (class)">ServiceTypeValue</a></span></span><span class='lbracket'>[</span><span class='symbol'>:cited_by</span><span class='rbracket'>]</span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@include_cited_by</span> <span class='id identifier rubyid_types'>types</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/ServiceTypeValue" title="ServiceTypeValue (class)">ServiceTypeValue</a></span></span><span class='lbracket'>[</span><span class='symbol'>:abstract</span><span class='rbracket'>]</span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@include_abstract</span> <span class='id identifier rubyid_types'>types</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/ServiceTypeValue" title="ServiceTypeValue (class)">ServiceTypeValue</a></span></span><span class='lbracket'>[</span><span class='symbol'>:similar</span><span class='rbracket'>]</span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@include_similar</span> <span class='id identifier rubyid_types'>types</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/ServiceTypeValue" title="ServiceTypeValue (class)">ServiceTypeValue</a></span></span><span class='lbracket'>[</span><span class='ivar'>@more_by_authors_type</span><span class='rbracket'>]</span> <span class='rparen'>)</span> <span class='kw'>if</span> <span class='ivar'>@include_more_by_authors</span> <span class='kw'>return</span> <span class='id identifier rubyid_types'>types</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="try_add_cited_by_response-instance_method"> #<strong>try_add_cited_by_response</strong>(result, request) ⇒ <tt>Object</tt> </h3><script> document.getElementById("try_add_cited_by_response-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:try_add_cited_by_response">permalink</a>' ); </script> <div class="docstring"> <div class="discussion"> <p>Input is a ruby hash that came from the scopus JSON, representing a single hit. We're going to add this as a result.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 262</span> <span class='kw'>def</span> <span class='id identifier rubyid_try_add_cited_by_response'>try_add_cited_by_response</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span> <span class='comment'># While scopus provides an "inwardurl" in the results, this just takes </span> <span class='comment'># us to the record detail page. We actually want to go RIGHT to the </span> <span class='comment'># list of cited-by items. So we create our own, based on Scopus's </span> <span class='comment'># reversed engineered predictable URLs. </span> <span class='id identifier rubyid_count_str'>count_str</span> <span class='op'>=</span> <span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_at_xpath'>at_xpath</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>atom:citedby-count/text()</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_xml_namespaces'>xml_namespaces</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='id identifier rubyid_count_i'>count_i</span> <span class='op'>=</span> <span class='id identifier rubyid_count_str'>count_str</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_count_i'>count_i</span> <span class='op'><</span> <span class='int'>1</span> <span class='id identifier rubyid_label'>label</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/ServiceTypeValue" title="ServiceTypeValue (class)">ServiceTypeValue</a></span></span><span class='lbracket'>[</span><span class='symbol'>:cited_by</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_display_name_pluralize'>display_name_pluralize</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='period'>.</span><span class='id identifier rubyid_capitalize'>capitalize</span> <span class='kw'>if</span> <span class='id identifier rubyid_count_i'>count_i</span> <span class='op'>==</span> <span class='int'>1</span> <span class='id identifier rubyid_label'>label</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="/gems/umlaut/ServiceTypeValue" title="ServiceTypeValue (class)">ServiceTypeValue</a></span></span><span class='lbracket'>[</span><span class='symbol'>:cited_by</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_display_name'>display_name</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='period'>.</span><span class='id identifier rubyid_capitalize'>capitalize</span> <span class='kw'>end</span> <span class='id identifier rubyid_cited_by_url'>cited_by_url</span> <span class='op'>=</span> <span class='id identifier rubyid_cited_by_url'>cited_by_url</span><span class='lparen'>(</span> <span class='id identifier rubyid_result'>result</span> <span class='rparen'>)</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_add_service_response'>add_service_response</span><span class='lparen'>(</span><span class='symbol'>:service</span><span class='op'>=></span><span class='kw'>self</span><span class='comma'>,</span> <span class='symbol'>:display_text</span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_count_str'>count_str</span><span class='embexpr_end'>}</span><span class='tstring_content'> </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_label'>label</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='symbol'>:count</span><span class='op'>=></span> <span class='id identifier rubyid_count_i'>count_i</span><span class='comma'>,</span> <span class='symbol'>:url</span> <span class='op'>=></span> <span class='id identifier rubyid_cited_by_url'>cited_by_url</span><span class='comma'>,</span> <span class='symbol'>:service_type_value</span> <span class='op'>=></span> <span class='symbol'>:cited_by</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="xml_namespaces-instance_method"> #<strong>xml_namespaces</strong> ⇒ <tt>Object</tt> </h3><script> document.getElementById("xml_namespaces-instance_method").insertAdjacentHTML( "afterbegin", '<a class="permalink" href="/gems/umlaut/Scopus2:xml_namespaces">permalink</a>' ); </script> <table class="source_code"> <tr> <td> <pre class="lines"> 105 106 107 108 109 110 111 112</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/service_adaptors/scopus2.rb', line 105</span> <span class='kw'>def</span> <span class='id identifier rubyid_xml_namespaces'>xml_namespaces</span> <span class='ivar'>@xml_namespaces</span> <span class='op'>||=</span> <span class='lbrace'>{</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>atom</span><span class='tstring_end'>"</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>http://www.w3.org/2005/Atom</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>dc</span><span class='tstring_end'>"</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>http://purl.org/dc/elements/1.1/</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>opensearch</span><span class='tstring_end'>"</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>http://a9.com/-/spec/opensearch/1.1/</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>prism</span><span class='tstring_end'>"</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>http://prismstandard.org/namespaces/basic/2.0/</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> </div> <div id="footer"> Generated on Fri Oct 16 07:12:41 2026 by <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a> 0.9.45 (ruby-4.0.7). </div> </div> </body> </html>