activeresource-persistent 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/Gemfile +13 -0
- data/README.md +2 -2
- data/activeresource-persistent.gemspec +1 -1
- data/config.ru +2 -0
- data/lib/active_resource/persistent/connection.rb +4 -1
- data/lib/active_resource/persistent/http.rb +2 -0
- data/public/.gitkeep +0 -0
- data/spec/active_resource/connection_spec.rb +86 -0
- data/spec/active_resource/integration_spec.rb +62 -0
- data/spec/active_resource/persistent/http_spec.rb +77 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/support/test_application.rb +127 -0
- data/spec/support/test_helper.rb +22 -0
- data/spec/support/test_ipc.rb +19 -0
- data/spec/support/test_resources.rb +9 -0
- data/spec/support/test_server.rb +40 -0
- metadata +57 -66
data/Gemfile
CHANGED
@@ -1,3 +1,16 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gemspec
|
4
|
+
|
5
|
+
gem 'activeresource', '3.2.3'
|
6
|
+
gem 'net-http-persistent', '2.6'
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem 'rspec', '2.8.0'
|
10
|
+
gem 'sinatra', '1.3.2'
|
11
|
+
gem 'posix-spawn', '0.3.6'
|
12
|
+
end
|
13
|
+
|
14
|
+
group :bundle do
|
15
|
+
gem 'passenger', '3.0.12'
|
16
|
+
end
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ HTTP persistent connection support for ActiveResource.
|
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
gem '
|
9
|
+
gem 'activeresource-persistent', :require => 'active_resource/persistent'
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
|
@@ -14,7 +14,7 @@ And then execute:
|
|
14
14
|
|
15
15
|
Or install it yourself as:
|
16
16
|
|
17
|
-
$ gem install
|
17
|
+
$ gem install activeresource-persistent
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
12
12
|
gem.name = "activeresource-persistent"
|
13
13
|
gem.require_paths = ["lib"]
|
14
|
-
gem.version = "0.0
|
14
|
+
gem.version = "0.1.0"
|
15
15
|
|
16
16
|
gem.add_runtime_dependency 'net-http-persistent', '>=2.5'
|
17
17
|
gem.add_runtime_dependency 'activeresource', '>=2.3.0'
|
data/config.ru
ADDED
@@ -5,8 +5,11 @@ module ActiveResource
|
|
5
5
|
|
6
6
|
protected
|
7
7
|
|
8
|
-
def
|
8
|
+
def new_http_with_persistent
|
9
9
|
ActiveResource::Persistent::HTTP.new(site, proxy)
|
10
10
|
end
|
11
|
+
|
12
|
+
alias_method :new_http_without_persistent, :new_http
|
13
|
+
alias_method :new_http, :new_http_with_persistent
|
11
14
|
end
|
12
15
|
end
|
data/public/.gitkeep
ADDED
File without changes
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveResource::Connection do
|
4
|
+
let(:site) { TestServer.uri }
|
5
|
+
|
6
|
+
let(:instance) { described_class.new(site) }
|
7
|
+
|
8
|
+
describe "#http" do
|
9
|
+
subject { instance.send(:http) }
|
10
|
+
it "should be persistent" do
|
11
|
+
subject.should be_instance_of(ActiveResource::Persistent::HTTP)
|
12
|
+
subject.site.should == site
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#new_http" do
|
17
|
+
specify { instance.send(:new_http).should be_instance_of(ActiveResource::Persistent::HTTP) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#new_http_with_persistent" do
|
21
|
+
specify { instance.send(:new_http_with_persistent).should be_instance_of(ActiveResource::Persistent::HTTP) }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#new_http_without_persistent" do
|
25
|
+
specify { instance.send(:new_http_without_persistent).should be_instance_of(Net::HTTP) }
|
26
|
+
end
|
27
|
+
|
28
|
+
context "request methods" do
|
29
|
+
let(:path) { '/inspect' }
|
30
|
+
let(:body) { 'HELLO WORLD' }
|
31
|
+
let(:headers) { { 'X_Header' => 'x_value' } }
|
32
|
+
let(:http_mock) { mock('HTTP MOCK') }
|
33
|
+
let(:response_mock) { mock('RESPONSE MOCK', :code => '200') }
|
34
|
+
|
35
|
+
describe "#head" do
|
36
|
+
it "should use ActiveResource::Persistent::HTTP#head" do
|
37
|
+
expected_headers = headers.update('Accept' => 'application/json')
|
38
|
+
instance.should_receive(:http).and_return(http_mock)
|
39
|
+
http_mock.should_receive(:head).with(path, expected_headers).and_return(response_mock)
|
40
|
+
|
41
|
+
instance.head(path, headers)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#get" do
|
46
|
+
it "should use ActiveResource::Persistent::HTTP#get" do
|
47
|
+
expected_headers = headers.update('Accept' => 'application/json')
|
48
|
+
instance.should_receive(:http).and_return(http_mock)
|
49
|
+
http_mock.should_receive(:get).with(path, expected_headers).and_return(response_mock)
|
50
|
+
|
51
|
+
instance.get(path, headers)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#delete" do
|
56
|
+
it "should use ActiveResource::Persistent::HTTP#delete" do
|
57
|
+
expected_headers = headers.update('Accept' => 'application/json')
|
58
|
+
instance.should_receive(:http).and_return(http_mock)
|
59
|
+
http_mock.should_receive(:delete).with(path, expected_headers).and_return(response_mock)
|
60
|
+
|
61
|
+
instance.delete(path, headers)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#post" do
|
66
|
+
it "should use ActiveResource::Persistent::HTTP#post" do
|
67
|
+
expected_headers = headers.update('Content-Type' => 'application/json')
|
68
|
+
instance.should_receive(:http).and_return(http_mock)
|
69
|
+
http_mock.should_receive(:post).with(path, body, expected_headers).and_return(response_mock)
|
70
|
+
|
71
|
+
instance.post(path, body, headers)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#put" do
|
76
|
+
it "should use ActiveResource::Persistent::HTTP#put" do
|
77
|
+
expected_headers = headers.update('Content-Type' => 'application/json')
|
78
|
+
instance.should_receive(:http).and_return(http_mock)
|
79
|
+
http_mock.should_receive(:put).with(path, body, expected_headers).and_return(response_mock)
|
80
|
+
|
81
|
+
instance.put(path, body, headers)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe %q(
|
4
|
+
As Developer
|
5
|
+
I order to speed up my active resources usage
|
6
|
+
I want to use HTTP 1.1 keepalive feature
|
7
|
+
) do
|
8
|
+
|
9
|
+
it "Retrieving one resource multiple times" do
|
10
|
+
ids = %w(101 202 303)
|
11
|
+
users = ids.map { |id| TestUser.find(id) }
|
12
|
+
|
13
|
+
users[0].id.should == ids[0]
|
14
|
+
users[1].id.should == ids[1]
|
15
|
+
users[2].id.should == ids[2]
|
16
|
+
|
17
|
+
TestHelper.logged_requests.size.should == 3
|
18
|
+
TestHelper.persistent_requests_logged?.should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "Retrieving two resources from the same site" do
|
22
|
+
user = TestUser.find("101")
|
23
|
+
post = TestPost.find("202")
|
24
|
+
|
25
|
+
user.id.should == "101"
|
26
|
+
post.id.should == "202"
|
27
|
+
|
28
|
+
TestHelper.logged_requests.size.should == 2
|
29
|
+
TestHelper.persistent_requests_logged?.should be_true
|
30
|
+
end
|
31
|
+
|
32
|
+
it "Delete different resources from the same site" do
|
33
|
+
TestUser.find("101").destroy
|
34
|
+
TestPost.find("202").destroy
|
35
|
+
|
36
|
+
TestHelper.logged_requests.size.should == 4
|
37
|
+
TestHelper.persistent_requests_logged?.should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "Updating different resources from the same site" do
|
41
|
+
user = TestUser.find("101").update_attribute(:username, "jack")
|
42
|
+
post = TestPost.find("202").update_attribute(:title, "hi")
|
43
|
+
|
44
|
+
TestHelper.logged_requests.size.should == 4
|
45
|
+
TestHelper.persistent_requests_logged?.should be_true
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
it "Creating different resources on the same site" do
|
50
|
+
user = TestUser.create(:username => "Bob")
|
51
|
+
post = TestPost.create(:title => "Hello Bob")
|
52
|
+
|
53
|
+
user.id.should_not be_blank
|
54
|
+
post.id.should_not be_blank
|
55
|
+
|
56
|
+
user.username.should == "Bob"
|
57
|
+
post.title.should == "Hello Bob"
|
58
|
+
|
59
|
+
TestHelper.logged_requests.size.should == 2
|
60
|
+
TestHelper.persistent_requests_logged?.should be_true
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveResource::Persistent::HTTP do
|
4
|
+
describe "class" do
|
5
|
+
subject { described_class }
|
6
|
+
its(:superclass) { should == Net::HTTP::Persistent }
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "instance" do
|
10
|
+
let(:site) { URI.parse('http://site.example.com:3000') }
|
11
|
+
let(:proxy) { URI.parse('http://proxy.example.com:8080') }
|
12
|
+
|
13
|
+
subject { described_class.new(site, proxy) }
|
14
|
+
|
15
|
+
it "should have site" do
|
16
|
+
subject.site.should == site
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have proxy_uri" do
|
20
|
+
subject.proxy_uri.should == proxy
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "request methods" do
|
25
|
+
let(:site) { TestServer.uri }
|
26
|
+
let(:instance) { described_class.new(site, nil) }
|
27
|
+
|
28
|
+
let(:path) { '/inspect/all?key=value' }
|
29
|
+
let(:body) { 'HELLO WORLD' }
|
30
|
+
let(:headers) { { 'X-AUTHORIZATION' => 'qwerty' } }
|
31
|
+
|
32
|
+
it "should HEAD data" do
|
33
|
+
@response = instance.head(path, headers)
|
34
|
+
|
35
|
+
@response.should be_instance_of(Net::HTTPOK)
|
36
|
+
@response.body.should be_nil
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should GET data" do
|
40
|
+
@response = instance.get(path, headers)
|
41
|
+
|
42
|
+
expect_response('GET', nil)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should DELETE data" do
|
46
|
+
@response = instance.delete(path, headers)
|
47
|
+
|
48
|
+
expect_response('DELETE', nil)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should POST data" do
|
52
|
+
@response = instance.post(path, body, headers)
|
53
|
+
|
54
|
+
expect_response('POST', body)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should PUT data" do
|
58
|
+
@response = instance.put(path, body, headers)
|
59
|
+
|
60
|
+
expect_response('PUT', body)
|
61
|
+
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
|
65
|
+
def expect_response(request_method, payload)
|
66
|
+
@response.should be_instance_of(Net::HTTPOK)
|
67
|
+
|
68
|
+
body = YAML.load(@response.body)
|
69
|
+
|
70
|
+
body['REQUEST_METHOD'].should == request_method
|
71
|
+
body['REQUEST_URI'].should == path
|
72
|
+
body['HTTP_X_AUTHORIZATION'].should == 'qwerty'
|
73
|
+
body['rack.input'].should == payload
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Bundler.setup
|
2
|
+
|
3
|
+
require 'active_resource/persistent'
|
4
|
+
|
5
|
+
Dir["spec/support/**/*.rb"].each { |f| load f }
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.before(:suite) do
|
9
|
+
TestServer.start
|
10
|
+
|
11
|
+
TestUser.site = TestServer.uri
|
12
|
+
TestPost.site = TestServer.uri
|
13
|
+
end
|
14
|
+
|
15
|
+
config.before(:each) do
|
16
|
+
TestIPC.clear
|
17
|
+
end
|
18
|
+
|
19
|
+
config.after(:suite) do
|
20
|
+
TestServer.stop
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'multi_json'
|
3
|
+
|
4
|
+
class TestApplication < Sinatra::Base
|
5
|
+
before do
|
6
|
+
TestHelper.log_request(env)
|
7
|
+
end
|
8
|
+
|
9
|
+
#
|
10
|
+
# User resources
|
11
|
+
#
|
12
|
+
|
13
|
+
get '/users/:id.json' do
|
14
|
+
id = params[:id]
|
15
|
+
data_halt({
|
16
|
+
'id' => id,
|
17
|
+
'username' => "jack_#{id}",
|
18
|
+
'remote_port' => env['REMOTE_PORT']
|
19
|
+
})
|
20
|
+
end
|
21
|
+
|
22
|
+
get '/users.json' do
|
23
|
+
data_halt([
|
24
|
+
{
|
25
|
+
'id' => 1,
|
26
|
+
'username' => "alice",
|
27
|
+
'remote_port' => env['REMOTE_PORT']
|
28
|
+
},
|
29
|
+
{
|
30
|
+
'id' => 2,
|
31
|
+
'username' => "bob",
|
32
|
+
'remote_port' => env['REMOTE_PORT']
|
33
|
+
}
|
34
|
+
])
|
35
|
+
end
|
36
|
+
|
37
|
+
post '/users.json' do
|
38
|
+
user = MultiJson.load(request.body)
|
39
|
+
|
40
|
+
id = Time.now.to_i
|
41
|
+
|
42
|
+
halt 202, { 'Location' => "/users/#{id}" }, ''
|
43
|
+
end
|
44
|
+
|
45
|
+
put '/users/:id.json' do
|
46
|
+
id = params[:id]
|
47
|
+
user = MultiJson.load(request.body)
|
48
|
+
data_halt(user)
|
49
|
+
end
|
50
|
+
|
51
|
+
delete '/users/:id.json' do
|
52
|
+
id = params[:id]
|
53
|
+
halt 200
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Post resources
|
58
|
+
#
|
59
|
+
|
60
|
+
get '/posts/:id.json' do
|
61
|
+
id = params[:id]
|
62
|
+
|
63
|
+
data_halt({
|
64
|
+
'id' => id,
|
65
|
+
'title' => "hello_world_#{id}",
|
66
|
+
'remote_port' => env['REMOTE_PORT']
|
67
|
+
})
|
68
|
+
end
|
69
|
+
|
70
|
+
put '/posts/:id.json' do
|
71
|
+
id = params[:id]
|
72
|
+
post = MultiJson.load(request.body)
|
73
|
+
data_halt(post)
|
74
|
+
end
|
75
|
+
|
76
|
+
post '/posts.json' do
|
77
|
+
post = MultiJson.load(request.body)
|
78
|
+
|
79
|
+
id = Time.now.to_i
|
80
|
+
|
81
|
+
halt 202, { 'Location' => "/posts/#{id}" }, ''
|
82
|
+
end
|
83
|
+
|
84
|
+
delete '/posts/:id.json' do
|
85
|
+
id = params[:id]
|
86
|
+
halt 200
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Inspect other requests
|
91
|
+
#
|
92
|
+
head '/*' do nil end
|
93
|
+
get '/*' do env_halt end
|
94
|
+
delete '/*' do env_halt end
|
95
|
+
post '/*' do env_halt end
|
96
|
+
put '/*' do env_halt end
|
97
|
+
|
98
|
+
protected
|
99
|
+
|
100
|
+
def data_halt(data, status = 200)
|
101
|
+
content_type :json
|
102
|
+
body MultiJson.dump(data)
|
103
|
+
halt status
|
104
|
+
end
|
105
|
+
|
106
|
+
def env_halt
|
107
|
+
payload = {}
|
108
|
+
|
109
|
+
env.sort.each do |key, value|
|
110
|
+
case key
|
111
|
+
when 'rack.input'
|
112
|
+
while line = value.gets
|
113
|
+
data ||= ""
|
114
|
+
data << line
|
115
|
+
end
|
116
|
+
payload[key] = data
|
117
|
+
when /^rack\./
|
118
|
+
else
|
119
|
+
payload[key] = value
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
content_type :text
|
124
|
+
body payload.to_yaml
|
125
|
+
halt 200
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module TestHelper
|
2
|
+
extend self
|
3
|
+
|
4
|
+
def log_request(env)
|
5
|
+
data = [
|
6
|
+
env['REMOTE_PORT'],
|
7
|
+
env['REQUEST_METHOD'],
|
8
|
+
env['REQUEST_URI']
|
9
|
+
].join('|')
|
10
|
+
|
11
|
+
TestIPC.push(data)
|
12
|
+
end
|
13
|
+
|
14
|
+
def logged_requests
|
15
|
+
TestIPC.pull.map { |line| line.split('|') }
|
16
|
+
end
|
17
|
+
|
18
|
+
def persistent_requests_logged?
|
19
|
+
logged_requests.map { |line| line[0] }.uniq.size == 1
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module TestIPC
|
2
|
+
extend self
|
3
|
+
|
4
|
+
def filename
|
5
|
+
@filename = File.expand_path('../../../tmp/test_ipc.text', __FILE__)
|
6
|
+
end
|
7
|
+
|
8
|
+
def clear
|
9
|
+
File.delete(filename) if File.exists?(filename)
|
10
|
+
end
|
11
|
+
|
12
|
+
def push(data)
|
13
|
+
File.open(filename, "a+") { |f| f.puts(data) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def pull
|
17
|
+
File.exists?(filename) ? File.read(filename).split("\n") : []
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'posix/spawn'
|
3
|
+
|
4
|
+
module TestServer
|
5
|
+
extend self
|
6
|
+
|
7
|
+
def host
|
8
|
+
'localhost'
|
9
|
+
end
|
10
|
+
|
11
|
+
def port
|
12
|
+
9292
|
13
|
+
end
|
14
|
+
|
15
|
+
def uri
|
16
|
+
URI.parse("http://#{host}:#{port}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def pid
|
20
|
+
@pid
|
21
|
+
end
|
22
|
+
|
23
|
+
def start
|
24
|
+
@pid = POSIX::Spawn.spawn("passenger start --port #{port}", :out => 'test_server.output')
|
25
|
+
sleep(1)
|
26
|
+
end
|
27
|
+
|
28
|
+
def stop
|
29
|
+
Process.kill("TERM", pid) if pid
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def find_available_port
|
35
|
+
server = TCPServer.new('127.0.0.1', '9292')
|
36
|
+
server.addr[1]
|
37
|
+
ensure
|
38
|
+
server.close if server
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,106 +1,97 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeresource-persistent
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Andriy Yanko
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: net-http-persistent
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &16473480 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 2
|
32
|
-
- 5
|
33
|
-
version: "2.5"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.5'
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: activeresource
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: *16473480
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activeresource
|
27
|
+
requirement: &16472560 !ruby/object:Gem::Requirement
|
40
28
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 3
|
45
|
-
segments:
|
46
|
-
- 2
|
47
|
-
- 3
|
48
|
-
- 0
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
49
32
|
version: 2.3.0
|
50
33
|
type: :runtime
|
51
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *16472560
|
52
36
|
description: HTTP persistent connection support for ActiveResource
|
53
|
-
email:
|
37
|
+
email:
|
54
38
|
- andriy.yanko@gmail.com
|
55
39
|
executables: []
|
56
|
-
|
57
40
|
extensions: []
|
58
|
-
|
59
41
|
extra_rdoc_files: []
|
60
|
-
|
61
|
-
files:
|
42
|
+
files:
|
62
43
|
- .gitignore
|
63
44
|
- Gemfile
|
64
45
|
- LICENSE
|
65
46
|
- README.md
|
66
47
|
- Rakefile
|
67
48
|
- activeresource-persistent.gemspec
|
49
|
+
- config.ru
|
68
50
|
- lib/active_resource/persistent.rb
|
69
51
|
- lib/active_resource/persistent/connection.rb
|
70
52
|
- lib/active_resource/persistent/http.rb
|
71
|
-
|
53
|
+
- public/.gitkeep
|
54
|
+
- spec/active_resource/connection_spec.rb
|
55
|
+
- spec/active_resource/integration_spec.rb
|
56
|
+
- spec/active_resource/persistent/http_spec.rb
|
57
|
+
- spec/spec_helper.rb
|
58
|
+
- spec/support/test_application.rb
|
59
|
+
- spec/support/test_helper.rb
|
60
|
+
- spec/support/test_ipc.rb
|
61
|
+
- spec/support/test_resources.rb
|
62
|
+
- spec/support/test_server.rb
|
72
63
|
homepage: https://github.com/railsware/activeresource-persistent
|
73
64
|
licenses: []
|
74
|
-
|
75
65
|
post_install_message:
|
76
66
|
rdoc_options: []
|
77
|
-
|
78
|
-
require_paths:
|
67
|
+
require_paths:
|
79
68
|
- lib
|
80
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
70
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
86
|
-
|
87
|
-
- 0
|
88
|
-
version: "0"
|
89
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
76
|
none: false
|
91
|
-
requirements:
|
92
|
-
- -
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
|
95
|
-
segments:
|
96
|
-
- 0
|
97
|
-
version: "0"
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
98
81
|
requirements: []
|
99
|
-
|
100
82
|
rubyforge_project:
|
101
|
-
rubygems_version: 1.
|
83
|
+
rubygems_version: 1.8.10
|
102
84
|
signing_key:
|
103
85
|
specification_version: 3
|
104
86
|
summary: HTTP persistent connection support for ActiveResource
|
105
|
-
test_files:
|
106
|
-
|
87
|
+
test_files:
|
88
|
+
- spec/active_resource/connection_spec.rb
|
89
|
+
- spec/active_resource/integration_spec.rb
|
90
|
+
- spec/active_resource/persistent/http_spec.rb
|
91
|
+
- spec/spec_helper.rb
|
92
|
+
- spec/support/test_application.rb
|
93
|
+
- spec/support/test_helper.rb
|
94
|
+
- spec/support/test_ipc.rb
|
95
|
+
- spec/support/test_resources.rb
|
96
|
+
- spec/support/test_server.rb
|
97
|
+
has_rdoc:
|