yanapi 0.0.1 → 0.1.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/Rakefile +1 -1
- data/lib/yanapi/category_query.rb +27 -3
- data/lib/yanapi/common.rb +17 -0
- data/lib/yanapi/query.rb +3 -4
- data/lib/yanapi/term_query.rb +13 -9
- data/lib/yanapi/version.rb +1 -1
- data/lib/yanapi.rb +2 -0
- data/test/test_category_query.rb +61 -0
- data/test/test_common.rb +40 -0
- data/test/test_query.rb +6 -11
- data/test/test_question_query.rb +10 -0
- data/test/test_term_query.rb +5 -33
- data/test/test_user_query.rb +9 -0
- data/test/test_yanapi.rb +8 -0
- data/yanapi.gemspec +4 -5
- metadata +16 -24
data/Rakefile
CHANGED
@@ -1,10 +1,34 @@
|
|
1
|
+
|
1
2
|
module YANAPI
|
2
3
|
|
3
4
|
class CategoryQuery < Query
|
5
|
+
|
6
|
+
include Common
|
4
7
|
|
5
|
-
def initialize(
|
6
|
-
|
8
|
+
def initialize(params)
|
9
|
+
params[:method] = 'getByCategory'
|
10
|
+
super
|
7
11
|
end
|
8
|
-
|
12
|
+
|
13
|
+
private
|
14
|
+
# specific checks for CategoryQuery
|
15
|
+
#--
|
16
|
+
def check_params(params)
|
17
|
+
unless params[:category_id] || params[:category_name]
|
18
|
+
raise Error, "Category is missing!"
|
19
|
+
end
|
20
|
+
|
21
|
+
allowed = %w{category_id category_name region
|
22
|
+
date_range sort appid type start
|
23
|
+
results output callback method
|
24
|
+
}
|
25
|
+
|
26
|
+
# in the module Common
|
27
|
+
check_semantics(allowed, params)
|
28
|
+
basic_check(params)
|
29
|
+
|
30
|
+
super
|
31
|
+
end
|
32
|
+
|
9
33
|
end # CategoryQuery
|
10
34
|
end # module
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module YANAPI
|
2
|
+
module Common
|
3
|
+
private
|
4
|
+
def basic_check(params)
|
5
|
+
# fake
|
6
|
+
end
|
7
|
+
|
8
|
+
def check_semantics(allowed, actual)
|
9
|
+
actual.each_key do |param|
|
10
|
+
unless allowed.include?(param.to_s)
|
11
|
+
raise Error, "The parameter #{param} is not allowed!"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end # Common
|
17
|
+
end # YANAPI
|
data/lib/yanapi/query.rb
CHANGED
@@ -21,8 +21,8 @@ module YANAPI
|
|
21
21
|
|
22
22
|
# it is a bad idea to alter the parameters hash
|
23
23
|
# that's why we duplicate the parameters
|
24
|
-
|
25
|
-
@url = build_url(
|
24
|
+
check_params(params)
|
25
|
+
@url = build_url(params.dup)
|
26
26
|
|
27
27
|
$stderr.puts 'Full url:', @url if $DEBUG
|
28
28
|
end
|
@@ -130,9 +130,8 @@ module YANAPI
|
|
130
130
|
end
|
131
131
|
|
132
132
|
if params[:output] != 'json' && params[:callback]
|
133
|
-
raise Error, "
|
133
|
+
raise Error, "You may not use callback with output type: #{@output}!"
|
134
134
|
end
|
135
|
-
return params
|
136
135
|
end
|
137
136
|
|
138
137
|
# proves the presense of an error
|
data/lib/yanapi/term_query.rb
CHANGED
@@ -2,27 +2,31 @@ module YANAPI
|
|
2
2
|
|
3
3
|
class TermQuery < Query
|
4
4
|
|
5
|
+
include Common
|
6
|
+
|
5
7
|
def initialize(params)
|
6
|
-
|
7
8
|
params[:method] = 'questionSearch'
|
8
9
|
super
|
9
10
|
end
|
10
11
|
|
11
12
|
private
|
12
|
-
# specific checks for
|
13
|
-
#--
|
14
13
|
# validates presense of query
|
15
14
|
# validates uniqueness of query
|
16
|
-
# validates the range of :start
|
17
|
-
# validates the range of :results
|
18
|
-
# validates the :region semantics
|
19
|
-
# validates the :type uniqueness and semantics
|
20
|
-
# validates uniqueness of the :date_range and its semantics
|
21
|
-
# validates semantics of all possible parameter names
|
22
15
|
def check_params(params)
|
23
16
|
unless params[:query]
|
24
17
|
raise Error, "Query is missing!"
|
25
18
|
end
|
19
|
+
|
20
|
+
allowed = %w{query search_in category_id
|
21
|
+
category_name region date_range
|
22
|
+
sort appid type start results
|
23
|
+
output callback method
|
24
|
+
}
|
25
|
+
|
26
|
+
# in the module Common
|
27
|
+
check_semantics(allowed, params)
|
28
|
+
basic_check(params)
|
29
|
+
|
26
30
|
super
|
27
31
|
end
|
28
32
|
|
data/lib/yanapi/version.rb
CHANGED
data/lib/yanapi.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'yanapi'
|
3
|
+
require 'fakeweb'
|
4
|
+
|
5
|
+
class TestCategoryQuery < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@params = {
|
8
|
+
:category_name => 'Ausgehen',
|
9
|
+
:appid => 'YahooDemo'
|
10
|
+
}
|
11
|
+
end
|
12
|
+
def teardown
|
13
|
+
end
|
14
|
+
|
15
|
+
# getByCategory (CategorySearch) needs either :category_id or :category_name
|
16
|
+
def test_missing_category
|
17
|
+
@params.delete(:category_name)
|
18
|
+
@params.delete(:category_id)
|
19
|
+
assert_raises(YANAPI::Error) {YANAPI::CategoryQuery.new(@params)}
|
20
|
+
end
|
21
|
+
|
22
|
+
# parameters can be only: category_name|category_name|
|
23
|
+
# region|date_range|sort|appid|type|start|results|output|callback
|
24
|
+
def test_parameters_semantics
|
25
|
+
assert_nothing_raised {YANAPI::CategoryQuery.new(@params)}
|
26
|
+
@params[:trash] = 'trash'
|
27
|
+
assert_raises(YANAPI::Error) {YANAPI::CategoryQuery.new(@params)}
|
28
|
+
end
|
29
|
+
|
30
|
+
# validates presense of query
|
31
|
+
# validates uniqueness of query
|
32
|
+
# validates the range of :start
|
33
|
+
# validates the range of :results
|
34
|
+
# validates the :region semantics
|
35
|
+
# validates the :type uniqueness and semantics
|
36
|
+
# validates uniqueness of the :date_range and its semantics
|
37
|
+
# validates semantics of all possible parameter names
|
38
|
+
|
39
|
+
def test_start_range
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_result_range
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_region_semantics
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
# ?? not sure
|
50
|
+
def test_type_uniqueness
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_type_semantics
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_date_uniqueness
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_date_semantics
|
60
|
+
end
|
61
|
+
end #TestTermQuery
|
data/test/test_common.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'yanapi'
|
3
|
+
|
4
|
+
class TestCommon < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def teardown
|
9
|
+
end
|
10
|
+
|
11
|
+
# validates the range of :start
|
12
|
+
# validates the range of :results
|
13
|
+
# validates the :region semantics
|
14
|
+
# validates the :type uniqueness and semantics
|
15
|
+
# validates uniqueness of the :date_range and its semantics
|
16
|
+
# validates semantics of all possible parameter names
|
17
|
+
|
18
|
+
def test_start_range
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_result_range
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_region_semantics
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
# ?? not sure
|
29
|
+
def test_type_uniqueness
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_type_semantics
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_date_uniqueness
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_date_semantics
|
39
|
+
end
|
40
|
+
end
|
data/test/test_query.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'test/unit'
|
2
|
-
require 'yanapi
|
2
|
+
require 'yanapi'
|
3
3
|
require 'fakeweb'
|
4
4
|
|
5
5
|
class TestQuery < Test::Unit::TestCase
|
@@ -18,6 +18,7 @@ class TestQuery < Test::Unit::TestCase
|
|
18
18
|
assert_equal('http://answers.yahooapis.com', YANAPI::Query::HOST)
|
19
19
|
assert_equal('AnswersService', YANAPI::Query::SERVICE)
|
20
20
|
assert_equal('V1', YANAPI::Query::SERVICE_VERSION)
|
21
|
+
assert(YANAPI::VERSION.is_a?(String) && ! YANAPI::VERSION.empty?)
|
21
22
|
end
|
22
23
|
|
23
24
|
def test_missing_appid
|
@@ -59,22 +60,16 @@ class TestQuery < Test::Unit::TestCase
|
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
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
63
|
|
73
64
|
# :callback may be used only with :output => 'json'
|
74
65
|
def test_parameters_pairing
|
75
66
|
@params[:output] = 'json'
|
76
67
|
@params[:callback] = 'wrapper'
|
77
68
|
assert_nothing_raised {q = YANAPI::Query.new(@params)}
|
69
|
+
@params[:output] = 'xml'
|
70
|
+
assert_raises(YANAPI::Error) {YANAPI::Query.new(@params)}
|
71
|
+
@params.delete(:output)
|
72
|
+
assert_raises(YANAPI::Error) {YANAPI::Query.new(@params)}
|
78
73
|
end
|
79
74
|
|
80
75
|
# we can get an empty response set with valid xml structure
|
data/test/test_term_query.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'test/unit'
|
2
|
-
require 'yanapi
|
2
|
+
require 'yanapi'
|
3
3
|
require 'fakeweb'
|
4
4
|
|
5
5
|
class TestTermQuery < Test::Unit::TestCase
|
@@ -16,14 +16,14 @@ class TestTermQuery < Test::Unit::TestCase
|
|
16
16
|
def test_missing_query
|
17
17
|
@params.delete(:query)
|
18
18
|
assert_raises(YANAPI::Error) do
|
19
|
-
|
19
|
+
YANAPI::TermQuery.new(@params)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# parameters can be only: query|search_in|
|
24
|
-
# region|date_range|sort|appid|type|start|results|output|callback
|
23
|
+
# parameters can be only: query|search_in|category_id|category_name|
|
24
|
+
# region|date_range|sort|appid|type|start|results|output|callback|method
|
25
25
|
def test_parameters_semantics
|
26
|
-
assert_nothing_raised {
|
26
|
+
assert_nothing_raised {YANAPI::TermQuery.new(@params)}
|
27
27
|
@params[:trash] = 'trash'
|
28
28
|
assert_raises(YANAPI::Error) do
|
29
29
|
q = YANAPI::TermQuery.new(@params)
|
@@ -32,33 +32,5 @@ class TestTermQuery < Test::Unit::TestCase
|
|
32
32
|
|
33
33
|
# validates presense of query
|
34
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
35
|
|
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
36
|
end #TestTermQuery
|
data/test/test_yanapi.rb
ADDED
data/yanapi.gemspec
CHANGED
@@ -10,14 +10,13 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.version = YANAPI::VERSION
|
11
11
|
s.author = "Andrei Beliankou"
|
12
12
|
s.email = "a.belenkow@uni-trier.de"
|
13
|
-
s.homepage = "http://www.uni-trier.de/index.php?id=34451"
|
14
|
-
|
15
|
-
s.add_dependency('nokogiri')
|
13
|
+
s.homepage = "http://www.uni-trier.de/index.php?id=34451" # move on qa.uni
|
14
|
+
s.add_runtime_dependency('nokogiri')
|
16
15
|
s.add_development_dependency('fakeweb')
|
17
16
|
s.rdoc_options = ["-m", "README.rdoc"]
|
18
17
|
s.extra_rdoc_files = ["README.rdoc", "LICENSE"]
|
19
|
-
s.platform = Gem::Platform::RUBY
|
20
|
-
s.required_ruby_version = '>=1.8
|
18
|
+
s.platform = Gem::Platform::RUBY # how to run it on JRuby?
|
19
|
+
s.required_ruby_version = '>=1.8' # is it a correct notation?
|
21
20
|
s.files = Dir['**/*']
|
22
21
|
s.test_files = `ls test/test_*.rb`.split("\n")
|
23
22
|
end
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yanapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Andrei Beliankou
|
@@ -15,7 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-
|
13
|
+
date: 2011-04-05 00:00:00 +02:00
|
19
14
|
default_executable:
|
20
15
|
dependencies:
|
21
16
|
- !ruby/object:Gem::Dependency
|
@@ -26,9 +21,6 @@ dependencies:
|
|
26
21
|
requirements:
|
27
22
|
- - ">="
|
28
23
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
24
|
version: "0"
|
33
25
|
type: :runtime
|
34
26
|
version_requirements: *id001
|
@@ -40,9 +32,6 @@ dependencies:
|
|
40
32
|
requirements:
|
41
33
|
- - ">="
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
|
-
segments:
|
45
|
-
- 0
|
46
35
|
version: "0"
|
47
36
|
type: :development
|
48
37
|
version_requirements: *id002
|
@@ -58,8 +47,13 @@ extra_rdoc_files:
|
|
58
47
|
files:
|
59
48
|
- README.rdoc
|
60
49
|
- yanapi.gemspec
|
50
|
+
- test/test_yanapi.rb
|
51
|
+
- test/test_user_query.rb
|
61
52
|
- test/test_query.rb
|
53
|
+
- test/test_category_query.rb
|
62
54
|
- test/test_term_query.rb
|
55
|
+
- test/test_common.rb
|
56
|
+
- test/test_question_query.rb
|
63
57
|
- test/data/bad_xml.txt
|
64
58
|
- test/data/empty_result.txt
|
65
59
|
- test/data/error_code.txt
|
@@ -72,6 +66,7 @@ files:
|
|
72
66
|
- lib/yanapi/user_query.rb
|
73
67
|
- lib/yanapi/question_query.rb
|
74
68
|
- lib/yanapi/term_query.rb
|
69
|
+
- lib/yanapi/common.rb
|
75
70
|
- lib/yanapi/category_query.rb
|
76
71
|
- lib/yanapi/version.rb
|
77
72
|
- lib/yanapi/query.rb
|
@@ -91,28 +86,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
86
|
requirements:
|
92
87
|
- - ">="
|
93
88
|
- !ruby/object:Gem::Version
|
94
|
-
|
95
|
-
segments:
|
96
|
-
- 1
|
97
|
-
- 8
|
98
|
-
- 7
|
99
|
-
version: 1.8.7
|
89
|
+
version: "1.8"
|
100
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
91
|
none: false
|
102
92
|
requirements:
|
103
93
|
- - ">="
|
104
94
|
- !ruby/object:Gem::Version
|
105
|
-
hash: 3
|
106
|
-
segments:
|
107
|
-
- 0
|
108
95
|
version: "0"
|
109
96
|
requirements: []
|
110
97
|
|
111
98
|
rubyforge_project: yanapi
|
112
|
-
rubygems_version: 1.
|
99
|
+
rubygems_version: 1.5.2
|
113
100
|
signing_key:
|
114
101
|
specification_version: 3
|
115
102
|
summary: YANAPI is an API for Yahoo! Answers web services.
|
116
103
|
test_files:
|
104
|
+
- test/test_category_query.rb
|
105
|
+
- test/test_common.rb
|
117
106
|
- test/test_query.rb
|
107
|
+
- test/test_question_query.rb
|
118
108
|
- test/test_term_query.rb
|
109
|
+
- test/test_user_query.rb
|
110
|
+
- test/test_yanapi.rb
|