rest-core 1.0.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +6 -7
- data/CHANGES.md +137 -0
- data/Gemfile +1 -1
- data/README.md +183 -191
- data/TODO.md +5 -8
- data/example/multi.rb +31 -24
- data/example/simple.rb +28 -0
- data/example/use-cases.rb +194 -0
- data/lib/rest-core.rb +26 -19
- data/lib/rest-core/builder.rb +2 -2
- data/lib/rest-core/client.rb +40 -27
- data/lib/rest-core/client/universal.rb +16 -13
- data/lib/rest-core/client_oauth1.rb +5 -5
- data/lib/rest-core/engine/auto.rb +25 -0
- data/lib/rest-core/{app → engine}/dry.rb +1 -2
- data/lib/rest-core/engine/em-http-request.rb +39 -0
- data/lib/rest-core/engine/future/future.rb +106 -0
- data/lib/rest-core/engine/future/future_fiber.rb +39 -0
- data/lib/rest-core/engine/future/future_thread.rb +29 -0
- data/lib/rest-core/engine/rest-client.rb +56 -0
- data/lib/rest-core/middleware.rb +27 -5
- data/lib/rest-core/middleware/auth_basic.rb +5 -5
- data/lib/rest-core/middleware/bypass.rb +2 -2
- data/lib/rest-core/middleware/cache.rb +67 -54
- data/lib/rest-core/middleware/common_logger.rb +5 -8
- data/lib/rest-core/middleware/default_headers.rb +2 -2
- data/lib/rest-core/middleware/default_payload.rb +26 -2
- data/lib/rest-core/middleware/default_query.rb +4 -2
- data/lib/rest-core/middleware/default_site.rb +8 -6
- data/lib/rest-core/middleware/error_detector.rb +9 -16
- data/lib/rest-core/middleware/error_handler.rb +25 -11
- data/lib/rest-core/middleware/follow_redirect.rb +11 -14
- data/lib/rest-core/middleware/json_request.rb +19 -0
- data/lib/rest-core/middleware/json_response.rb +28 -0
- data/lib/rest-core/middleware/oauth1_header.rb +2 -7
- data/lib/rest-core/middleware/oauth2_header.rb +4 -7
- data/lib/rest-core/middleware/oauth2_query.rb +2 -2
- data/lib/rest-core/middleware/timeout.rb +21 -65
- data/lib/rest-core/middleware/timeout/{eventmachine_timer.rb → timer_em.rb} +3 -1
- data/lib/rest-core/middleware/timeout/timer_thread.rb +36 -0
- data/lib/rest-core/patch/multi_json.rb +8 -0
- data/lib/rest-core/test.rb +3 -12
- data/lib/rest-core/util/json.rb +65 -0
- data/lib/rest-core/util/parse_query.rb +2 -2
- data/lib/rest-core/version.rb +1 -1
- data/lib/rest-core/wrapper.rb +16 -16
- data/rest-core.gemspec +28 -27
- data/test/test_auth_basic.rb +14 -10
- data/test/test_builder.rb +7 -7
- data/test/test_cache.rb +126 -37
- data/test/test_client.rb +3 -1
- data/test/test_client_oauth1.rb +2 -3
- data/test/test_default_query.rb +17 -23
- data/test/test_em_http_request.rb +146 -0
- data/test/test_error_detector.rb +0 -1
- data/test/test_error_handler.rb +44 -0
- data/test/test_follow_redirect.rb +17 -19
- data/test/test_json_request.rb +28 -0
- data/test/test_json_response.rb +51 -0
- data/test/test_oauth1_header.rb +4 -4
- data/test/test_payload.rb +20 -12
- data/test/test_simple.rb +14 -0
- data/test/test_timeout.rb +11 -19
- data/test/test_universal.rb +5 -5
- data/test/test_wrapper.rb +19 -13
- metadata +28 -29
- data/doc/ToC.md +0 -7
- data/doc/dependency.md +0 -4
- data/doc/design.md +0 -4
- data/example/auto.rb +0 -51
- data/example/coolio.rb +0 -21
- data/example/eventmachine.rb +0 -30
- data/example/rest-client.rb +0 -16
- data/lib/rest-core/app/abstract/async_fiber.rb +0 -13
- data/lib/rest-core/app/auto.rb +0 -23
- data/lib/rest-core/app/coolio-async.rb +0 -32
- data/lib/rest-core/app/coolio-fiber.rb +0 -30
- data/lib/rest-core/app/coolio.rb +0 -9
- data/lib/rest-core/app/em-http-request-async.rb +0 -37
- data/lib/rest-core/app/em-http-request-fiber.rb +0 -45
- data/lib/rest-core/app/em-http-request.rb +0 -9
- data/lib/rest-core/app/rest-client.rb +0 -41
- data/lib/rest-core/middleware/json_decode.rb +0 -93
- data/lib/rest-core/middleware/timeout/coolio_timer.rb +0 -10
- data/pending/test_multi.rb +0 -123
- data/pending/test_test_util.rb +0 -86
- data/test/test_json_decode.rb +0 -24
@@ -5,7 +5,7 @@ class RestCore::Oauth2Header
|
|
5
5
|
def self.members; [:access_token_type, :access_token]; end
|
6
6
|
include RestCore::Middleware
|
7
7
|
|
8
|
-
def call env
|
8
|
+
def call env, &k
|
9
9
|
start_time = Time.now
|
10
10
|
headers = {'Authorization' =>
|
11
11
|
"#{access_token_type(env)} #{access_token(env)}"}.
|
@@ -14,11 +14,8 @@ class RestCore::Oauth2Header
|
|
14
14
|
event = Event::WithHeader.new(Time.now - start_time,
|
15
15
|
"Authorization: #{headers['Authorization']}") if headers
|
16
16
|
|
17
|
-
app.call(log(
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
def cache_key env
|
22
|
-
env.merge('cache.key' => "#{request_uri(env)}&#{access_token(env)}")
|
17
|
+
app.call(log(env.merge(REQUEST_HEADERS => headers ||
|
18
|
+
env[REQUEST_HEADERS]), event),
|
19
|
+
&k)
|
23
20
|
end
|
24
21
|
end
|
@@ -5,7 +5,7 @@ class RestCore::Oauth2Query
|
|
5
5
|
def self.members; [:access_token]; end
|
6
6
|
include RestCore::Middleware
|
7
7
|
|
8
|
-
def call env
|
8
|
+
def call env, &k
|
9
9
|
local = if access_token(env)
|
10
10
|
env.merge(REQUEST_QUERY =>
|
11
11
|
{'access_token' => access_token(env)}.
|
@@ -14,6 +14,6 @@ class RestCore::Oauth2Query
|
|
14
14
|
env
|
15
15
|
end
|
16
16
|
|
17
|
-
app.call(local)
|
17
|
+
app.call(local, &k)
|
18
18
|
end
|
19
19
|
end
|
@@ -7,9 +7,18 @@ class RestCore::Timeout
|
|
7
7
|
def self.members; [:timeout]; end
|
8
8
|
include RestCore::Middleware
|
9
9
|
|
10
|
-
def call env
|
11
|
-
return app.call(env) if env[DRY] || timeout(env) == 0
|
12
|
-
monitor(env){ |e|
|
10
|
+
def call env, &k
|
11
|
+
return app.call(env, &k) if env[DRY] || timeout(env) == 0
|
12
|
+
monitor(env){ |e|
|
13
|
+
app.call(e){ |r|
|
14
|
+
if r[ASYNC] ||
|
15
|
+
!(exp = (r[FAIL]||[]).find{ |f| f.kind_of?(::Timeout::Error) })
|
16
|
+
# we do nothing special for callback and rest-client
|
17
|
+
k.call(r)
|
18
|
+
else
|
19
|
+
# it would go to this branch only under response future
|
20
|
+
raise exp
|
21
|
+
end}}
|
13
22
|
end
|
14
23
|
|
15
24
|
def monitor env
|
@@ -20,73 +29,20 @@ class RestCore::Timeout
|
|
20
29
|
name
|
21
30
|
end
|
22
31
|
|
23
|
-
case class_name
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
response = yield(env.merge(TIMER => timer))
|
30
|
-
timer.cancel unless timer.canceled?
|
31
|
-
response
|
32
|
-
end
|
33
|
-
else
|
34
|
-
::Timeout.timeout(timeout(env)){ yield(env) }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def root_fiber?
|
39
|
-
if RestCore.const_defined?(:RootFiber)
|
40
|
-
RootFiber == Fiber.current
|
41
|
-
else
|
42
|
-
true
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def timeout_with_callback env, class_name
|
47
|
-
case class_name
|
48
|
-
when /EmHttpRequest/
|
49
|
-
EventMachineTimer.new(timeout(env), timeout_error)
|
50
|
-
when /Coolio/
|
51
|
-
timer = CoolioTimer.new(timeout(env))
|
52
|
-
timer.error = timeout_error
|
53
|
-
timer.attach(::Coolio::Loop.default)
|
54
|
-
timer
|
55
|
-
else
|
56
|
-
raise "BUG: #{run} is not supported"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def timeout_with_resume env, class_name
|
61
|
-
case class_name
|
62
|
-
when /EmHttpRequest/
|
63
|
-
f = Fiber.current
|
64
|
-
EventMachineTimer.new(timeout(env), error = timeout_error){
|
65
|
-
f.resume(error) if f.alive?
|
66
|
-
# no need to check if the fiber is already resumed or not,
|
67
|
-
# because monitor should have already handled this in the
|
68
|
-
# case of fibers
|
69
|
-
}
|
70
|
-
|
71
|
-
when /Coolio/
|
72
|
-
f = Fiber.current
|
73
|
-
timer = CoolioTimer.new(timeout(env))
|
74
|
-
error = timer.error = timeout_error
|
75
|
-
timer.on_timer{ f.resume(error) if f.alive? }
|
76
|
-
timer.attach(::Coolio::Loop.default)
|
77
|
-
timer
|
32
|
+
timer = case class_name
|
33
|
+
when /EmHttpRequest/
|
34
|
+
TimerEm
|
35
|
+
else
|
36
|
+
TimerThread
|
37
|
+
end.new(timeout(env), timeout_error)
|
78
38
|
|
79
|
-
|
80
|
-
raise "BUG: #{run} is not supported"
|
81
|
-
end
|
39
|
+
yield(env.merge(TIMER => timer))
|
82
40
|
end
|
83
41
|
|
84
42
|
def timeout_error
|
85
43
|
::Timeout::Error.new('execution expired')
|
86
44
|
end
|
87
45
|
|
88
|
-
autoload :
|
89
|
-
|
90
|
-
autoload :CoolioTimer,
|
91
|
-
'rest-core/middleware/timeout/coolio_timer'
|
46
|
+
autoload :TimerEm , 'rest-core/middleware/timeout/timer_em'
|
47
|
+
autoload :TimerThread, 'rest-core/middleware/timeout/timer_thread'
|
92
48
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
class RestCore::Timeout::TimerThread
|
3
|
+
attr_accessor :timeout, :error
|
4
|
+
|
5
|
+
def initialize timeout, error, &block
|
6
|
+
t = Thread.current
|
7
|
+
self.timeout = timeout
|
8
|
+
self.error = error
|
9
|
+
self.block = block || lambda{ t.raise error }
|
10
|
+
@canceled = false
|
11
|
+
start
|
12
|
+
end
|
13
|
+
|
14
|
+
def on_timeout &block
|
15
|
+
self.block = block
|
16
|
+
end
|
17
|
+
|
18
|
+
def cancel
|
19
|
+
@canceled = true
|
20
|
+
end
|
21
|
+
|
22
|
+
def canceled?
|
23
|
+
@canceled
|
24
|
+
end
|
25
|
+
|
26
|
+
def start
|
27
|
+
return if timeout.nil? || timeout.zero?
|
28
|
+
self.thread = Thread.new{
|
29
|
+
sleep(timeout)
|
30
|
+
block.call unless canceled?
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
attr_accessor :block, :thread
|
36
|
+
end
|
data/lib/rest-core/test.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
|
2
|
+
require 'fiber'
|
3
|
+
require 'em-http-request'
|
2
4
|
require 'rest-core'
|
3
5
|
|
4
6
|
require 'rr'
|
@@ -10,20 +12,9 @@ require 'yaml'
|
|
10
12
|
|
11
13
|
include RR::Adapters::RRMethods
|
12
14
|
include WebMock::API
|
13
|
-
WebMock.disable_net_connect!
|
15
|
+
WebMock.disable_net_connect!(:allow_localhost => true)
|
14
16
|
Bacon.summary_on_exit
|
15
17
|
|
16
|
-
module TestHelper
|
17
|
-
module_function
|
18
|
-
def normalize_query query
|
19
|
-
'?' + query[1..-1].split('&').sort.join('&')
|
20
|
-
end
|
21
|
-
|
22
|
-
def normalize_url url
|
23
|
-
url.sub(/\?.+/){ |query| TestHelper.normalize_query(query) }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
18
|
module Kernel
|
28
19
|
def eq? rhs
|
29
20
|
self == rhs
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
module RestCore; end
|
3
|
+
module RestCore::Json
|
4
|
+
module MultiJson
|
5
|
+
def self.extended mod
|
6
|
+
require 'rest-core/patch/multi_json'
|
7
|
+
mod.const_set(:ParseError, ::MultiJson::DecodeError)
|
8
|
+
end
|
9
|
+
def encode hash
|
10
|
+
::MultiJson.dump(hash)
|
11
|
+
end
|
12
|
+
def decode json
|
13
|
+
::MultiJson.load(json)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module YajlRuby
|
18
|
+
def self.extended mod
|
19
|
+
mod.const_set(:ParseError, Yajl::ParseError)
|
20
|
+
end
|
21
|
+
def encode hash
|
22
|
+
Yajl::Encoder.encode(hash)
|
23
|
+
end
|
24
|
+
def decode json
|
25
|
+
Yajl::Parser.parse(json)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module Json
|
30
|
+
def self.extended mod
|
31
|
+
mod.const_set(:ParseError, JSON::ParserError)
|
32
|
+
end
|
33
|
+
def encode hash
|
34
|
+
JSON.dump(hash)
|
35
|
+
end
|
36
|
+
def decode json
|
37
|
+
JSON.parse(json)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.select_json! mod, picked=false
|
42
|
+
if Object.const_defined?(:MultiJson)
|
43
|
+
mod.send(:extend, MultiJson)
|
44
|
+
elsif Object.const_defined?(:Yajl)
|
45
|
+
mod.send(:extend, YajlRuby)
|
46
|
+
elsif Object.const_defined?(:JSON)
|
47
|
+
mod.send(:extend, Json)
|
48
|
+
elsif picked
|
49
|
+
raise LoadError.new(
|
50
|
+
'No JSON library found. Tried: multi_json, yajl-ruby, json.')
|
51
|
+
else
|
52
|
+
# pick a json gem if available
|
53
|
+
%w[multi_json yajl json].each{ |json|
|
54
|
+
begin
|
55
|
+
require json
|
56
|
+
break
|
57
|
+
rescue LoadError
|
58
|
+
end
|
59
|
+
}
|
60
|
+
select_json!(mod, true)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
select_json!(self)
|
65
|
+
end
|
@@ -12,8 +12,8 @@ module RestCore::ParseQuery
|
|
12
12
|
def parse_query(qs, d = nil)
|
13
13
|
params = {}
|
14
14
|
|
15
|
-
(qs || '').split(d ? /[#{d}] */n :
|
16
|
-
k, v = p.split('=', 2).map { |x|
|
15
|
+
(qs || '').split(d ? /[#{d}] */n : /[&;] */n).each do |p|
|
16
|
+
k, v = p.split('=', 2).map { |x| URI.decode_www_form_component(x) }
|
17
17
|
if cur = params[k]
|
18
18
|
if cur.class == Array
|
19
19
|
params[k] << v
|
data/lib/rest-core/version.rb
CHANGED
data/lib/rest-core/wrapper.rb
CHANGED
@@ -4,38 +4,38 @@ require 'rest-core'
|
|
4
4
|
module RestCore::Wrapper
|
5
5
|
include RestCore
|
6
6
|
|
7
|
-
module
|
8
|
-
def
|
9
|
-
@
|
7
|
+
module DefaultEngine
|
8
|
+
def default_engine
|
9
|
+
@default_engine ||= RestCore::Dry
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.included mod
|
14
|
-
mod.send(:extend,
|
14
|
+
mod.send(:extend, DefaultEngine)
|
15
15
|
class << mod
|
16
|
-
attr_writer :
|
16
|
+
attr_writer :default_engine
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
attr_reader :
|
21
|
-
attr_writer :
|
22
|
-
def
|
23
|
-
@
|
20
|
+
attr_reader :middles, :wrapped
|
21
|
+
attr_writer :default_engine
|
22
|
+
def default_engine
|
23
|
+
@default_engine ||= self.class.default_engine
|
24
24
|
end
|
25
25
|
|
26
26
|
def initialize &block
|
27
27
|
@middles ||= []
|
28
28
|
instance_eval(&block) if block_given?
|
29
29
|
@wrapped ||= to_app
|
30
|
-
@
|
30
|
+
@engine = nil
|
31
31
|
end
|
32
32
|
|
33
33
|
def use middle, *args, &block
|
34
34
|
middles << [middle, args, block]
|
35
35
|
end
|
36
36
|
|
37
|
-
def run
|
38
|
-
@
|
37
|
+
def run engine
|
38
|
+
@engine = engine
|
39
39
|
end
|
40
40
|
|
41
41
|
def members
|
@@ -46,14 +46,14 @@ module RestCore::Wrapper
|
|
46
46
|
else
|
47
47
|
middle.members
|
48
48
|
end if middle.respond_to?(:members)
|
49
|
-
}.flatten
|
49
|
+
}.flatten.compact
|
50
50
|
end
|
51
51
|
|
52
|
-
def to_app
|
52
|
+
def to_app engine=@engine || default_engine
|
53
53
|
# === foldr m.new app middles
|
54
|
-
middles.reverse.inject(
|
54
|
+
middles.reverse.inject(engine.new){ |app, (middle, args, block)|
|
55
55
|
begin
|
56
|
-
middle.new(
|
56
|
+
middle.new(app, *partial_deep_copy(args), &block)
|
57
57
|
rescue ArgumentError => e
|
58
58
|
raise ArgumentError.new("#{middle}: #{e}")
|
59
59
|
end
|
data/rest-core.gemspec
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "rest-core"
|
5
|
-
s.version = "
|
5
|
+
s.version = "2.0.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = [
|
9
9
|
"Cardinal Blue",
|
10
10
|
"Lin Jen-Shin (godfat)"]
|
11
|
-
s.date = "2012-
|
12
|
-
s.description = "Modular Ruby clients interface for REST APIs\n\nThere has been an explosion in the number of REST APIs available today.\nTo address the need for a way to access these APIs easily and elegantly,\nwe have developed
|
11
|
+
s.date = "2012-10-31"
|
12
|
+
s.description = "Modular Ruby clients interface for REST APIs\n\nThere has been an explosion in the number of REST APIs available today.\nTo address the need for a way to access these APIs easily and elegantly,\nwe have developed rest-core, which consists of composable middleware\nthat allows you to build a REST client for any REST API. Or in the case of\ncommon APIs such as Facebook, Github, and Twitter, you can simply use the\ndedicated clients provided by [rest-more][].\n\n[rest-more]: https://github.com/cardinalblue/rest-more"
|
13
13
|
s.email = ["dev (XD) cardinalblue.com"]
|
14
14
|
s.files = [
|
15
15
|
".gitignore",
|
@@ -22,30 +22,22 @@ Gem::Specification.new do |s|
|
|
22
22
|
"README.md",
|
23
23
|
"Rakefile",
|
24
24
|
"TODO.md",
|
25
|
-
"doc/ToC.md",
|
26
|
-
"doc/dependency.md",
|
27
|
-
"doc/design.md",
|
28
|
-
"example/auto.rb",
|
29
|
-
"example/coolio.rb",
|
30
|
-
"example/eventmachine.rb",
|
31
25
|
"example/multi.rb",
|
32
|
-
"example/
|
26
|
+
"example/simple.rb",
|
27
|
+
"example/use-cases.rb",
|
33
28
|
"lib/rest-core.rb",
|
34
|
-
"lib/rest-core/app/abstract/async_fiber.rb",
|
35
|
-
"lib/rest-core/app/auto.rb",
|
36
|
-
"lib/rest-core/app/coolio-async.rb",
|
37
|
-
"lib/rest-core/app/coolio-fiber.rb",
|
38
|
-
"lib/rest-core/app/coolio.rb",
|
39
|
-
"lib/rest-core/app/dry.rb",
|
40
|
-
"lib/rest-core/app/em-http-request-async.rb",
|
41
|
-
"lib/rest-core/app/em-http-request-fiber.rb",
|
42
|
-
"lib/rest-core/app/em-http-request.rb",
|
43
|
-
"lib/rest-core/app/rest-client.rb",
|
44
29
|
"lib/rest-core/builder.rb",
|
45
30
|
"lib/rest-core/client.rb",
|
46
31
|
"lib/rest-core/client/simple.rb",
|
47
32
|
"lib/rest-core/client/universal.rb",
|
48
33
|
"lib/rest-core/client_oauth1.rb",
|
34
|
+
"lib/rest-core/engine/auto.rb",
|
35
|
+
"lib/rest-core/engine/dry.rb",
|
36
|
+
"lib/rest-core/engine/em-http-request.rb",
|
37
|
+
"lib/rest-core/engine/future/future.rb",
|
38
|
+
"lib/rest-core/engine/future/future_fiber.rb",
|
39
|
+
"lib/rest-core/engine/future/future_thread.rb",
|
40
|
+
"lib/rest-core/engine/rest-client.rb",
|
49
41
|
"lib/rest-core/error.rb",
|
50
42
|
"lib/rest-core/event.rb",
|
51
43
|
"lib/rest-core/middleware.rb",
|
@@ -62,21 +54,22 @@ Gem::Specification.new do |s|
|
|
62
54
|
"lib/rest-core/middleware/error_detector_http.rb",
|
63
55
|
"lib/rest-core/middleware/error_handler.rb",
|
64
56
|
"lib/rest-core/middleware/follow_redirect.rb",
|
65
|
-
"lib/rest-core/middleware/
|
57
|
+
"lib/rest-core/middleware/json_request.rb",
|
58
|
+
"lib/rest-core/middleware/json_response.rb",
|
66
59
|
"lib/rest-core/middleware/oauth1_header.rb",
|
67
60
|
"lib/rest-core/middleware/oauth2_header.rb",
|
68
61
|
"lib/rest-core/middleware/oauth2_query.rb",
|
69
62
|
"lib/rest-core/middleware/timeout.rb",
|
70
|
-
"lib/rest-core/middleware/timeout/
|
71
|
-
"lib/rest-core/middleware/timeout/
|
63
|
+
"lib/rest-core/middleware/timeout/timer_em.rb",
|
64
|
+
"lib/rest-core/middleware/timeout/timer_thread.rb",
|
65
|
+
"lib/rest-core/patch/multi_json.rb",
|
72
66
|
"lib/rest-core/patch/rest-client.rb",
|
73
67
|
"lib/rest-core/test.rb",
|
74
68
|
"lib/rest-core/util/hmac.rb",
|
69
|
+
"lib/rest-core/util/json.rb",
|
75
70
|
"lib/rest-core/util/parse_query.rb",
|
76
71
|
"lib/rest-core/version.rb",
|
77
72
|
"lib/rest-core/wrapper.rb",
|
78
|
-
"pending/test_multi.rb",
|
79
|
-
"pending/test_test_util.rb",
|
80
73
|
"rest-core.gemspec",
|
81
74
|
"test/test_auth_basic.rb",
|
82
75
|
"test/test_builder.rb",
|
@@ -84,12 +77,16 @@ Gem::Specification.new do |s|
|
|
84
77
|
"test/test_client.rb",
|
85
78
|
"test/test_client_oauth1.rb",
|
86
79
|
"test/test_default_query.rb",
|
80
|
+
"test/test_em_http_request.rb",
|
87
81
|
"test/test_error_detector.rb",
|
88
82
|
"test/test_error_detector_http.rb",
|
83
|
+
"test/test_error_handler.rb",
|
89
84
|
"test/test_follow_redirect.rb",
|
90
|
-
"test/
|
85
|
+
"test/test_json_request.rb",
|
86
|
+
"test/test_json_response.rb",
|
91
87
|
"test/test_oauth1_header.rb",
|
92
88
|
"test/test_payload.rb",
|
89
|
+
"test/test_simple.rb",
|
93
90
|
"test/test_timeout.rb",
|
94
91
|
"test/test_universal.rb",
|
95
92
|
"test/test_wrapper.rb"]
|
@@ -104,12 +101,16 @@ Gem::Specification.new do |s|
|
|
104
101
|
"test/test_client.rb",
|
105
102
|
"test/test_client_oauth1.rb",
|
106
103
|
"test/test_default_query.rb",
|
104
|
+
"test/test_em_http_request.rb",
|
107
105
|
"test/test_error_detector.rb",
|
108
106
|
"test/test_error_detector_http.rb",
|
107
|
+
"test/test_error_handler.rb",
|
109
108
|
"test/test_follow_redirect.rb",
|
110
|
-
"test/
|
109
|
+
"test/test_json_request.rb",
|
110
|
+
"test/test_json_response.rb",
|
111
111
|
"test/test_oauth1_header.rb",
|
112
112
|
"test/test_payload.rb",
|
113
|
+
"test/test_simple.rb",
|
113
114
|
"test/test_timeout.rb",
|
114
115
|
"test/test_universal.rb",
|
115
116
|
"test/test_wrapper.rb"]
|