milk1000cc-web_service_simple 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +4 -0
- data/lib/web_service/simple.rb +29 -2
- data/spec/web_service/simple_spec.rb +72 -0
- data/web_service_simple.gemspec +2 -2
- metadata +3 -4
data/README.textile
CHANGED
data/lib/web_service/simple.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'logger'
|
2
2
|
require 'net/http'
|
3
3
|
require 'uri'
|
4
|
+
require 'cgi'
|
4
5
|
|
5
6
|
require 'web_service/simple/response'
|
6
7
|
require 'web_service/simple/response_code_error'
|
@@ -8,7 +9,7 @@ require 'web_service/simple/parser'
|
|
8
9
|
|
9
10
|
module WebService
|
10
11
|
class Simple
|
11
|
-
VERSION = '0.0.
|
12
|
+
VERSION = '0.0.4'
|
12
13
|
|
13
14
|
attr_accessor :base_url
|
14
15
|
attr_accessor :basic_params
|
@@ -61,7 +62,7 @@ module WebService
|
|
61
62
|
extra_params = args.shift if args.first.is_a?(Hash)
|
62
63
|
end
|
63
64
|
|
64
|
-
params = @basic_params.merge(extra_params)
|
65
|
+
params = escape_query(@basic_params.merge(extra_params))
|
65
66
|
uri = URI("#{ @base_url }#{ extra_path }?#{ params }")
|
66
67
|
|
67
68
|
log "Request URL is #{ uri }"
|
@@ -76,6 +77,28 @@ module WebService
|
|
76
77
|
Response.new(response.body, response_parser)
|
77
78
|
end
|
78
79
|
|
80
|
+
def post(*args)
|
81
|
+
extra_path, extra_params = nil, {}
|
82
|
+
|
83
|
+
if args.first.is_a?(Hash)
|
84
|
+
extra_params = args.shift
|
85
|
+
else
|
86
|
+
extra_path = args.shift
|
87
|
+
extra_params = args.shift if args.first.is_a?(Hash)
|
88
|
+
end
|
89
|
+
|
90
|
+
params = escape_query(@basic_params.merge(extra_params))
|
91
|
+
uri = URI("#{ @base_url }#{ extra_path }")
|
92
|
+
|
93
|
+
log "Request URL is #{ uri } (data: #{ params })"
|
94
|
+
|
95
|
+
response = nil
|
96
|
+
Net::HTTP.start(uri.host, uri.port) { |http| response = http.post(uri.request_uri, params) }
|
97
|
+
raise ResponseCodeError.new(response) unless response.code == '200'
|
98
|
+
|
99
|
+
Response.new(response.body, response_parser)
|
100
|
+
end
|
101
|
+
|
79
102
|
private
|
80
103
|
def underscore(camel_cased_word)
|
81
104
|
camel_cased_word.to_s.gsub(/::/, '/').
|
@@ -88,5 +111,9 @@ module WebService
|
|
88
111
|
def log(message)
|
89
112
|
logger.info "[WebService::Simple] #{message}" if @debug
|
90
113
|
end
|
114
|
+
|
115
|
+
def escape_query(query)
|
116
|
+
query.map { |k, v| "#{ CGI.escape(k.to_s) }=#{ CGI.escape(v.to_s) }" } * '&'
|
117
|
+
end
|
91
118
|
end
|
92
119
|
end
|
@@ -175,4 +175,76 @@ describe WebService::Simple do
|
|
175
175
|
end
|
176
176
|
end
|
177
177
|
end
|
178
|
+
|
179
|
+
describe '#post' do
|
180
|
+
before do
|
181
|
+
FakeWeb.clean_registry
|
182
|
+
FakeWeb.allow_net_connect = false
|
183
|
+
end
|
184
|
+
|
185
|
+
before do
|
186
|
+
@service = WebService::Simple.new(:base_url => 'http://api.example.com', :param => { :key => 'xxx' })
|
187
|
+
end
|
188
|
+
|
189
|
+
before do
|
190
|
+
@io = StringIO.new
|
191
|
+
@logger = Logger.new(@io)
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'は、POST リクエストを送信して、Response オブジェクトを返すこと' do
|
195
|
+
FakeWeb.register_uri(:post, 'http://api.example.com', :body => 'ok')
|
196
|
+
|
197
|
+
response = @service.post
|
198
|
+
response.class.should == WebService::Simple::Response
|
199
|
+
response.content.should == 'ok'
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'は、リクエストの結果、レスポンスコードが 200 以外ならば、例外 ResponseCodeError が発生すること' do
|
203
|
+
FakeWeb.register_uri(:post, 'http://api.example.com', :body => 'nf', :status => ['404', 'Not Found'])
|
204
|
+
begin
|
205
|
+
@service.post
|
206
|
+
rescue WebService::Simple::ResponseCodeError => e
|
207
|
+
e.response_code.should == '404'
|
208
|
+
e.response_body.should == 'nf'
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'は、引数に応じて、よしなにリクエストすること' do
|
213
|
+
FakeWeb.register_uri(:post, 'http://api.example.com', :body => 'ok1')
|
214
|
+
FakeWeb.register_uri(:post, 'http://api.example.com/hage', :body => 'ok2')
|
215
|
+
|
216
|
+
@service.post(:word => 'yyy').content.should == 'ok1'
|
217
|
+
@service.post('/hage', :word => 'yyy').content.should == 'ok2'
|
218
|
+
@service.post('/hage').content.should == 'ok2'
|
219
|
+
end
|
220
|
+
|
221
|
+
it 'は、デバッグモードではないならば、ログを出力しないこと' do
|
222
|
+
@service.logger = @logger
|
223
|
+
@service.debug = false
|
224
|
+
@io.string.should be_empty
|
225
|
+
end
|
226
|
+
|
227
|
+
describe 'で、デバッグモードのとき' do
|
228
|
+
before do
|
229
|
+
FakeWeb.register_uri(:post, @base_url, :body => 'ok')
|
230
|
+
@service = WebService::Simple.new(:base_url => @base_url, :debug => true)
|
231
|
+
end
|
232
|
+
|
233
|
+
it 'は、logger に対して INFO レベルのログを出力すること' do
|
234
|
+
@logger.level = Logger::INFO
|
235
|
+
@service.logger = @logger
|
236
|
+
@service.post
|
237
|
+
|
238
|
+
@io.string.should =~ %r!#{ Regexp.escape(@base_url) }!
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'は、logger が INFO より上のレベルに設定されていればログを出力しないこと' do
|
242
|
+
@logger.level = Logger::WARN
|
243
|
+
@service.logger = @logger
|
244
|
+
@service.post
|
245
|
+
|
246
|
+
@io.string.should be_empty
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
178
250
|
end
|
data/web_service_simple.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "web_service_simple"
|
3
|
-
s.version = "0.0.
|
4
|
-
s.date = "2009-
|
3
|
+
s.version = "0.0.4"
|
4
|
+
s.date = "2009-09-10"
|
5
5
|
s.summary = "Simple Interface To Web Services APIs (Ruby)"
|
6
6
|
s.email = "info@milk1000.cc"
|
7
7
|
s.homepage = "http://github.com/milk1000cc/web_service_simple"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: milk1000cc-web_service_simple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- milk1000cc
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-10 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -41,7 +41,6 @@ files:
|
|
41
41
|
- web_service_simple.gemspec
|
42
42
|
has_rdoc: true
|
43
43
|
homepage: http://github.com/milk1000cc/web_service_simple
|
44
|
-
licenses:
|
45
44
|
post_install_message:
|
46
45
|
rdoc_options: []
|
47
46
|
|
@@ -62,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
61
|
requirements: []
|
63
62
|
|
64
63
|
rubyforge_project:
|
65
|
-
rubygems_version: 1.
|
64
|
+
rubygems_version: 1.2.0
|
66
65
|
signing_key:
|
67
66
|
specification_version: 2
|
68
67
|
summary: Simple Interface To Web Services APIs (Ruby)
|