yanapi 0.3.3 → 0.4.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/CHANGELOG CHANGED
@@ -1,4 +1,8 @@
1
1
  == COMPLETED
2
+ === 0.4.0
3
+ Implemented multivalued parameters as Arrays. You can now search in many regions
4
+ and categories simultaneously.
5
+ Enhanced and updated the documentation.
2
6
  === 0.3.3
3
7
  Added a configuration file for Yard, the documentation should be compatible
4
8
  with {RubyDoc.info}[http://www.rubydoc.info] now.
@@ -21,16 +25,19 @@ Initial release of the lib.
21
25
 
22
26
 
23
27
  == PLANNED
24
- === 0.4.0
25
- Enhance the documentation.
26
-
27
- Implement multivalue parameters.
28
28
  === 0.5.0
29
29
  Implement semantic checks for all query types.
30
30
 
31
31
  Enhance the documentation.
32
32
  === 0.6.0
33
+ Implement the output formats <php>, <json>, <rss>.
34
+
35
+ Update the documentation.
33
36
  === 0.7.0
34
37
  === 0.8.0
35
38
  === 0.9.0
36
39
  === 1.0.0
40
+ Implement posting and tracking of questions.
41
+
42
+ Update the documentations.
43
+
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Andrei Beliankou, University of Trier, Germany
1
+ Copyright (c) 2011 Andrei Beliankou
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README CHANGED
@@ -1,8 +1,10 @@
1
1
  = YANAPI
2
2
 
3
3
  * {RubyGems}[http://rubygems.org/gems/yanapi]
4
- * Developers {Homepage}[http://www.uni-trier.de/index.php?id=24140]
4
+ * {Bug Tracker}[https://github.com/arbox/yanapi/issues]
5
5
  * {YANAPI Project Page}[http://yanapi.rubyforge.org/]
6
+ * Developers {Homepage}[http://www.bu.chsta.be]
7
+
6
8
 
7
9
  == DESCRIPTION
8
10
 
@@ -62,11 +64,12 @@ A small example shall demostrate the usage:
62
64
  :search_in => 'question',
63
65
  :type => 'resolved',
64
66
  :results => 2,
65
- :output => 'xml'
67
+ :output => 'xml',
68
+ :region => ['us', 'de']
66
69
  }
67
70
  }
68
71
  api = YANAPI::API.new(params)
69
- api.get # => default xml structure
72
+ api.get # => String
70
73
 
71
74
 
72
75
  For details on particular keys and defaults see {the official description}[http://developer.yahoo.com/answers/] and the RDoc documentation in this library.
@@ -12,6 +12,7 @@ module YANAPI
12
12
  SERVICE = 'AnswersService'
13
13
  SERVICE_VERSION = 'V1'
14
14
  VALID_PARAMS = [:appid, :output, :callback]
15
+ MULTIVALUED_PARAMS = [:region, :category_id, :category_name]
15
16
  REQUIRED_PARAMS = [:appid]
16
17
  VALID_OUTPUT_FORMATS = [nil, 'xml', 'php', 'rss', 'json']
17
18
 
@@ -65,14 +66,22 @@ module YANAPI
65
66
  "Output type #{params[:output]} is incompatible with <:callback>!"
66
67
  end
67
68
 
68
- # It accepts only unique values for every parameter,
69
- # they can be Strings or Numbers.
70
- # We do not support multiple values for categories and regions yet.
71
- # Multiple values will be provided as Arrays:
72
- # :category_id => [123, 456, 789].
69
+ # It accepts only unique values for every parameter other than:
70
+ # * :category_id;
71
+ # * :category_name;
72
+ # * :region.
73
+ # They can be strings, arrays or numbers:
74
+ # :category_id => [123, 456, 789].
73
75
  params.each_pair do |k, v|
74
- unless (v.kind_of?(String) || v.kind_of?(Fixnum))
75
- fail UserError, "The value <:#{k}> is not unique!"
76
+ unless (v.kind_of?(String) || v.kind_of?(Fixnum) || v.kind_of?(Array))
77
+ fail(UserError,
78
+ "The value type <#{v.class}> for the key <:#{k}> is wrong!")
79
+ end
80
+
81
+ if v.kind_of?(Array)
82
+ unless MULTIVALUED_PARAMS.include?(k)
83
+ fail UserError, "The value of <:#{k}> must, but is not unique!"
84
+ end
76
85
  end
77
86
  end
78
87
 
@@ -1,3 +1,3 @@
1
1
  module YANAPI
2
- VERSION = '0.3.3'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -31,7 +31,8 @@ class TestQuery < Test::Unit::TestCase
31
31
  :SERVICE_VERSION,
32
32
  :VALID_PARAMS,
33
33
  :REQUIRED_PARAMS,
34
- :VALID_OUTPUT_FORMATS
34
+ :VALID_OUTPUT_FORMATS,
35
+ :MULTIVALUED_PARAMS
35
36
  ]
36
37
  defined_constants.each do |const|
37
38
  assert(YANAPI::Query.const_defined?(const))
@@ -47,6 +48,14 @@ class TestQuery < Test::Unit::TestCase
47
48
 
48
49
  ## Interface tests
49
50
 
51
+ # It should reject any key with values other than <Fixnum>, <String>, <Array>.
52
+ def test_type_of_value
53
+ @params[:query_params][:region] = {'a'=>1}
54
+ e = assert_raises(YANAPI::UserError) { YANAPI::Query.new(@params) }
55
+ assert_match(/The value type <Hash> for the key <:region> is wrong!/,
56
+ e.message)
57
+ end
58
+
50
59
  # It should reject the input hash without <:appid> parameter.
51
60
  def test_missing_appid
52
61
  @params[:query_params].delete(:appid)
@@ -86,10 +95,11 @@ class TestQuery < Test::Unit::TestCase
86
95
  assert_raises(YANAPI::UserError) { YANAPI::Query.new(@params) }
87
96
  end
88
97
 
89
- # It should reject not unique values.
98
+ # It should reject not unique values for not predefined parameters.
90
99
  def test_uniqueness_of_values
91
- @params[:query_params][:category_id] = ['123', 345]
92
- assert_raises(YANAPI::UserError) { YANAPI::Query.new(@params) }
100
+ @params[:query_params][:appid] = ['123', 345]
101
+ e = assert_raises(YANAPI::UserError) { YANAPI::Query.new(@params) }
102
+ assert_match(/The value of <:appid> must, but is not unique!/, e.message)
93
103
  end
94
104
 
95
105
 
@@ -98,12 +108,16 @@ class TestQuery < Test::Unit::TestCase
98
108
  # It should create well formed urls.
99
109
  def test_url_form
100
110
  q = YANAPI::Query.new(@params)
101
- print q.inspect
102
111
  etalon_url = 'http://answers.yahooapis.com/AnswersService/V1/questionSearch?appid=YahooDemo&output=xml&query=Haus'
103
112
  real_url = q.instance_variable_get(:@url).to_s
104
113
  assert_equal(etalon_url, real_url)
105
114
 
106
- warn "\nWARNING! Expand this test for multivalue parameters!\n"
115
+ @params[:query_params][:region] = ['us', 'de']
116
+ q = YANAPI::Query.new(@params)
117
+ etalon_url = 'http://answers.yahooapis.com/AnswersService/V1/questionSearch?appid=YahooDemo&output=xml&query=Haus&region=de&region=us'
118
+ real_url = q.instance_variable_get(:@url).to_s
119
+ assert_equal(etalon_url, real_url)
120
+
107
121
  end
108
122
 
109
123
  # It should return <nil> if the server response contains
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yanapi
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 3
10
- version: 0.3.3
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrei Beliankou
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-10 00:00:00 Z
18
+ date: 2011-08-11 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: nokogiri