dot_net_services 0.0.1
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/LICENSE +24 -0
- data/README +52 -0
- data/lib/dot_net_services/authentication.rb +168 -0
- data/lib/dot_net_services/error.rb +4 -0
- data/lib/dot_net_services/message_buffer.rb +269 -0
- data/lib/dot_net_services/session.rb +282 -0
- data/lib/dot_net_services.rb +143 -0
- data/lib/net/http/create_mb.rb +14 -0
- data/lib/net/http/retrieve.rb +14 -0
- data/lib/net/http/subscribe.rb +14 -0
- data/lib/net/http/unsubscribe.rb +14 -0
- data/spec/integration/TestService/Service/AnonymousResourceService.cs +9 -0
- data/spec/integration/TestService/Service/App.config +32 -0
- data/spec/integration/TestService/Service/PlainTextService.cs +37 -0
- data/spec/integration/TestService/Service/Program.cs +49 -0
- data/spec/integration/TestService/Service/Properties/AssemblyInfo.cs +33 -0
- data/spec/integration/TestService/Service/ResourceContract.cs +17 -0
- data/spec/integration/TestService/Service/ResourceService.cs +58 -0
- data/spec/integration/TestService/Service/Service.csproj +71 -0
- data/spec/integration/TestService/TestService.sln +33 -0
- data/spec/integration/end_to_end_spec.rb +84 -0
- data/spec/integration/vmb_spec.rb +30 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/unit/dot_net_services/authentication_spec.rb +289 -0
- data/spec/unit/dot_net_services/message_buffer_spec.rb +161 -0
- data/spec/unit/dot_net_services/session_spec.rb +247 -0
- metadata +87 -0
@@ -0,0 +1,161 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../../spec_helper"
|
2
|
+
|
3
|
+
module DotNetServices
|
4
|
+
describe MessageBuffer do
|
5
|
+
describe "initialize(name, auth_data)" do
|
6
|
+
it "should create a session" do
|
7
|
+
Session.should_receive(:new).with('foo', :username => 'bar', :password => 'baz').and_return(:session)
|
8
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
9
|
+
mb.session.should == :session
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be possible to specify polling_interval"
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "register" do
|
16
|
+
it "should register a message buffer" do
|
17
|
+
response = Net::HTTPCreated.new(nil, nil, nil)
|
18
|
+
|
19
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
20
|
+
mb.session.should_receive(:createmb).and_return(response)
|
21
|
+
mb.register.should equal(mb)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should blow up if the response code is not 201 and the buffer cannot be queried" do
|
25
|
+
create_response = Net::HTTPInternalServerError.new(nil, nil, nil)
|
26
|
+
query_response = Net::HTTPNotFound.new(nil, nil, nil)
|
27
|
+
|
28
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
29
|
+
mb.session.should_receive(:createmb).and_return(create_response)
|
30
|
+
mb.session.should_receive(:get_from_relay).and_return(query_response)
|
31
|
+
proc { mb.register }.should raise_error(
|
32
|
+
RuntimeError, "Creating VMB failed. Service responded with Net::HTTPInternalServerError")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not blow up if the response code to CREATEMB is not 201, byt the buffer can be queried" do
|
36
|
+
create_response = Net::HTTPInternalServerError.new(nil, nil, nil)
|
37
|
+
query_response = Net::HTTPSuccess.new(nil, nil, nil)
|
38
|
+
|
39
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
40
|
+
mb.session.should_receive(:createmb).and_return(create_response)
|
41
|
+
mb.session.should_receive(:get_from_relay).and_return(query_response)
|
42
|
+
proc { mb.register }.should_not raise_error(
|
43
|
+
RuntimeError, "Creating VMB failed. Service responded with Net::HTTPInternalServerError")
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "open(&block)" do
|
49
|
+
it "should register the buffer if necessary" do
|
50
|
+
block = lambda { :foo }
|
51
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
52
|
+
mb.session.should_receive(:get_from_relay).and_return(Net::HTTPNotFound.new(nil, nil, nil))
|
53
|
+
mb.should_receive(:register).and_return(mb)
|
54
|
+
mb.open(&block)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "poll" do
|
59
|
+
it "should retrieve a single message from the buffer" do
|
60
|
+
response = Net::HTTPOK.new(nil, nil, nil)
|
61
|
+
|
62
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
63
|
+
mb.session.should_receive(:retrieve).with(:encoding => 'asreply', :timeout => nil).and_return(response)
|
64
|
+
|
65
|
+
message = mb.poll
|
66
|
+
|
67
|
+
message.should == response
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return nil if no no message was retrieved in the buffer" do
|
71
|
+
response = Net::HTTPNoContent.new(nil, nil, nil)
|
72
|
+
|
73
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
74
|
+
mb.session.should_receive(:retrieve).and_return(response)
|
75
|
+
|
76
|
+
mb.poll.should be_nil
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should recreate a buffer if the bus says it doesn't exist and poll again" do
|
80
|
+
not_found_response = Net::HTTPNotFound.new(nil, nil, nil)
|
81
|
+
created_response = Net::HTTPCreated.new(nil, nil, nil)
|
82
|
+
|
83
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
84
|
+
|
85
|
+
mb.session.should_receive(:retrieve).with(:encoding => 'asreply', :timeout => nil).and_return(not_found_response)
|
86
|
+
mb.session.should_receive(:createmb).and_return(created_response)
|
87
|
+
|
88
|
+
message = mb.poll
|
89
|
+
|
90
|
+
message.should == nil
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "delete()" do
|
96
|
+
it "should send a DELETE request to the relay" do
|
97
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
98
|
+
response = Net::HTTPNoContent.new(nil, nil, nil)
|
99
|
+
|
100
|
+
mb.session.should_receive(:delete).and_return(response)
|
101
|
+
|
102
|
+
mb.delete.should == mb
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should do nothing if the response is NotFound (i.e., the VMB already doesn't exist"
|
106
|
+
|
107
|
+
it "should blow up if response is not NoContent, and not NotFound" do
|
108
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
109
|
+
response = Net::HTTPNotFound.new(nil, nil, nil)
|
110
|
+
|
111
|
+
mb.session.should_receive(:delete).and_return(response)
|
112
|
+
|
113
|
+
lambda { mb.delete }.should raise_error("Deleting VMB failed. Response was Net::HTTPNotFound")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "expires()" do
|
118
|
+
it "should do a GET to relay and return the value of 'expires' header" do
|
119
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
120
|
+
|
121
|
+
response = Net::HTTPOK.new(nil, nil, nil)
|
122
|
+
response.should_receive(:[]).with('expires').and_return("Thu, 01 Dec 2009 16:00:00 GMT")
|
123
|
+
|
124
|
+
mb.session.should_receive(:get_from_relay).and_return(response)
|
125
|
+
|
126
|
+
mb.expires.should == DateTime.parse("2009-12-01 16:00:00 Z")
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should blow up if response is not 200" do
|
130
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
131
|
+
response = Net::HTTPNotFound.new(nil, nil, nil)
|
132
|
+
mb.session.should_receive(:get_from_relay).and_return(response)
|
133
|
+
|
134
|
+
lambda { mb.expires }.should raise_error("Querying expiry status of VMB failed. Response was Net::HTTPNotFound")
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should blow up if response has no expires header" do
|
138
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
139
|
+
response = Net::HTTPOK.new(nil, nil, nil)
|
140
|
+
response.should_receive(:[]).with('expires').and_return(nil)
|
141
|
+
mb.session.should_receive(:get_from_relay).and_return(response)
|
142
|
+
|
143
|
+
lambda { mb.expires }.should raise_error("Querying expiry status of VMB failed. Response doesn't have expires: header")
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "keep_alive" do
|
148
|
+
it "should send an empty post to relay on buffer endpoint" do
|
149
|
+
mb = MessageBuffer.new('foo', :username => 'bar', :password => 'baz')
|
150
|
+
response = Net::HTTPOK.new(nil, nil, nil)
|
151
|
+
mb.session.should_receive(:post_to_relay).with("\n").and_return(response)
|
152
|
+
mb.keep_alive.should == mb
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "subscribe" do
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../../spec_helper"
|
2
|
+
|
3
|
+
module DotNetServices
|
4
|
+
|
5
|
+
describe Session do
|
6
|
+
|
7
|
+
describe "new(endpoint, auth_data = nil)" do
|
8
|
+
it "should take a relative path of the endpoint and convert to a full path" do
|
9
|
+
session = Session.new("/alexeyv/EchoService/")
|
10
|
+
session.endpoint.should == "#{DotNetServices.root_url}/alexeyv/EchoService/"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should not prefix an absolute endpoint path" do
|
14
|
+
Session.new("http://foo/").endpoint.should == "http://foo/"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should prefix relative endpoint path with a slash if necessary" do
|
18
|
+
Session.new("alexeyv/EchoService/").endpoint.should == "#{DotNetServices.root_url}/alexeyv/EchoService/"
|
19
|
+
Session.new("/alexeyv/EchoService/").endpoint.should == "#{DotNetServices.root_url}/alexeyv/EchoService/"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should append a slash to the endpoint path if necessary" do
|
23
|
+
Session.new("/alexeyv/EchoService").endpoint.should == "#{DotNetServices.root_url}/alexeyv/EchoService/"
|
24
|
+
Session.new("/alexeyv/EchoService/").endpoint.should == "#{DotNetServices.root_url}/alexeyv/EchoService/"
|
25
|
+
Session.new("http://foo").endpoint.should == "http://foo/"
|
26
|
+
Session.new("http://foo/").endpoint.should == "http://foo/"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "open" do
|
32
|
+
it "should create the session and return it" do
|
33
|
+
authenticator = mock('authenticator')
|
34
|
+
authenticator.should_receive(:authenticate)
|
35
|
+
|
36
|
+
session = Session.open("http://foo/", authenticator)
|
37
|
+
|
38
|
+
session.should be_instance_of(Session)
|
39
|
+
session.authenticator.should == authenticator
|
40
|
+
session.endpoint.should == "http://foo/"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should, given a block, pass the session to a block and return the result of the block" do
|
44
|
+
yielded_session = nil
|
45
|
+
result = Session.open("http://foo/") { |session| yielded_session = session; "been here"}
|
46
|
+
|
47
|
+
yielded_session.should be_instance_of(Session)
|
48
|
+
yielded_session.endpoint.should == "http://foo/"
|
49
|
+
result.should == "been here"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "get(query_options=nil)" do
|
54
|
+
it "should send a get request to the endpoint and return the response" do
|
55
|
+
mock_http_get('foo', 80, '/')
|
56
|
+
result = Session.open("http://foo/") { |session| session.get }
|
57
|
+
result.should == :http_get_result
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should accept query options" do
|
61
|
+
mock_http_get('foo', 80, '/', 'bar=baz')
|
62
|
+
result = Session.open("http://foo/") { |session| session.get(:bar => 'baz') }
|
63
|
+
result.should == :http_get_result
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should escape elements of the query" do
|
67
|
+
mock_http_get('foo', 80, '/', "foo=bar%2Bbaz%7Equx")
|
68
|
+
result = Session.open("http://foo/") { |session| session.get(:foo => "bar+baz~qux") }
|
69
|
+
result.should == :http_get_result
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should pass a request through authentication handler" do
|
73
|
+
mock_http, mock_get = mock_http_get('foo', 80, '/')
|
74
|
+
|
75
|
+
authenticator = mock('authenticator')
|
76
|
+
authenticator.should_receive(:authenticate)
|
77
|
+
authenticator.should_receive(:enhance).with(mock_get)
|
78
|
+
|
79
|
+
result = Session.open("http://foo/", authenticator) { |session| session.get }
|
80
|
+
result.should == :http_get_result
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "get_to_url(url, data=nil, content_type='application/x-www-form-urlencoded')" do
|
86
|
+
|
87
|
+
it "should get data from the URL under the endpoint" do
|
88
|
+
mock_http_get('foo', 80, '/services/suburl', "foo=bar")
|
89
|
+
result = Session.open("http://foo/services/") { |session| session.get_from_url('suburl', :foo => "bar") }
|
90
|
+
result.should == :http_get_result
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "post(data=nil, content_type='application/x-www-form-urlencoded')" do
|
96
|
+
it "should pass data as URL encoded form if data is a Hash" do
|
97
|
+
mock_http_post_form('foo', 80, '/', :foo => 'bar')
|
98
|
+
result = Session.open("http://foo/") { |session| session.post(:foo => "bar") }
|
99
|
+
result.should == :http_post_result
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should set data instead of form data on the Net::HTTP::Post instance, if content type is not url-encoded-form" do
|
103
|
+
mock_http = mock('http')
|
104
|
+
mock_post = mock('post')
|
105
|
+
Net::HTTP.should_receive(:start).with('foo', 80).and_yield(mock_http)
|
106
|
+
Net::HTTP::Post.should_receive(:new).with('/services/').and_return(mock_post)
|
107
|
+
mock_post.should_receive(:body=).with("post body")
|
108
|
+
mock_post.should_receive(:content_type=).with("text/plain")
|
109
|
+
mock_http.should_receive(:request).with(mock_post).and_return(:http_post_result)
|
110
|
+
|
111
|
+
result = Session.open("http://foo/services/") { |session| session.post("post body", "text/plain") }
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "post_to_url(url, data=nil, content_type='application/x-www-form-urlencoded')" do
|
117
|
+
|
118
|
+
it "should post data to the URL under the endpoint" do
|
119
|
+
mock_http_post_form('foo', 80, '/services/suburl', :foo => 'bar')
|
120
|
+
result = Session.open("http://foo/services/") { |session| session.post_to_url('suburl', :foo => "bar") }
|
121
|
+
result.should == :http_post_result
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
describe "createmb" do
|
128
|
+
it "should make a createmb request" do
|
129
|
+
mock_createmb = mock('createmb')
|
130
|
+
Net::HTTP::CreateMB.should_receive(:new).with('/services/user/location/').and_return(mock_createmb)
|
131
|
+
mock_createmb.should_receive(:[]=).with(
|
132
|
+
"X-Process-At", "http://schemas.microsoft.com/ws/2007/08/connect/roles/relay")
|
133
|
+
mock_http = mock('http')
|
134
|
+
Net::HTTP.should_receive(:start).with(DotNetServices.relay_host, 80).and_yield(mock_http)
|
135
|
+
mock_http.should_receive(:request).with(mock_createmb).and_return(:response)
|
136
|
+
Session.open("http://#{DotNetServices.relay_host}/services/user/location") { |session| session.createmb }
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "retrieve" do
|
141
|
+
it "should make a retrieve request" do
|
142
|
+
mock_retrieve = mock('retrieve')
|
143
|
+
Net::HTTP::Retrieve.should_receive(:new).with('/services/user/location/?timeout=10').and_return(mock_retrieve)
|
144
|
+
mock_retrieve.should_receive(:[]=).with(
|
145
|
+
'X-Process-At', "http://schemas.microsoft.com/ws/2007/08/connect/roles/relay")
|
146
|
+
mock_http = mock('http')
|
147
|
+
Net::HTTP.should_receive(:start).with(DotNetServices.relay_host, 80).and_yield(mock_http)
|
148
|
+
mock_http.should_receive(:request).with(mock_retrieve).and_return(:response)
|
149
|
+
actual_response = Session.open("http://#{DotNetServices.relay_host}/services/user/location") { |session| session.retrieve(:timeout => 10) }
|
150
|
+
actual_response.should == :response
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should coerce the keys in options to strings and downcase them" do
|
154
|
+
mock_retrieve = mock('retrieve')
|
155
|
+
mock_retrieve.stub!(:[]=)
|
156
|
+
mock_http = mock('http')
|
157
|
+
|
158
|
+
Net::HTTP::Retrieve.should_receive(:new).with("/services/user/location/?timeout=5").and_return(mock_retrieve)
|
159
|
+
Net::HTTP::Retrieve.should_receive(:new).with("/services/user/location/?timeout=6").and_return(mock_retrieve)
|
160
|
+
Net::HTTP.should_receive(:start).twice.and_yield(mock_http)
|
161
|
+
mock_http.should_receive(:request).twice.with(mock_retrieve).and_return(:response)
|
162
|
+
|
163
|
+
Session.open("http://#{DotNetServices.relay_host}/services/user/location") do
|
164
|
+
|session|
|
165
|
+
session.retrieve :timeout => 5
|
166
|
+
session.retrieve "TIMEOUT" => 6
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should insert a default timeout of 15 seconds if it's not provided" do
|
171
|
+
mock_retrieve = mock('retrieve')
|
172
|
+
mock_retrieve.stub!(:[]=)
|
173
|
+
mock_http = mock('http')
|
174
|
+
|
175
|
+
Net::HTTP::Retrieve.should_receive(:new).with("/services/user/location/?timeout=15").and_return(mock_retrieve)
|
176
|
+
Net::HTTP.should_receive(:start).and_yield(mock_http)
|
177
|
+
mock_http.should_receive(:request).with(mock_retrieve).and_return(:response)
|
178
|
+
|
179
|
+
Session.open("http://#{DotNetServices.relay_host}/services/user/location") do
|
180
|
+
|session|
|
181
|
+
session.retrieve
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "get_from_relay" do
|
188
|
+
|
189
|
+
it "should set X-Process-At header and send to the bus as normal post" do
|
190
|
+
mock_http = mock('http')
|
191
|
+
Net::HTTP.should_receive(:start).with(DotNetServices.relay_host, 80).and_yield(mock_http)
|
192
|
+
|
193
|
+
mock_http.should_receive(:request) do |get_request|
|
194
|
+
get_request['X-Process-At'].should == 'http://schemas.microsoft.com/ws/2007/08/connect/roles/relay'
|
195
|
+
true
|
196
|
+
end
|
197
|
+
|
198
|
+
Session.open("http://#{DotNetServices.relay_host}/services/user/location") do
|
199
|
+
|session|
|
200
|
+
session.get_from_relay
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
describe "post_to_relay" do
|
207
|
+
|
208
|
+
it "should set X-Process-At header and send to the bus as normal post" do
|
209
|
+
mock_http = mock('http')
|
210
|
+
Net::HTTP.should_receive(:start).with(DotNetServices.relay_host, 80).and_yield(mock_http)
|
211
|
+
|
212
|
+
mock_http.should_receive(:request) do |post_request|
|
213
|
+
post_request['X-Process-At'].should == 'http://schemas.microsoft.com/ws/2007/08/connect/roles/relay'
|
214
|
+
true
|
215
|
+
end
|
216
|
+
|
217
|
+
Session.open("http://#{DotNetServices.relay_host}/services/user/location") do
|
218
|
+
|session|
|
219
|
+
session.post_to_relay
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
def mock_http_get(host, port, path, query = nil)
|
226
|
+
mock_http = mock('http')
|
227
|
+
mock_get = mock('get')
|
228
|
+
Net::HTTP.should_receive(:start).with(host, port).and_yield(mock_http)
|
229
|
+
path_and_query = query ? "#{path}?#{query}" : path
|
230
|
+
Net::HTTP::Get.should_receive(:new).with(path_and_query).and_return(mock_get)
|
231
|
+
mock_http.should_receive(:request).with(mock_get).and_return(:http_get_result)
|
232
|
+
[mock_http, mock_get]
|
233
|
+
end
|
234
|
+
|
235
|
+
def mock_http_post_form(host, port, path, form_data=nil)
|
236
|
+
mock_http = mock('http')
|
237
|
+
mock_post = mock('post')
|
238
|
+
Net::HTTP.should_receive(:start).with(host, port).and_yield(mock_http)
|
239
|
+
Net::HTTP::Post.should_receive(:new).with(path).and_return(mock_post)
|
240
|
+
mock_post.should_receive(:form_data=).with(form_data)
|
241
|
+
mock_post.should_receive(:content_type=).with('application/x-www-form-urlencoded')
|
242
|
+
mock_http.should_receive(:request).with(mock_post).and_return(:http_post_result)
|
243
|
+
[mock_http, mock_post]
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
247
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dot_net_services
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ThoughtWorks
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-10-27 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: dotnetsrv-ruby-users@rubyforge.org
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/dot_net_services
|
26
|
+
- lib/dot_net_services/authentication.rb
|
27
|
+
- lib/dot_net_services/error.rb
|
28
|
+
- lib/dot_net_services/message_buffer.rb
|
29
|
+
- lib/dot_net_services/session.rb
|
30
|
+
- lib/dot_net_services.rb
|
31
|
+
- lib/net
|
32
|
+
- lib/net/http
|
33
|
+
- lib/net/http/create_mb.rb
|
34
|
+
- lib/net/http/retrieve.rb
|
35
|
+
- lib/net/http/subscribe.rb
|
36
|
+
- lib/net/http/unsubscribe.rb
|
37
|
+
- spec/integration
|
38
|
+
- spec/integration/end_to_end_spec.rb
|
39
|
+
- spec/integration/TestService
|
40
|
+
- spec/integration/TestService/Service
|
41
|
+
- spec/integration/TestService/Service/AnonymousResourceService.cs
|
42
|
+
- spec/integration/TestService/Service/App.config
|
43
|
+
- spec/integration/TestService/Service/PlainTextService.cs
|
44
|
+
- spec/integration/TestService/Service/Program.cs
|
45
|
+
- spec/integration/TestService/Service/Properties
|
46
|
+
- spec/integration/TestService/Service/Properties/AssemblyInfo.cs
|
47
|
+
- spec/integration/TestService/Service/ResourceContract.cs
|
48
|
+
- spec/integration/TestService/Service/ResourceService.cs
|
49
|
+
- spec/integration/TestService/Service/Service.csproj
|
50
|
+
- spec/integration/TestService/TestService.sln
|
51
|
+
- spec/integration/vmb_spec.rb
|
52
|
+
- spec/spec_helper.rb
|
53
|
+
- spec/unit
|
54
|
+
- spec/unit/dot_net_services
|
55
|
+
- spec/unit/dot_net_services/authentication_spec.rb
|
56
|
+
- spec/unit/dot_net_services/message_buffer_spec.rb
|
57
|
+
- spec/unit/dot_net_services/session_spec.rb
|
58
|
+
- README
|
59
|
+
- LICENSE
|
60
|
+
has_rdoc: true
|
61
|
+
homepage: http://dotnetservicesruby.com/
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
78
|
+
version:
|
79
|
+
requirements: []
|
80
|
+
|
81
|
+
rubyforge_project: dotnetsrv-ruby
|
82
|
+
rubygems_version: 1.2.0
|
83
|
+
signing_key:
|
84
|
+
specification_version: 2
|
85
|
+
summary: .NET Services for Ruby
|
86
|
+
test_files: []
|
87
|
+
|