milk1000cc-web_service_simple 0.0.3 → 0.0.4
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/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)
|