yanapi 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,112 @@
1
+ require 'test/unit'
2
+ require 'yanapi/query'
3
+ require 'fakeweb'
4
+
5
+ class TestQuery < Test::Unit::TestCase
6
+ def setup
7
+ @params = {:appid => 'MyID', :method => 'questionSearch'}
8
+ end
9
+ def teardown
10
+ end
11
+
12
+ def test_public_methods
13
+ q = YANAPI::Query.new(@params)
14
+ assert_respond_to(q, :get)
15
+ end
16
+
17
+ def test_constants
18
+ assert_equal('http://answers.yahooapis.com', YANAPI::Query::HOST)
19
+ assert_equal('AnswersService', YANAPI::Query::SERVICE)
20
+ assert_equal('V1', YANAPI::Query::SERVICE_VERSION)
21
+ end
22
+
23
+ def test_missing_appid
24
+ @params.delete(:appid)
25
+ assert_raises(YANAPI::Error) do
26
+ q = YANAPI::Query.new(@params)
27
+ end
28
+ end
29
+
30
+ # a Query can be only initialized with a valid value for :method
31
+ def test_missing_method
32
+ @params.delete(:method)
33
+ assert_raises(YANAPI::Error) do
34
+ q = YANAPI::Query.new(@params)
35
+ end
36
+ end
37
+
38
+ # :method may have only the following values:
39
+ # questionSearch|getByCategory|getQuestion|getByUser
40
+ def test_method_semantics
41
+ @params[:method] = 'someSampleMethod'
42
+ assert_raises(YANAPI::Error) do
43
+ q = YANAPI::Query.new(@params)
44
+ end
45
+ end
46
+
47
+ # :output may be missing
48
+ def test_missing_output
49
+ @params.delete(:output)
50
+ q = YANAPI::Query.new(@params)
51
+ assert_equal('xml', q.output)
52
+ end
53
+
54
+ # :output may be NIL or have values xml|json|php|rss
55
+ def test_output_semantics
56
+ @params[:output] = 'trash'
57
+ assert_raises(YANAPI::Error) do
58
+ q = YANAPI::Query.new(@params)
59
+ end
60
+ end
61
+
62
+ # :callback may be used only with :output => 'json'
63
+ def test_parameters_clash
64
+ # the default value 'xml' is set internally during the initialization
65
+ # we may delete the input value
66
+ @params.delete(:output)
67
+ @params[:callback] = 'wrapper'
68
+ assert_raises(YANAPI::Error) do
69
+ q = YANAPI::Query.new(@params)
70
+ end
71
+ end
72
+
73
+ # :callback may be used only with :output => 'json'
74
+ def test_parameters_pairing
75
+ @params[:output] = 'json'
76
+ @params[:callback] = 'wrapper'
77
+ assert_nothing_raised {q = YANAPI::Query.new(@params)}
78
+ end
79
+
80
+ # we can get an empty response set with valid xml structure
81
+ # and the status code 200 HTTP OK
82
+ # but we should declene this
83
+ def test_empty_response
84
+ q = YANAPI::Query.new(@params)
85
+ page = File.open('test/data/empty_result.txt') {|f| f.read}
86
+ FakeWeb.register_uri(:get, q.url, :response => page)
87
+ assert_raises(YANAPI::EmptyResponse) {q.get}
88
+ end
89
+
90
+ def test_response_with_error
91
+ q = YANAPI::Query.new(@params)
92
+
93
+ page = File.open('test/data/response_with_error.txt') {|f| f.read}
94
+ FakeWeb.register_uri(:get, q.url, :response => page)
95
+ assert_raises(YANAPI::ContentError) {q.get}
96
+
97
+ page = File.open('test/data/error_code.txt') {|f| f.read}
98
+ FakeWeb.register_uri(:get, q.url, :response => page)
99
+ assert_raises(YANAPI::ContentError) {q.get}
100
+
101
+ page = File.open('test/data/bad_xml.txt') {|f| f.read}
102
+ FakeWeb.register_uri(:get, q.url, :response => page)
103
+ assert_raises(YANAPI::ContentError) {q.get}
104
+ end
105
+
106
+ def test_successfull_response
107
+ q = YANAPI::Query.new(@params)
108
+ page = File.open('test/data/successfull_response.txt') {|f| f.read}
109
+ FakeWeb.register_uri(:get, q.url, :response => page)
110
+ assert_nothing_raised {q.get}
111
+ end
112
+ end
@@ -0,0 +1,64 @@
1
+ require 'test/unit'
2
+ require 'yanapi/term_query'
3
+ require 'fakeweb'
4
+
5
+ class TestTermQuery < Test::Unit::TestCase
6
+ def setup
7
+ @params = {
8
+ :query => 'Auto',
9
+ :appid => 'YahooDemo'
10
+ }
11
+ end
12
+ def teardown
13
+ end
14
+
15
+ # questionSearch needs a unique :query
16
+ def test_missing_query
17
+ @params.delete(:query)
18
+ assert_raises(YANAPI::Error) do
19
+ q = YANAPI::TermQuery.new(@params)
20
+ end
21
+ end
22
+
23
+ # parameters can be only: query|search_in|category_query|category_name|
24
+ # region|date_range|sort|appid|type|start|results|output|callback
25
+ def test_parameters_semantics
26
+ assert_nothing_raised {q = YANAPI::TermQuery.new(@params)}
27
+ @params[:trash] = 'trash'
28
+ assert_raises(YANAPI::Error) do
29
+ q = YANAPI::TermQuery.new(@params)
30
+ end
31
+ end
32
+
33
+ # validates presense of query
34
+ # validates uniqueness of query
35
+ # validates the range of :start
36
+ # validates the range of :results
37
+ # validates the :region semantics
38
+ # validates the :type uniqueness and semantics
39
+ # validates uniqueness of the :date_range and its semantics
40
+ # validates semantics of all possible parameter names
41
+
42
+ def test_start_range
43
+ end
44
+
45
+ def test_result_range
46
+ end
47
+
48
+ def test_region_semantics
49
+
50
+ end
51
+
52
+ # ?? not sure
53
+ def test_type_uniqueness
54
+ end
55
+
56
+ def test_type_semantics
57
+ end
58
+
59
+ def test_date_uniqueness
60
+ end
61
+
62
+ def test_date_semantics
63
+ end
64
+ end #TestTermQuery
@@ -0,0 +1,23 @@
1
+ lib_path = File.expand_path('../lib', __FILE__) # strange??
2
+ $LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
3
+ require 'yanapi/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "yanapi"
7
+ s.summary = 'YANAPI is an API for Yahoo! Answers web services.' # it is the description for 'gem list -d'
8
+ s.description = 'YANAPI is a programmatic API for Yahoo! Answers web services.It enables you to search for questions using key words, user IDs, category names and IDs and a pricise ID of a question. The output is provided in the xml format as well as json, php and rss.' # it appears on the RubyGems page
9
+ s.rubyforge_project = "yanapi"
10
+ s.version = YANAPI::VERSION
11
+ s.author = "Andrei Beliankou"
12
+ s.email = "a.belenkow@uni-trier.de"
13
+ s.homepage = "http://www.uni-trier.de/index.php?id=34451"
14
+ # s.require_paths = 'lib' # it is the default value, why to use?
15
+ s.add_dependency('nokogiri')
16
+ s.add_development_dependency('fakeweb')
17
+ s.rdoc_options = ["-m", "README.rdoc"]
18
+ s.extra_rdoc_files = ["README.rdoc", "LICENSE"]
19
+ s.platform = Gem::Platform::RUBY
20
+ s.required_ruby_version = '>=1.8.7'
21
+ s.files = Dir['**/*']
22
+ s.test_files = `ls test/test_*.rb`.split("\n")
23
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yanapi
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Andrei Beliankou
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-26 23:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: nokogiri
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: fakeweb
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: YANAPI is a programmatic API for Yahoo! Answers web services.It enables you to search for questions using key words, user IDs, category names and IDs and a pricise ID of a question. The output is provided in the xml format as well as json, php and rss.
50
+ email: a.belenkow@uni-trier.de
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README.rdoc
57
+ - LICENSE
58
+ files:
59
+ - README.rdoc
60
+ - yanapi.gemspec
61
+ - test/test_query.rb
62
+ - test/test_term_query.rb
63
+ - test/data/bad_xml.txt
64
+ - test/data/empty_result.txt
65
+ - test/data/error_code.txt
66
+ - test/data/response_with_error.txt
67
+ - test/data/successfull_response.txt
68
+ - LICENSE
69
+ - Rakefile
70
+ - README
71
+ - lib/yanapi/error.rb
72
+ - lib/yanapi/user_query.rb
73
+ - lib/yanapi/question_query.rb
74
+ - lib/yanapi/term_query.rb
75
+ - lib/yanapi/category_query.rb
76
+ - lib/yanapi/version.rb
77
+ - lib/yanapi/query.rb
78
+ - lib/yanapi.rb
79
+ has_rdoc: true
80
+ homepage: http://www.uni-trier.de/index.php?id=34451
81
+ licenses: []
82
+
83
+ post_install_message:
84
+ rdoc_options:
85
+ - -m
86
+ - README.rdoc
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ hash: 57
95
+ segments:
96
+ - 1
97
+ - 8
98
+ - 7
99
+ version: 1.8.7
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ requirements: []
110
+
111
+ rubyforge_project: yanapi
112
+ rubygems_version: 1.3.7
113
+ signing_key:
114
+ specification_version: 3
115
+ summary: YANAPI is an API for Yahoo! Answers web services.
116
+ test_files:
117
+ - test/test_query.rb
118
+ - test/test_term_query.rb