jimmyz-fs-communicator 0.1.0 → 0.2.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.
@@ -1,4 +1,4 @@
1
1
  ---
2
- :minor: 1
2
+ :minor: 2
3
3
  :patch: 0
4
4
  :major: 0
@@ -18,6 +18,23 @@ class FsCommunicator
18
18
  @session = o[:session]
19
19
  end
20
20
 
21
+ def post(url,payload)
22
+ uri = URI.parse(self.domain+url)
23
+ full_url = set_extra_params(uri)
24
+ request = Net::HTTP::Post.new(full_url)
25
+ request.body = payload
26
+ request['Content-Type'] = "text/xml"
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ if uri.scheme == 'https'
29
+ http.use_ssl = true
30
+ http.ca_file = File.join File.dirname(__FILE__), 'assets','entrust-ca.crt'
31
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
32
+ end
33
+ res = http.start do |ht|
34
+ ht.request(request)
35
+ end
36
+ end
37
+
21
38
  def get(url,credentials = {})
22
39
  uri = URI.parse(self.domain+url)
23
40
  full_url = set_extra_params(uri,credentials)
@@ -38,7 +55,7 @@ class FsCommunicator
38
55
  end
39
56
 
40
57
  private
41
- def set_extra_params(uri,credentials)
58
+ def set_extra_params(uri,credentials = {})
42
59
  if credentials[:username] && credentials[:password]
43
60
  sessionized_url = add_key(uri)
44
61
  else
@@ -3,11 +3,13 @@ require File.dirname(__FILE__) + '/spec_helper'
3
3
  module HttpCommunicatorHelper
4
4
 
5
5
  def stub_net_objects
6
- @request = mock("Net::HTTP::Get")
7
- # @request.stub!(:[]=)
6
+ @request = mock("Net::HTTP::Get|Post")
7
+ @request.stub!(:[]=)
8
+ @request.stub!(:body=)
8
9
  @http = mock("Net::HTTP")
9
10
  Net::HTTP.stub!(:new).and_return(@http)
10
11
  Net::HTTP::Get.stub!(:new).and_return(@request)
12
+ Net::HTTP::Post.stub!(:new).and_return(@request)
11
13
  @http.stub!(:use_ssl=)
12
14
  @http.stub!(:ca_file=)
13
15
  @http.stub!(:verify_mode=)
@@ -114,4 +116,71 @@ describe FsCommunicator do
114
116
 
115
117
  end
116
118
 
119
+ describe "POST on a URL" do
120
+ before(:each) do
121
+ options = {
122
+ :domain => 'https://api.familysearch.org',
123
+ :key => '1111-1111',
124
+ :user_agent => "FsCommunicator/0.1",
125
+ :session => 'SESSID'
126
+ }
127
+ @com = FsCommunicator.new options
128
+ stub_net_objects
129
+ @url = '/familytree/v1/person/KWQS-BBQ'
130
+ @session_url = @url + "?sessionId=#{@com.session}"
131
+ @payload = "<familytree></familytree>"
132
+ end
133
+
134
+ def do_post(url, payload = '')
135
+ @com.post(url, payload)
136
+ end
137
+
138
+ it "should initialize a Net::HTTP object to make the request" do
139
+ Net::HTTP.should_receive(:new).with('api.familysearch.org',443).and_return(@http)
140
+ do_post(@url)
141
+ end
142
+
143
+ it "should create a POST request with url containing a session" do
144
+ Net::HTTP::Post.should_receive(:new).with(@session_url).and_return(@request)
145
+ do_post(@url)
146
+ end
147
+
148
+ it "should tack a sessionId as an additional parameter if params already set" do
149
+ url = "/familytree/v1/person/KWQS-BBQ?view=summary"
150
+ Net::HTTP::Post.should_receive(:new).with(url+"&sessionId=#{@com.session}").and_return(@request)
151
+ do_post(url)
152
+ end
153
+
154
+ it "should set the request's body to the payload attached" do
155
+ @request.should_receive(:body=).with(@payload)
156
+ @request.should_receive(:[]=).with('Content-Type','text/xml')
157
+ do_post(@url,@payload)
158
+ end
159
+
160
+ it "should set the http object to use ssl if https" do
161
+ @http.should_receive(:use_ssl=).with(true)
162
+ do_post(@url)
163
+ end
164
+
165
+ it "should not set the http object to use ssl if no http" do
166
+ @com.domain = 'http://www.dev.usys.org'
167
+ @http.should_not_receive(:use_ssl=)
168
+ do_post(@url)
169
+ end
170
+
171
+ it "should set the ca file to the entrust certificate (for FamilySearch systems)" do
172
+ @http.should_receive(:ca_file=).with(File.join(File.dirname(__FILE__),'..','lib','assets','entrust-ca.crt'))
173
+ do_post(@url)
174
+ end
175
+
176
+ it "should make the request" do
177
+ block = lambda{ |ht|
178
+ ht.request('something')
179
+ }
180
+ @http.should_receive(:start)
181
+ do_post(@url)
182
+ end
183
+
184
+ end
185
+
117
186
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jimmyz-fs-communicator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Zimmerman
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-02 00:00:00 -08:00
12
+ date: 2009-03-04 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15