bento_search 0.5.0 → 0.6.0

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.
Files changed (47) hide show
  1. data/README.md +6 -5
  2. data/app/assets/javascripts/bento_search/ajax_load.js +42 -16
  3. data/app/assets/stylesheets/bento_search/suggested_styles.css +9 -0
  4. data/app/controllers/bento_search/search_controller.rb +15 -6
  5. data/app/helpers/bento_search_helper.rb +24 -8
  6. data/app/item_decorators/bento_search/no_links.rb +13 -0
  7. data/app/models/bento_search/openurl_creator.rb +18 -8
  8. data/app/models/bento_search/registrar.rb +2 -6
  9. data/app/models/bento_search/result_item.rb +43 -3
  10. data/app/models/bento_search/results.rb +4 -0
  11. data/app/models/bento_search/search_engine.rb +25 -23
  12. data/app/search_engines/bento_search/ebsco_host_engine.rb +42 -17
  13. data/app/search_engines/bento_search/google_books_engine.rb +2 -0
  14. data/app/search_engines/bento_search/google_site_search_engine.rb +177 -0
  15. data/app/search_engines/bento_search/mock_engine.rb +5 -0
  16. data/app/search_engines/bento_search/primo_engine.rb +23 -2
  17. data/app/search_engines/bento_search/scopus_engine.rb +4 -1
  18. data/app/search_engines/bento_search/summon_engine.rb +4 -14
  19. data/app/search_engines/bento_search/worldcat_sru_dc_engine.rb +293 -0
  20. data/app/views/bento_search/_std_item.html.erb +4 -5
  21. data/app/views/bento_search/_wrap_with_count.html.erb +20 -0
  22. data/app/views/bento_search/search/search.html.erb +15 -1
  23. data/config/locales/en.yml +6 -4
  24. data/lib/bento_search/util.rb +13 -0
  25. data/lib/bento_search/version.rb +1 -1
  26. data/test/dummy/log/development.log +1 -0
  27. data/test/dummy/log/test.log +24357 -0
  28. data/test/functional/bento_search/search_controller_test.rb +39 -0
  29. data/test/helper/bento_search_helper_test.rb +47 -5
  30. data/test/unit/ebsco_host_engine_test.rb +15 -0
  31. data/test/unit/google_books_engine_test.rb +1 -0
  32. data/test/unit/google_site_search_test.rb +122 -0
  33. data/test/unit/item_decorators_test.rb +12 -1
  34. data/test/unit/openurl_creator_test.rb +19 -3
  35. data/test/unit/primo_engine_test.rb +5 -3
  36. data/test/unit/result_item_test.rb +36 -1
  37. data/test/unit/search_engine_test.rb +27 -4
  38. data/test/unit/worldcat_sru_dc_engine_test.rb +120 -0
  39. data/test/vcr_cassettes/google_site/basic_smoke_test.yml +254 -0
  40. data/test/vcr_cassettes/google_site/empty_result_set.yml +53 -0
  41. data/test/vcr_cassettes/google_site/pagination_object_is_correct_for_actual_page_when_you_ask_for_too_far.yml +260 -0
  42. data/test/vcr_cassettes/google_site/with_highlighting.yml +265 -0
  43. data/test/vcr_cassettes/google_site/without_highlighting.yml +267 -0
  44. data/test/vcr_cassettes/primo/proper_tags_for_snippets.yml +517 -502
  45. data/test/vcr_cassettes/primo/search_smoke_test.yml +1 -1
  46. data/test/vcr_cassettes/worldcat_sru_dc/smoke_test.yml +628 -0
  47. metadata +40 -4
@@ -15,9 +15,14 @@ class SearchEngineTest < ActiveSupport::TestCase
15
15
  assert_equal "required key", engine.configuration.top.next
16
16
  end
17
17
 
18
-
19
-
20
-
18
+ test "nested configuration with hash" do
19
+ # possible bug in Confstruct make sure we're working around
20
+ # if needed.
21
+ # https://github.com/mbklein/confstruct/issues/14
22
+ engine = MockEngine.new("top" => {"one" => "two"})
23
+
24
+ assert_equal "two", engine.configuration.top.one
25
+ end
21
26
 
22
27
  test "nested required config key" do
23
28
  requires_class = Class.new(MockEngine) do
@@ -41,7 +46,6 @@ class SearchEngineTest < ActiveSupport::TestCase
41
46
  assert_nothing_raised do
42
47
  requires_class.new(:required => {:key => "foo"})
43
48
  end
44
-
45
49
  end
46
50
 
47
51
  test "merges default configuration" do
@@ -98,5 +102,24 @@ class SearchEngineTest < ActiveSupport::TestCase
98
102
  assert_present pagination.count_records
99
103
 
100
104
  end
