summon 1.0.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.
- data/.specification +58 -0
- data/History.txt +4 -0
- data/Manifest.txt +52 -0
- data/PostInstall.txt +4 -0
- data/README.rdoc +77 -0
- data/Rakefile +25 -0
- data/bin/summon +10 -0
- data/bin/summonh +19 -0
- data/ispec/integration_spec.rb +61 -0
- data/lib/summon.rb +41 -0
- data/lib/summon/cli.rb +136 -0
- data/lib/summon/log.rb +40 -0
- data/lib/summon/schema.rb +109 -0
- data/lib/summon/schema/availability.rb +14 -0
- data/lib/summon/schema/citation.rb +11 -0
- data/lib/summon/schema/date.rb +23 -0
- data/lib/summon/schema/document.rb +84 -0
- data/lib/summon/schema/error.rb +4 -0
- data/lib/summon/schema/facet.rb +51 -0
- data/lib/summon/schema/query.rb +96 -0
- data/lib/summon/schema/range.rb +52 -0
- data/lib/summon/schema/search.rb +37 -0
- data/lib/summon/schema/suggestion.rb +5 -0
- data/lib/summon/service.rb +44 -0
- data/lib/summon/transport.rb +13 -0
- data/lib/summon/transport/canned.json +2327 -0
- data/lib/summon/transport/canned.rb +9 -0
- data/lib/summon/transport/errors.rb +12 -0
- data/lib/summon/transport/headers.rb +55 -0
- data/lib/summon/transport/http.rb +114 -0
- data/lib/summon/transport/qstring.rb +49 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/summon/log_spec.rb +28 -0
- data/spec/summon/schema/availability_spec.rb +31 -0
- data/spec/summon/schema/citation_spec.rb +34 -0
- data/spec/summon/schema/date_spec.rb +12 -0
- data/spec/summon/schema/document_spec.rb +235 -0
- data/spec/summon/schema/facet_spec.rb +115 -0
- data/spec/summon/schema/query_spec.rb +163 -0
- data/spec/summon/schema/range_spec.rb +45 -0
- data/spec/summon/schema/search_spec.rb +62 -0
- data/spec/summon/schema_spec.rb +143 -0
- data/spec/summon/service_spec.rb +18 -0
- data/spec/summon/transport/headers_spec.rb +47 -0
- data/spec/summon/transport/http_spec.rb +29 -0
- data/spec/summon/transport/qstring_spec.rb +24 -0
- data/spec/summon_spec.rb +48 -0
- data/summon.gemspec +41 -0
- metadata +145 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Summon::Service do
|
4
|
+
|
5
|
+
it "can be configured" do
|
6
|
+
Object.new.tap do |log|
|
7
|
+
Summon::Transport::Http.should_receive(:new).with(hash_including(:url => "http://google.com", :access_id => "Bob", :session_id => "foo", :client_key => "Justice", :secret_key => "Happiness"))
|
8
|
+
@service = Summon::Service.new :url => "http://google.com", :access_id => "Bob", :secret_key => "Happiness", :session_id => "foo", :client_key => "Justice"
|
9
|
+
@service.url.should == "http://google.com"
|
10
|
+
@service.access_id.should == "Bob"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "has a default url which is the public production summon url" do
|
15
|
+
Summon::Service.new.url.should == "http://api.summon.serialssolutions.com"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe Summon::Transport::Headers do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
Time.httpdate("Tue, 30 Jun 2009 12:10:24 GMT").tap do |point|
|
7
|
+
Time.stub!(:now).and_return(point)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it "give the request parameters, it represents the correct headers" do
|
12
|
+
Summon::Transport::Headers.new(
|
13
|
+
:url => "http://magg1.beta.projectmagnolia.net:8083/summon-search-api/search2",
|
14
|
+
:access_id => "test",
|
15
|
+
:client_key => "PX3FK6GB6M",
|
16
|
+
:secret_key => "ed2ee2e0-65c1-11de-8a39-0800200c9a66",
|
17
|
+
:accept => "xml",
|
18
|
+
:params => {'s.ff' => 'ContentType,or,1,15', 's.q' => 'forest'}
|
19
|
+
).should == {
|
20
|
+
'Content-Type' => 'application/x-www-form-urlencoded; charset=utf8',
|
21
|
+
'Accept' => 'application/xml',
|
22
|
+
'x-summon-date' => 'Tue, 30 Jun 2009 12:10:24 GMT',
|
23
|
+
'Authorization' => 'Summon test;PX3FK6GB6M;g1SZb73Vg6bV7VhFQ2KkCLy98rE=',
|
24
|
+
'Host' => 'magg1.beta.projectmagnolia.net:8083'
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "successfully handles array parameters" do
|
29
|
+
Summon::Transport::Headers.new(
|
30
|
+
:url => "http://magg1.beta.projectmagnolia.net:8083/summon-search-api/search2",
|
31
|
+
:access_id => "test",
|
32
|
+
:client_key => "PX3FK6GB6M",
|
33
|
+
:secret_key => "ed2ee2e0-65c1-11de-8a39-0800200c9a66",
|
34
|
+
:session_id => "Session-3000!",
|
35
|
+
:accept => "xml",
|
36
|
+
:params => {'s.ff' => ['ContentType,or,1,15'], 's.q' => ['forest']}
|
37
|
+
).should == {
|
38
|
+
'Content-Type' => 'application/x-www-form-urlencoded; charset=utf8',
|
39
|
+
'Accept' => 'application/xml',
|
40
|
+
'x-summon-date' => 'Tue, 30 Jun 2009 12:10:24 GMT',
|
41
|
+
'x-summon-session-id' => "Session-3000!",
|
42
|
+
'Authorization' => 'Summon test;PX3FK6GB6M;g1SZb73Vg6bV7VhFQ2KkCLy98rE=',
|
43
|
+
'Host' => 'magg1.beta.projectmagnolia.net:8083'
|
44
|
+
}
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe Summon::Transport::Http do
|
4
|
+
attr_reader :http
|
5
|
+
|
6
|
+
before do
|
7
|
+
@http = Summon::Transport::Http.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "parse" do
|
11
|
+
it "should parse json" do
|
12
|
+
response = stub("response", :content_type => "application/json",
|
13
|
+
:body => '{"some":"json","foo":[1,2],"bar":3}')
|
14
|
+
http.parse(response).should == {"some" => "json", "foo" => [1,2], "bar" => 3}
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should parse text" do
|
18
|
+
response = stub("response", :content_type => "text/plain",
|
19
|
+
:body => "some string\r\nand another one\r\n")
|
20
|
+
http.parse(response).should == "some string\r\nand another one\r\n"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should raise error on anything else" do
|
24
|
+
response = stub("response", :content_type => "text/xml",
|
25
|
+
:body => "<some>xml</some>")
|
26
|
+
proc {http.parse(response)}.should raise_error(Summon::Transport::ServiceError, "service returned unexpected text/xml : <some>xml</some>")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe Summon::Transport::Qstring do
|
4
|
+
before(:each) do
|
5
|
+
extend Summon::Transport::Qstring
|
6
|
+
end
|
7
|
+
|
8
|
+
it "can decode a query string into hash parameters" do
|
9
|
+
from_query_string("foo=bar&baz=bang").should == {"foo" => "bar", "baz" => "bang"}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "stuffs multiple keys into the same value as a list" do
|
13
|
+
from_query_string("foo=bar&foo=baz&bar=bang").should == {"foo" => ["bar", "baz"], "bar" => "bang"}
|
14
|
+
end
|
15
|
+
|
16
|
+
it "url decodes keys and values" do
|
17
|
+
from_query_string("foo=bar%20bar&baz=bang+bang").should == {"foo" => "bar bar", "baz" => "bang bang"}
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns an empty hash if the query string is blank" do
|
21
|
+
from_query_string(nil).should be_empty
|
22
|
+
from_query_string("").should be_empty
|
23
|
+
end
|
24
|
+
end
|
data/spec/summon_spec.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "Summon Gem Integration Test" do
|
4
|
+
it "maps an api request correctly" do
|
5
|
+
service = Summon::Service.new(:transport => Summon::Transport::Canned.new)
|
6
|
+
search = service.search
|
7
|
+
search.should_not be_nil
|
8
|
+
search.record_count.should == 1506825
|
9
|
+
search.page_count.should == 100456
|
10
|
+
search.total_request_time.should == 80
|
11
|
+
search.query_time.should == 57
|
12
|
+
search.suggestions.should_not be_nil
|
13
|
+
search.suggestions.length.should == 1
|
14
|
+
dym = search.suggestions.first
|
15
|
+
dym.original_query.should == "louis rmstrong"
|
16
|
+
dym.suggested_query.should == "louis armstrong"
|
17
|
+
|
18
|
+
documents = search.documents
|
19
|
+
documents.should_not be_nil
|
20
|
+
documents.length.should == 15
|
21
|
+
d = documents[0]
|
22
|
+
d.id.should == "gvsu_catalog_b16644323"
|
23
|
+
d.content_type.should == "Audio Recording"
|
24
|
+
d.authors.map{|a| a.name}.should == ["Hunter, Lisa"]
|
25
|
+
d.open_url.should == "ctx_ver=Z39.88-2004&rfr_id=info:sid\/summon.serialssolutions.com&rft_val_fmt=info:ofi\/fmt:kev:mtx:dc&rft.title=Lisa+Hunter+--+alive&rft.creator=Hunter%2C+Lisa&rft.date=c200-0.&rft.pub=Spirulina+Records&rft.externalDBID=n%2Fa&rft.externalDocID=b16644323"
|
26
|
+
d.fulltext?.should be(false)
|
27
|
+
|
28
|
+
|
29
|
+
facets = search.facets
|
30
|
+
facets.should_not be_nil
|
31
|
+
facets.length.should >= 5
|
32
|
+
ctype = facets[2]
|
33
|
+
ctype.display_name.should == "ContentType"
|
34
|
+
ctype.combine_mode.should == 'or'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should now how to escape values" do
|
38
|
+
check_escape("the quick, brown, fox", 'the quick\, brown\, fox')
|
39
|
+
Summon.escape(': everything (else) and $1 or {is} it\ ').should == '\: everything \(else\) and \$1 or \{is\} it\\ '
|
40
|
+
end
|
41
|
+
|
42
|
+
def check_escape(unescaped, escaped)
|
43
|
+
Summon.escape(unescaped).should == escaped
|
44
|
+
Summon.unescape(escaped).should == unescaped
|
45
|
+
Summon.unescape(Summon.escape(unescaped)).should == unescaped
|
46
|
+
Summon.escape(Summon.unescape(escaped)).should == escaped
|
47
|
+
end
|
48
|
+
end
|
data/summon.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{summon}
|
5
|
+
s.version = "1.0.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Charles Lowell"]
|
9
|
+
s.date = %q{2009-09-28}
|
10
|
+
s.description = %q{Ruby language bindings for Serials Solutions Summon Unified Discovery Service}
|
11
|
+
s.email = ["cowboyd@thefrontside.net"]
|
12
|
+
s.executables = ["summon", "summonh"]
|
13
|
+
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt"]
|
14
|
+
s.files = [".specification", "History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "bin/summon", "bin/summonh", "ispec/integration_spec.rb", "lib/summon.rb", "lib/summon/cli.rb", "lib/summon/log.rb", "lib/summon/schema.rb", "lib/summon/schema/availability.rb", "lib/summon/schema/citation.rb", "lib/summon/schema/date.rb", "lib/summon/schema/document.rb", "lib/summon/schema/error.rb", "lib/summon/schema/facet.rb", "lib/summon/schema/query.rb", "lib/summon/schema/range.rb", "lib/summon/schema/search.rb", "lib/summon/schema/suggestion.rb", "lib/summon/service.rb", "lib/summon/transport.rb", "lib/summon/transport/canned.json", "lib/summon/transport/canned.rb", "lib/summon/transport/errors.rb", "lib/summon/transport/headers.rb", "lib/summon/transport/http.rb", "lib/summon/transport/qstring.rb", "script/console", "script/destroy", "script/generate", "spec/spec.opts", "spec/spec_helper.rb", "spec/summon/log_spec.rb", "spec/summon/schema/availability_spec.rb", "spec/summon/schema/citation_spec.rb", "spec/summon/schema/date_spec.rb", "spec/summon/schema/document_spec.rb", "spec/summon/schema/facet_spec.rb", "spec/summon/schema/query_spec.rb", "spec/summon/schema/range_spec.rb", "spec/summon/schema/search_spec.rb", "spec/summon/schema_spec.rb", "spec/summon/service_spec.rb", "spec/summon/transport/headers_spec.rb", "spec/summon/transport/http_spec.rb", "spec/summon/transport/qstring_spec.rb", "spec/summon_spec.rb", "summon.gemspec"]
|
15
|
+
s.homepage = %q{http://summon.rubyforge.org}
|
16
|
+
s.post_install_message = %q{PostInstall.txt}
|
17
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{summon}
|
20
|
+
s.rubygems_version = %q{1.3.5}
|
21
|
+
s.summary = %q{Ruby language bindings for Serials Solutions Summon Unified Discovery Service}
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
+
s.specification_version = 3
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_runtime_dependency(%q<json_pure>, [">= 1.1.7"])
|
29
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.7"])
|
30
|
+
s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<json_pure>, [">= 1.1.7"])
|
33
|
+
s.add_dependency(%q<rspec>, [">= 1.2.7"])
|
34
|
+
s.add_dependency(%q<hoe>, [">= 2.3.3"])
|
35
|
+
end
|
36
|
+
else
|
37
|
+
s.add_dependency(%q<json_pure>, [">= 1.1.7"])
|
38
|
+
s.add_dependency(%q<rspec>, [">= 1.2.7"])
|
39
|
+
s.add_dependency(%q<hoe>, [">= 2.3.3"])
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: summon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Charles Lowell
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-09-29 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: json_pure
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.1.7
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.7
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: hoe
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.3.3
|
44
|
+
version:
|
45
|
+
description: Ruby language bindings for Serials Solutions Summon Unified Discovery Service
|
46
|
+
email:
|
47
|
+
- cowboyd@thefrontside.net
|
48
|
+
executables:
|
49
|
+
- summon
|
50
|
+
- summonh
|
51
|
+
extensions: []
|
52
|
+
|
53
|
+
extra_rdoc_files:
|
54
|
+
- History.txt
|
55
|
+
- Manifest.txt
|
56
|
+
- PostInstall.txt
|
57
|
+
files:
|
58
|
+
- .specification
|
59
|
+
- History.txt
|
60
|
+
- Manifest.txt
|
61
|
+
- PostInstall.txt
|
62
|
+
- README.rdoc
|
63
|
+
- Rakefile
|
64
|
+
- bin/summon
|
65
|
+
- bin/summonh
|
66
|
+
- ispec/integration_spec.rb
|
67
|
+
- lib/summon.rb
|
68
|
+
- lib/summon/cli.rb
|
69
|
+
- lib/summon/log.rb
|
70
|
+
- lib/summon/schema.rb
|
71
|
+
- lib/summon/schema/availability.rb
|
72
|
+
- lib/summon/schema/citation.rb
|
73
|
+
- lib/summon/schema/date.rb
|
74
|
+
- lib/summon/schema/document.rb
|
75
|
+
- lib/summon/schema/error.rb
|
76
|
+
- lib/summon/schema/facet.rb
|
77
|
+
- lib/summon/schema/query.rb
|
78
|
+
- lib/summon/schema/range.rb
|
79
|
+
- lib/summon/schema/search.rb
|
80
|
+
- lib/summon/schema/suggestion.rb
|
81
|
+
- lib/summon/service.rb
|
82
|
+
- lib/summon/transport.rb
|
83
|
+
- lib/summon/transport/canned.json
|
84
|
+
- lib/summon/transport/canned.rb
|
85
|
+
- lib/summon/transport/errors.rb
|
86
|
+
- lib/summon/transport/headers.rb
|
87
|
+
- lib/summon/transport/http.rb
|
88
|
+
- lib/summon/transport/qstring.rb
|
89
|
+
- script/console
|
90
|
+
- script/destroy
|
91
|
+
- script/generate
|
92
|
+
- spec/spec.opts
|
93
|
+
- spec/spec_helper.rb
|
94
|
+
- spec/summon/log_spec.rb
|
95
|
+
- spec/summon/schema/availability_spec.rb
|
96
|
+
- spec/summon/schema/citation_spec.rb
|
97
|
+
- spec/summon/schema/date_spec.rb
|
98
|
+
- spec/summon/schema/document_spec.rb
|
99
|
+
- spec/summon/schema/facet_spec.rb
|
100
|
+
- spec/summon/schema/query_spec.rb
|
101
|
+
- spec/summon/schema/range_spec.rb
|
102
|
+
- spec/summon/schema/search_spec.rb
|
103
|
+
- spec/summon/schema_spec.rb
|
104
|
+
- spec/summon/service_spec.rb
|
105
|
+
- spec/summon/transport/headers_spec.rb
|
106
|
+
- spec/summon/transport/http_spec.rb
|
107
|
+
- spec/summon/transport/qstring_spec.rb
|
108
|
+
- spec/summon_spec.rb
|
109
|
+
- summon.gemspec
|
110
|
+
has_rdoc: true
|
111
|
+
homepage: http://summon.rubyforge.org
|
112
|
+
licenses: []
|
113
|
+
|
114
|
+
post_install_message: |
|
115
|
+
|
116
|
+
For comprehensive documentation on Summon API options and usage visit:
|
117
|
+
|
118
|
+
http://api.summon.serialssolutions.com
|
119
|
+
|
120
|
+
rdoc_options:
|
121
|
+
- --main
|
122
|
+
- README.rdoc
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: "0"
|
130
|
+
version:
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: "0"
|
136
|
+
version:
|
137
|
+
requirements: []
|
138
|
+
|
139
|
+
rubyforge_project: summon
|
140
|
+
rubygems_version: 1.3.5
|
141
|
+
signing_key:
|
142
|
+
specification_version: 3
|
143
|
+
summary: Ruby language bindings for Serials Solutions Summon Unified Discovery Service
|
144
|
+
test_files: []
|
145
|
+
|