105
+
106
+ test "has empty :for_display config" do
107
+ engine = MockEngine.new
108
+
109
+ assert_not_nil engine.configuration.for_display
110
+ end
111
+
112
+
113
+ test "carries display configuration over to results" do
114
+ engine = MockEngine.new(:id => "foo",
115
+ :for_display => {:foo => "bar", :nested => {"one" => "two"}}
116
+ )
117
+
118
+ results = engine.search("foo")
119
+
120
+ assert_present results.display_configuration
121
+ assert_present results.display_configuration.foo
122
+ assert_present results.display_configuration.nested.one
123
+ end
101
124
 
102
125
  end
@@ -0,0 +1,120 @@
1
+ require 'test_helper'
2
+
3
+ require 'cgi'
4
+ require 'uri'
5
+
6
+ #
7
+ #
8
+ # Using the MARCXML response is way too much work, but the XML 'DC' response
9
+ # is awfully stunted. We do what we can with it, but resulting metadata
10
+ # is weird.
11
+ #
12
+ class WorldcatSruDcEngineTest < ActiveSupport::TestCase
13
+ extend TestWithCassette
14
+
15
+ @@api_key = ENV["WORLDCAT_API_KEY"] || "DUMMY_API_KEY"
16
+
17
+ VCR.configure do |c|
18
+ c.filter_sensitive_data("DUMMY_API_KEY", :worldcat_sru_dc) { @@api_key }
19
+ end
20
+
21
+
22
+ def setup
23
+ @config = {:api_key => @@api_key}
24
+ @engine = BentoSearch::WorldcatSruDcEngine.new(@config)
25
+ end
26
+
27
+ def test_construct_url
28
+ query = 'cancer\'s "one two"'
29
+ url = @engine.construct_query_url(:query => query, :per_page => 10)
30
+
31
+ query_hash = CGI.parse(URI.parse(url).query)
32
+
33
+ assert_equal [@engine.configuration.api_key], query_hash["wskey"]
34
+ assert_equal ['info:srw/schema/1/dc'], query_hash["recordSchema"]
35
+ assert_equal [@engine.construct_cql_query(:query => query)], query_hash["query"]
36
+ end
37
+
38
+ def test_construct_pagination
39
+ url = @engine.construct_query_url(:query => "cancer", :per_page => 20, :start => 20)
40
+
41
+ query_hash = CGI.parse(URI.parse(url).query)
42
+
43
+ assert_equal ["20"], query_hash["maximumRecords"]
44
+ assert_equal ["21"], query_hash["startRecord"]
45
+ end
46
+
47
+ def test_construct_sort
48
+ url = @engine.construct_query_url(:query => "cancer", :sort => "date_desc")
49
+
50
+ query_hash = CGI.parse(URI.parse(url).query)
51
+
52
+ assert_present query_hash["sortKeys"]
53
+ end
54
+
55
+ def test_construct_fielded_search
56
+ cql = @engine.construct_cql_query(:query => "cancer", :search_field => "srw.ti")
57
+
58
+ assert_equal 'srw.ti = "cancer"', cql
59
+ end
60
+
61
+ def test_construct_servicelevel
62
+ url = @engine.construct_query_url(:query => "cancer")
63
+ query_hash = CGI.parse(URI.parse(url).query)
64
+ assert_not_include query_hash["servicelevel"], "full"
65
+
66
+ url = @engine.construct_query_url(:query => "cancer auth", :auth => true)
67
+ query_hash = CGI.parse(URI.parse(url).query)
68
+ assert_include query_hash["servicelevel"], "full"
69
+
70
+ default_on = BentoSearch::WorldcatSruDcEngine.new(@config.merge(:auth => true))
71
+
72
+ url = default_on.construct_query_url(:query => "cancer")
73
+ query_hash = CGI.parse(URI.parse(url).query)
74
+ assert_include query_hash["servicelevel"], "full"
75
+
76
+ url = default_on.construct_query_url(:query => "cancer", :auth => false)
77
+ query_hash = CGI.parse(URI.parse(url).query)
78
+ assert_not_include query_hash["servicelevel"], "full"
79
+ end
80
+
81
+ def test_construct_cql
82
+ # test proper escaping and such
83
+ cql = @engine.construct_cql_query(:query => "alpha's beta \"one two\" thr\"ee")
84
+
85
+ components = cql.split(" AND ")
86
+
87
+ assert_equal 4, components.length
88
+
89
+ ["srw.kw = \"beta\"",
90
+ "srw.kw = \"alpha's\"",
91
+ "srw.kw = \"one two\"",
92
+ "srw.kw = \"thr\\\"ee\""].each do |clause|
93
+ assert_include components, clause
94
+ end
95
+ end
96
+
97
+ test_with_cassette("smoke test", :worldcat_sru_dc) do
98
+ results = @engine.search("anarchism")
99
+
100
+ assert_present results
101
+
102
+ assert_present results.total_items
103
+
104
+ first = results.first
105
+
106
+ assert_present first.title
107
+ assert_present first.authors
108
+ assert_present first.publisher
109
+ assert_present first.oclcnum
110
+
111
+ assert_present first.year
112
+
113
+ assert_present first.abstract
114
+
115
+ assert_present first.link
116
+
117
+ assert_present first.language_code
118
+ end
119
+
120
+ end
@@ -0,0 +1,254 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.googleapis.com/customsearch/v1?cx=DUMMY_CX&key=DUMMY_API_KEY&num=10&q=books
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Expires:
16
+ - Wed, 05 Sep 2012 16:17:48 GMT
17
+ Date:
18
+ - Wed, 05 Sep 2012 16:17:48 GMT
19
+ Cache-Control:
20
+ - private, max-age=0, must-revalidate, no-transform
21
+ Etag:
22
+ - ! '"LXj_4NvXMsBuBj8xNRXBhULBOPo/gICCjBJk8zfraPhwFfSYwpHaKAM"'
23
+ Content-Type:
24
+ - application/json; charset=UTF-8
25
+ X-Content-Type-Options:
26
+ - nosniff
27
+ X-Frame-Options:
28
+ - SAMEORIGIN
29
+ X-Xss-Protection:
30
+ - 1; mode=block
31
+ Server:
32
+ - GSE
33
+ Transfer-Encoding:
34
+ - chunked
35
+ body:
36
+ encoding: UTF-8
37
+ string: ! "{\n \"kind\": \"customsearch#search\",\n \"url\": {\n \"type\":
38
+ \"application/json\",\n \"template\": \"https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json\"\n
39
+ },\n \"queries\": {\n \"nextPage\": [\n {\n \"title\": \"Google Custom
40
+ Search - books\",\n \"totalResults\": \"6950\",\n \"searchTerms\": \"books\",\n
41
+ \ \"count\": 10,\n \"startIndex\": 11,\n \"inputEncoding\": \"utf8\",\n
42
+ \ \"outputEncoding\": \"utf8\",\n \"safe\": \"off\",\n \"cx\": \"DUMMY_CX\"\n
43
+ \ }\n ],\n \"request\": [\n {\n \"title\": \"Google Custom Search
44
+ - books\",\n \"totalResults\": \"6950\",\n \"searchTerms\": \"books\",\n
45
+ \ \"count\": 10,\n \"startIndex\": 1,\n \"inputEncoding\": \"utf8\",\n
46
+ \ \"outputEncoding\": \"utf8\",\n \"safe\": \"off\",\n \"cx\": \"DUMMY_CX\"\n
47
+ \ }\n ]\n },\n \"context\": {\n \"title\": \"JHU Libraries test\"\n },\n
48
+ \"searchInformation\": {\n \"searchTime\": 0.262793,\n \"formattedSearchTime\":
49
+ \"0.26\",\n \"totalResults\": \"6950\",\n \"formattedTotalResults\": \"6,950\"\n
50
+ },\n \"items\": [\n {\n \"kind\": \"customsearch#result\",\n \"title\":
51
+ \"Rare Books and Manuscripts\",\n \"htmlTitle\": \"Rare \\u003cb\\u003eBooks\\u003c/b\\u003e
52
+ and Manuscripts\",\n \"link\": \"http://www.library.jhu.edu/collections/specialcollections/index.html\",\n
53
+ \ \"displayLink\": \"www.library.jhu.edu\",\n \"snippet\": \"Main page
54
+ for the Special Collections Department of Archives, Manuscripts and Rare
55
+ Books.\",\n \"htmlSnippet\": \"Main page for the Special Collections Department
56
+ of Archives, Manuscripts and \\u003cbr\\u003e Rare \\u003cb\\u003eBooks\\u003c/b\\u003e.\",\n
57
+ \ \"cacheId\": \"2KLFAzsCxMsJ\",\n \"formattedUrl\": \"www.library.jhu.edu/collections/specialcollections/index.html\",\n
58
+ \ \"htmlFormattedUrl\": \"www.library.jhu.edu/collections/specialcollections/index.html\",\n
59
+ \ \"pagemap\": {\n \"cse_image\": [\n {\n \"src\": \"http://old.library.jhu.edu/sebin/t/t/gpl_library_smaller.jpg\"\n
60
+ \ }\n ],\n \"cse_thumbnail\": [\n {\n \"width\": \"200\",\n
61
+ \ \"height\": \"252\",\n \"src\": \"https://encrypted-tbn0.google.com/images?q=tbn:ANd9GcTgARgvj5T5jta3XN9ZLZzd30pqVZetCQ-JM-AHnXp_BEvMvJjA6WiYJjSB\"\n
62
+ \ }\n ],\n \"metatags\": [\n {\n \"author\": \"Holly Callahan\",\n
63
+ \ \"date\": \"2011-11-28T16:17:48-04:00\",\n \"title\": \"Home\"\n
64
+ \ }\n ]\n }\n },\n {\n \"kind\": \"customsearch#result\",\n \"title\":
65
+ \"JHSearch: Safari Books Online\",\n \"htmlTitle\": \"JHSearch: Safari \\u003cb\\u003eBooks\\u003c/b\\u003e
66
+ Online\",\n \"link\": \"http://jhsearch.library.jhu.edu/databases/database/JHU03821\",\n
67
+ \ \"displayLink\": \"jhsearch.library.jhu.edu\",\n \"snippet\": \"Safari
68
+ Books Online is a joint venture of O'Reilly Media and The Pearson Technology
69
+ Group that compiles the best technology books from the leading authors ...\",\n
70
+ \ \"htmlSnippet\": \"Safari \\u003cb\\u003eBooks\\u003c/b\\u003e Online is
71
+ a joint venture of O&#39;Reilly Media and The Pearson \\u003cbr\\u003e Technology
72
+ Group that compiles the best technology \\u003cb\\u003ebooks\\u003c/b\\u003e
73
+ from the leading \\u003cbr\\u003e authors \\u003cb\\u003e...\\u003c/b\\u003e\",\n
74
+ \ \"cacheId\": \"xQzMfZhyB-EJ\",\n \"formattedUrl\": \"jhsearch.library.jhu.edu/databases/database/JHU03821\",\n
75
+ \ \"htmlFormattedUrl\": \"jhsearch.library.jhu.edu/databases/database/JHU03821\"\n
76
+ \ },\n {\n \"kind\": \"customsearch#result\",\n \"title\": \"Peabody
77
+ Library - Special Collections & Archives - Library Guides at ...\",\n \"htmlTitle\":
78
+ \"Peabody Library - Special Collections &amp; Archives - Library Guides at
79
+ \\u003cb\\u003e...\\u003c/b\\u003e\",\n \"link\": \"http://www.library.jhu.edu/collections/specialcollections/rarebooks/peabody/\",\n
80
+ \ \"displayLink\": \"www.library.jhu.edu\",\n \"snippet\": \"Aug 22, 2012
81
+ ... How to Request MaterialsRare Books and Manuscripts Polices · How-To: A
82
+ \ History of Instruction (Archibald) · Book FestivalFlower Mart ...\",\n
83
+ \ \"htmlSnippet\": \"Aug 22, 2012 \\u003cb\\u003e...\\u003c/b\\u003e How
84
+ to Request MaterialsRare \\u003cb\\u003eBooks\\u003c/b\\u003e and Manuscripts
85
+ Polices &middot; How-To: A \\u003cbr\\u003e History of Instruction (Archibald)
86
+ &middot; \\u003cb\\u003eBook\\u003c/b\\u003e FestivalFlower Mart \\u003cb\\u003e...\\u003c/b\\u003e\",\n
87
+ \ \"formattedUrl\": \"www.library.jhu.edu/collections/specialcollections/rarebooks/peabody/\",\n
88
+ \ \"htmlFormattedUrl\": \"www.library.jhu.edu/collections/specialcollections/rare\\u003cb\\u003ebooks\\u003c/b\\u003e/peabody/\",\n
89
+ \ \"pagemap\": {\n \"metatags\": [\n {\n \"author\": \"Heidi
90
+ Herr, Chella Vaidyanathan, Jordon Steele\",\n \"copyright\": \"Copyright
91
+ Johns Hopkins University 2012\",\n \"dc.title\": \"Library Guides. Special
92
+ Collections & Archives. Peabody Library.\",\n \"dc.creator\": \"Heidi
93
+ Herr, Chella Vaidyanathan, Jordon Steele\",\n \"dc.subject\": \"Peabody
94
+ Library Special Collections & Archives Library Guides\",\n \"dc.description\":
95
+ \"Information about the exquisite Peabody Library\",\n \"dc.publisher\":
96
+ \"Johns Hopkins University Sheridan Libraries\",\n \"dc.rights\": \"Copyright
97
+ Johns Hopkins University 2012\",\n \"dc.language\": \"en\",\n \"dc.identifier\":
98
+ \"http://guides.library.jhu.edu/specialcollections\",\n \"dc.date.created\":
99
+ \"Aug 25, 2011\",\n \"dc.date.modified\": \"Aug 22, 2012\",\n \"dc.unused\":
100
+ \"Contributor, Date, Type, Format, Source, Relation, Coverage\",\n \"y_key\":
101
+ \"65baedbaee9038f3\"\n }\n ]\n }\n },\n {\n \"kind\": \"customsearch#result\",\n
102
+ \ \"title\": \"Books - German Language and Literature - Library Guides at
103
+ Johns ...\",\n \"htmlTitle\": \"\\u003cb\\u003eBooks\\u003c/b\\u003e - German
104
+ Language and Literature - Library Guides at Johns \\u003cb\\u003e...\\u003c/b\\u003e\",\n
105
+ \ \"link\": \"http://guides.library.jhu.edu/content.php?pid=25138&sid=181188\",\n
106
+ \ \"displayLink\": \"guides.library.jhu.edu\",\n \"snippet\": \"Aug 8,
107
+ 2012 ... Arbeitsgemeinschaft Sammlung Deutscher Drucke: 6 libraries are reconstructing
108
+ \ a national bibliography that will cover the German prints from ...\",\n
109
+ \ \"htmlSnippet\": \"Aug 8, 2012 \\u003cb\\u003e...\\u003c/b\\u003e Arbeitsgemeinschaft
110
+ Sammlung Deutscher Drucke: 6 libraries are reconstructing \\u003cbr\\u003e
111
+ \ a national bibliography that will cover the German prints from \\u003cb\\u003e...\\u003c/b\\u003e\",\n
112
+ \ \"formattedUrl\": \"guides.library.jhu.edu/content.php?pid=25138&sid=181188\",\n
113
+ \ \"htmlFormattedUrl\": \"guides.library.jhu.edu/content.php?pid=25138&amp;sid=181188\",\n
114
+ \ \"pagemap\": {\n \"metatags\": [\n {\n \"author\": \"Sue Waterman\",\n
115
+ \ \"copyright\": \"Copyright Johns Hopkins University 2012\",\n \"dc.title\":
116
+ \"Library Guides. German Language and Literature. Books.\",\n \"dc.creator\":
117
+ \"Sue Waterman\",\n \"dc.subject\": \"Books German Language and Literature
118
+ Library Guides\",\n \"dc.description\": \"Resources, both online and
119
+ elsewhere, for the German language and literature.\",\n \"dc.publisher\":
120
+ \"Johns Hopkins University Sheridan Libraries\",\n \"dc.rights\": \"Copyright
121
+ Johns Hopkins University 2012\",\n \"dc.language\": \"en\",\n \"dc.identifier\":
122
+ \"http://guides.library.jhu.edu/german\",\n \"dc.date.created\": \"Nov
123
+ 6, 2008\",\n \"dc.date.modified\": \"Aug 8, 2012\",\n \"dc.unused\":
124
+ \"Contributor, Date, Type, Format, Source, Relation, Coverage\",\n \"y_key\":
125
+ \"65baedbaee9038f3\"\n }\n ]\n }\n },\n {\n \"kind\": \"customsearch#result\",\n
126
+ \ \"title\": \"Out of Copyright Books\",\n \"htmlTitle\": \"Out of Copyright
127
+ \\u003cb\\u003eBooks\\u003c/b\\u003e\",\n \"link\": \"https://jscholarship.library.jhu.edu/handle/1774.2/59\",\n
128
+ \ \"displayLink\": \"jscholarship.library.jhu.edu\",\n \"snippet\": \"This
129
+ collection contains content captured during preservation reformatting of materials
130
+ from the physical collection. There is usually a bibliographic record in the
131
+ ...\",\n \"htmlSnippet\": \"This collection contains content captured during
132
+ preservation reformatting of \\u003cbr\\u003e materials from the physical
133
+ collection. There is usually a bibliographic record in \\u003cbr\\u003e the
134
+ \\u003cb\\u003e...\\u003c/b\\u003e\",\n \"cacheId\": \"SK7ab5EIgAAJ\",\n
135
+ \ \"formattedUrl\": \"https://jscholarship.library.jhu.edu/handle/1774.2/59\",\n
136
+ \ \"htmlFormattedUrl\": \"https://jscholarship.library.jhu.edu/handle/1774.2/59\",\n
137
+ \ \"pagemap\": {\n \"cse_image\": [\n {\n \"src\": \"https://jscholarship.library.jhu.edu/themes/Golden/logo.png\"\n
138
+ \ }\n ],\n \"cse_thumbnail\": [\n {\n \"width\": \"101\",\n
139
+ \ \"height\": \"98\",\n \"src\": \"https://encrypted-tbn2.google.com/images?q=tbn:ANd9GcTEyucbV5j6Fw-ZfWJxayVmiWAg9JunzletDcmf0gi22lrYi-ZsgvDV2A\"\n
140
+ \ }\n ]\n }\n },\n {\n \"kind\": \"customsearch#result\",\n \"title\":
141
+ \"Books - French Language and Literature - Library Guides at Johns ...\",\n
142
+ \ \"htmlTitle\": \"\\u003cb\\u003eBooks\\u003c/b\\u003e - French Language
143
+ and Literature - Library Guides at Johns \\u003cb\\u003e...\\u003c/b\\u003e\",\n
144
+ \ \"link\": \"http://guides.library.jhu.edu/content.php?pid=22748&sid=165198\",\n
145
+ \ \"displayLink\": \"guides.library.jhu.edu\",\n \"snippet\": \"Aug 2,
146
+ 2012 ... Checking out, Renewing, Recalling BooksComputing in the libraryConnecting
147
+ \ from off-campusFind an article onlineFind Films and DVD'sHow ...\",\n \"htmlSnippet\":
148
+ \"Aug 2, 2012 \\u003cb\\u003e...\\u003c/b\\u003e Checking out, Renewing, Recalling
149
+ \\u003cb\\u003eBooks\\u003c/b\\u003eComputing in the libraryConnecting \\u003cbr\\u003e
150
+ \ from off-campusFind an article onlineFind Films and DVD&#39;sHow \\u003cb\\u003e...\\u003c/b\\u003e\",\n
151
+ \ \"formattedUrl\": \"guides.library.jhu.edu/content.php?pid=22748&sid=165198\",\n
152
+ \ \"htmlFormattedUrl\": \"guides.library.jhu.edu/content.php?pid=22748&amp;sid=165198\",\n
153
+ \ \"pagemap\": {\n \"metatags\": [\n {\n \"author\": \"Sue Waterman\",\n
154
+ \ \"copyright\": \"Copyright Johns Hopkins University 2012\",\n \"dc.title\":
155
+ \"Library Guides. French Language and Literature. Books.\",\n \"dc.creator\":
156
+ \"Sue Waterman\",\n \"dc.subject\": \"Books French Language and Literature
157
+ Library Guides\",\n \"dc.description\": \"Resources, both online and
158
+ elsewhere, for the French language and literature.\",\n \"dc.publisher\":
159
+ \"Johns Hopkins University Sheridan Libraries\",\n \"dc.rights\": \"Copyright
160
+ Johns Hopkins University 2012\",\n \"dc.language\": \"en\",\n \"dc.identifier\":
161
+ \"http://guides.library.jhu.edu/french\",\n \"dc.date.created\": \"Nov
162
+ 5, 2008\",\n \"dc.date.modified\": \"Aug 2, 2012\",\n \"dc.unused\":
163
+ \"Contributor, Date, Type, Format, Source, Relation, Coverage\",\n \"y_key\":
164
+ \"65baedbaee9038f3\"\n }\n ]\n }\n },\n {\n \"kind\": \"customsearch#result\",\n
165
+ \ \"title\": \"Home: Intro to E-Books - E-Books - Library Guides at Johns
166
+ Hopkins ...\",\n \"htmlTitle\": \"Home: Intro to E-\\u003cb\\u003eBooks\\u003c/b\\u003e
167
+ - E-\\u003cb\\u003eBooks\\u003c/b\\u003e - Library Guides at Johns Hopkins
168
+ \\u003cb\\u003e...\\u003c/b\\u003e\",\n \"link\": \"http://guides.library.jhu.edu/ebooks\",\n
169
+ \ \"displayLink\": \"guides.library.jhu.edu\",\n \"snippet\": \"Aug 14,
170
+ 2012 ... How to find electronic books and resources in the library's catalog.\",\n
171
+ \ \"htmlSnippet\": \"Aug 14, 2012 \\u003cb\\u003e...\\u003c/b\\u003e How
172
+ to find electronic \\u003cb\\u003ebooks\\u003c/b\\u003e and resources in the
173
+ library&#39;s catalog.\",\n \"formattedUrl\": \"guides.library.jhu.edu/ebooks\",\n
174
+ \ \"htmlFormattedUrl\": \"guides.library.jhu.edu/e\\u003cb\\u003ebooks\\u003c/b\\u003e\",\n
175
+ \ \"pagemap\": {\n \"metatags\": [\n {\n \"author\": \"Sue Vazakas\",\n
176
+ \ \"copyright\": \"Copyright Johns Hopkins University 2012\",\n \"dc.title\":
177
+ \"Library Guides. E-Books. Home: Intro to E-Books.\",\n \"dc.creator\":
178
+ \"Sue Vazakas\",\n \"dc.subject\": \"Home: Intro to E-Books E-Books Library
179
+ Guides\",\n \"dc.description\": \"How to find electronic books and resources
180
+ in the library's catalog.\",\n \"dc.publisher\": \"Johns Hopkins University
181
+ Sheridan Libraries\",\n \"dc.rights\": \"Copyright Johns Hopkins University
182
+ 2012\",\n \"dc.language\": \"en\",\n \"dc.identifier\": \"http://guides.library.jhu.edu/ebooks\",\n
183
+ \ \"dc.date.created\": \"May 9, 2011\",\n \"dc.date.modified\": \"Aug
184
+ 14, 2012\",\n \"dc.unused\": \"Contributor, Date, Type, Format, Source,
185
+ Relation, Coverage\",\n \"y_key\": \"65baedbaee9038f3\"\n }\n ]\n
186
+ \ }\n },\n {\n \"kind\": \"customsearch#result\",\n \"title\": \"Finding
187
+ Books in the JHU Libraries\",\n \"htmlTitle\": \"Finding \\u003cb\\u003eBooks\\u003c/b\\u003e
188
+ in the JHU Libraries\",\n \"link\": \"http://old.library.jhu.edu/researchhelp/general/books.html\",\n
189
+ \ \"displayLink\": \"old.library.jhu.edu\",\n \"snippet\": \"Find books
190
+ that are owned by one of the JHU Libraries. Search the JHU Libraries Catalog
191
+ for books that are owned by Johns Hopkins, as well as for videos, ...\",\n
192
+ \ \"htmlSnippet\": \"Find \\u003cb\\u003ebooks\\u003c/b\\u003e that are owned
193
+ by one of the JHU Libraries. Search the JHU Libraries \\u003cbr\\u003e Catalog
194
+ for \\u003cb\\u003ebooks\\u003c/b\\u003e that are owned by Johns Hopkins,
195
+ as well as for videos, \\u003cb\\u003e...\\u003c/b\\u003e\",\n \"cacheId\":
196
+ \"76s2xASMLHsJ\",\n \"formattedUrl\": \"old.library.jhu.edu/researchhelp/general/books.html\",\n
197
+ \ \"htmlFormattedUrl\": \"old.library.jhu.edu/researchhelp/general/\\u003cb\\u003ebooks\\u003c/b\\u003e.html\",\n
198
+ \ \"pagemap\": {\n \"cse_image\": [\n {\n \"src\": \"http://old.library.jhu.edu/sebin/m/t/book.gif\"\n
199
+ \ }\n ],\n \"cse_thumbnail\": [\n {\n \"width\": \"104\",\n
200
+ \ \"height\": \"68\",\n \"src\": \"https://encrypted-tbn3.google.com/images?q=tbn:ANd9GcQVuOwr0XQBCzyzOcqWnAHsX2dZINnIoj2z5fKfWRSfXP7j2cY80oTp\"\n
201
+ \ }\n ],\n \"metatags\": [\n {\n \"author\": \"Andrea Bartelstein\",\n
202
+ \ \"date\": \"2005-03-01T16:28:07-04:00\",\n \"dc.creator\": \"Andrea
203
+ Bartelstein\",\n \"title\": \"Finding Books in the JHU Libraries\",\n
204
+ \ \"dc.title\": \"Finding Books in Education and Counseling\",\n \"dc.keyword\":
205
+ \"education counseling counselling research help finding books\"\n }\n
206
+ \ ]\n }\n },\n {\n \"kind\": \"customsearch#result\",\n \"title\":
207
+ \"3. Downloading E-books - E-Books - Library Guides at Johns ...\",\n \"htmlTitle\":
208
+ \"3. Downloading E-\\u003cb\\u003ebooks\\u003c/b\\u003e - E-\\u003cb\\u003eBooks\\u003c/b\\u003e
209
+ - Library Guides at Johns \\u003cb\\u003e...\\u003c/b\\u003e\",\n \"link\":
210
+ \"http://guides.library.jhu.edu/content.php?pid=156837&sid=1723518\",\n \"displayLink\":
211
+ \"guides.library.jhu.edu\",\n \"snippet\": \"Aug 14, 2012 ... How to find
212
+ electronic books and resources in the library's catalog.\",\n \"htmlSnippet\":
213
+ \"Aug 14, 2012 \\u003cb\\u003e...\\u003c/b\\u003e How to find electronic \\u003cb\\u003ebooks\\u003c/b\\u003e
214
+ and resources in the library&#39;s catalog.\",\n \"formattedUrl\": \"guides.library.jhu.edu/content.php?pid=156837&sid=1723518\",\n
215
+ \ \"htmlFormattedUrl\": \"guides.library.jhu.edu/content.php?pid=156837&amp;sid=1723518\",\n
216
+ \ \"pagemap\": {\n \"metatags\": [\n {\n \"author\": \"Sue Vazakas\",\n
217
+ \ \"copyright\": \"Copyright Johns Hopkins University 2012\",\n \"dc.title\":
218
+ \"Library Guides. E-Books. 3. Downloading E-books.\",\n \"dc.creator\":
219
+ \"Sue Vazakas\",\n \"dc.subject\": \"3. Downloading E-books E-Books Library
220
+ Guides\",\n \"dc.description\": \"How to find electronic books and resources
221
+ in the library's catalog.\",\n \"dc.publisher\": \"Johns Hopkins University
222
+ Sheridan Libraries\",\n \"dc.rights\": \"Copyright Johns Hopkins University
223
+ 2012\",\n \"dc.language\": \"en\",\n \"dc.identifier\": \"http://guides.library.jhu.edu/ebooks\",\n
224
+ \ \"dc.date.created\": \"May 9, 2011\",\n \"dc.date.modified\": \"Aug
225
+ 14, 2012\",\n \"dc.unused\": \"Contributor, Date, Type, Format, Source,
226
+ Relation, Coverage\",\n \"y_key\": \"65baedbaee9038f3\"\n }\n ]\n
227
+ \ }\n },\n {\n \"kind\": \"customsearch#result\",\n \"title\": \"Books
228
+ - Italian Language and Literature - Library Guides at Johns ...\",\n \"htmlTitle\":
229
+ \"\\u003cb\\u003eBooks\\u003c/b\\u003e - Italian Language and Literature -
230
+ Library Guides at Johns \\u003cb\\u003e...\\u003c/b\\u003e\",\n \"link\":
231
+ \"http://guides.library.jhu.edu/content.php?pid=25794&sid=186218\",\n \"displayLink\":
232
+ \"guides.library.jhu.edu\",\n \"snippet\": \"Aug 15, 2012 ... Checking out,
233
+ Renewing, Recalling BooksComputing in the libraryConnecting from off-campusFind
234
+ an article onlineFind Films and DVD'sHow ...\",\n \"htmlSnippet\": \"Aug
235
+ 15, 2012 \\u003cb\\u003e...\\u003c/b\\u003e Checking out, Renewing, Recalling
236
+ \\u003cb\\u003eBooks\\u003c/b\\u003eComputing in the libraryConnecting \\u003cbr\\u003e
237
+ \ from off-campusFind an article onlineFind Films and DVD&#39;sHow \\u003cb\\u003e...\\u003c/b\\u003e\",\n
238
+ \ \"formattedUrl\": \"guides.library.jhu.edu/content.php?pid=25794&sid=186218\",\n
239
+ \ \"htmlFormattedUrl\": \"guides.library.jhu.edu/content.php?pid=25794&amp;sid=186218\",\n
240
+ \ \"pagemap\": {\n \"metatags\": [\n {\n \"author\": \"Sue Waterman\",\n
241
+ \ \"copyright\": \"Copyright Johns Hopkins University 2012\",\n \"dc.title\":
242
+ \"Library Guides. Italian Language and Literature. Books.\",\n \"dc.creator\":
243
+ \"Sue Waterman\",\n \"dc.subject\": \"Books Italian Language and Literature
244
+ Library Guides\",\n \"dc.description\": \"Resources, in all formats,
245
+ for the study of Italian literature and language\",\n \"dc.publisher\":
246
+ \"Johns Hopkins University Sheridan Libraries\",\n \"dc.rights\": \"Copyright
247
+ Johns Hopkins University 2012\",\n \"dc.language\": \"en\",\n \"dc.identifier\":
248
+ \"http://guides.library.jhu.edu/italian\",\n \"dc.date.created\": \"Nov
249
+ 11, 2008\",\n \"dc.date.modified\": \"Aug 15, 2012\",\n \"dc.unused\":
250
+ \"Contributor, Date, Type, Format, Source, Relation, Coverage\",\n \"y_key\":
251
+ \"65baedbaee9038f3\"\n }\n ]\n }\n }\n ]\n}\n"
252
+ http_version:
253
+ recorded_at: Wed, 05 Sep 2012 16:17:48 GMT
254
+ recorded_with: VCR 2.2.4
@@ -0,0 +1,53 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://www.googleapis.com/customsearch/v1?cx=DUMMY_CX&key=DUMMY_API_KEY&num=10&q=%22adfa%20lakjdr%20xavier%20aldkfj%2092323kjadf%22
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Expires:
16
+ - Wed, 05 Sep 2012 20:47:49 GMT
17
+ Date:
18
+ - Wed, 05 Sep 2012 20:47:49 GMT
19
+ Cache-Control:
20
+ - private, max-age=0, must-revalidate, no-transform
21
+ Etag:
22
+ - ! '"LXj_4NvXMsBuBj8xNRXBhULBOPo/W6k8nbDP-T9StSHXQg5D9u2ieE8"'
23
+ Content-Type:
24
+ - application/json; charset=UTF-8
25
+ X-Content-Type-Options:
26
+ - nosniff
27
+ X-Frame-Options:
28
+ - SAMEORIGIN
29
+ X-Xss-Protection:
30
+ - 1; mode=block
31
+ Server:
32
+ - GSE
33
+ Transfer-Encoding:
34
+ - chunked
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! "{\n \"kind\": \"customsearch#search\",\n \"url\": {\n \"type\":
38
+ \"application/json\",\n \"template\": \"https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json\"\n
39
+ },\n \"queries\": {\n \"request\": [\n {\n \"title\": \"Google Custom
40
+ Search - \\\"adfa lakjdr xavier aldkfj 92323kjadf\\\"\",\n \"totalResults\":
41
+ \"0\",\n \"searchTerms\": \"\\\"adfa lakjdr xavier aldkfj 92323kjadf\\\"\",\n
42
+ \ \"count\": 10,\n \"inputEncoding\": \"utf8\",\n \"outputEncoding\":
43
+ \"utf8\",\n \"safe\": \"off\",\n \"cx\": \"DUMMY_CX\"\n }\n ]\n },\n
44
+ \"searchInformation\": {\n \"searchTime\": 0.506227,\n \"formattedSearchTime\":
45
+ \"0.51\",\n \"totalResults\": \"0\",\n \"formattedTotalResults\": \"0\"\n
46
+ },\n \"spelling\": {\n \"correctedQuery\": \"\\\"adfa lake dr xavier asldkfj
47
+ 92323kj adf\\\"\",\n \"htmlCorrectedQuery\": \"&quot;adfa \\u003cb\\u003e\\u003ci\\u003elake
48
+ dr\\u003c/i\\u003e\\u003c/b\\u003e xavier \\u003cb\\u003e\\u003ci\\u003easldkfj\\u003c/i\\u003e\\u003c/b\\u003e
49
+ \\u003cb\\u003e\\u003ci\\u003e92323kj adf\\u003c/i\\u003e\\u003c/b\\u003e&quot;\"\n
50
+ }\n}\n"
51
+ http_version:
52
+ recorded_at: Wed, 05 Sep 2012 20:47:49 GMT
53
+ recorded_with: VCR 2.2.4