ruby-satisfaction 0.7.0 → 0.7.3

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.lock CHANGED
@@ -28,7 +28,7 @@ GEM
28
28
  open_gem (1.4.2)
29
29
  launchy (~> 0.3.5)
30
30
  rake (0.8.7)
31
- rr (1.0.2)
31
+ rr (1.0.4)
32
32
  rspec (2.2.0)
33
33
  rspec-core (~> 2.2)
34
34
  rspec-expectations (~> 2.2)
@@ -56,7 +56,7 @@ DEPENDENCIES
56
56
  nokogiri (>= 1.4.2)
57
57
  oauth (>= 0.3.5)
58
58
  open_gem (>= 1.4)
59
- rr (= 1.0.2)
59
+ rr (= 1.0.4)
60
60
  rspec (~> 2.2)
61
61
  ruby-debug (>= 0.10.4)
62
62
  ruby-satisfaction!
data/README.markdown CHANGED
@@ -11,6 +11,13 @@ For questions, please visit the [Get Satisfaction API community][3]
11
11
 
12
12
  Changelog
13
13
  =========
14
+ 0.7.1
15
+
16
+ * Integration smoke tests to validate proper ssl
17
+ request.
18
+ * Test loader code on the SSL context also
19
+ * Suppress the 'warning: peer certificate won't be verified in this SSL session'
20
+
14
21
  0.7.0
15
22
 
16
23
  * Revised Sfn::Resource so that it supports calls to API endpoints for nested resources
@@ -34,6 +34,7 @@ class Sfn::Loader
34
34
  end
35
35
 
36
36
  http = Net::HTTP.new(uri.host, uri.port)
37
+ http.use_ssl = true if uri.scheme.try(:downcase) == 'https'
37
38
  add_authentication(request, http, options)
38
39
  response = execute(http, request)
39
40
 
@@ -86,6 +87,7 @@ class Sfn::Loader
86
87
  request.set_form_data(form)
87
88
 
88
89
  http = Net::HTTP.new(uri.host, uri.port)
90
+ http.use_ssl = true if uri.scheme.try(:downcase) == 'https'
89
91
  add_authentication(request, http, options)
90
92
  response = execute(http, request)
91
93
 
@@ -1,8 +1,8 @@
1
- module Satisfaction
1
+ module GemSatisfaction
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 7
5
- PATCH = 0
5
+ PATCH = 3
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
data/lib/satisfaction.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'satisfaction/external_dependencies'
2
+
2
3
  module Sfn
3
4
  end
4
5
  class Satisfaction
@@ -3,7 +3,7 @@ require File.expand_path("../lib/satisfaction/version", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "ruby-satisfaction"
6
- s.version = Satisfaction::VERSION::STRING
6
+ s.version = GemSatisfaction::VERSION::STRING
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.author = 'Get Satisfaction'
9
9
  s.email = ["nerds+rubygems@getsatisfaction.com"]
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_development_dependency "fakeweb", "~> 1.3"
27
27
  s.add_development_dependency "open_gem", ">= 1.4"
28
28
  s.add_development_dependency "ruby-debug", ">= 0.10.4"
29
- s.add_development_dependency "rr", '1.0.2'
29
+ s.add_development_dependency "rr", '1.0.4'
30
30
 
31
31
  s.extra_rdoc_files = [ "README.markdown" ]
32
32
  s.files = `git ls-files`.split("\n") - ['.rvmrc', '.gitignore']
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Smoke test SSL conections' do
4
+ before do
5
+ @app_host = 'getsatisfaction.com'
6
+ @api_host = 'api.getsatisfaction.com'
7
+ FakeWeb.clean_registry
8
+ FakeWeb.allow_net_connect = true
9
+ end
10
+
11
+ shared_examples_for 'get' do
12
+ it 'should get the first page of getsat topics' do
13
+ results = @sfn.companies['getsatisfaction'].topics.page(1, :limit => 10)
14
+ results.items.size.should == 10
15
+ end
16
+ end
17
+
18
+ context 'over ssl' do
19
+ before do
20
+ @sfn = Satisfaction.new(
21
+ :root => "https://#{@api_host}",
22
+ :autoload => false,
23
+ :request_token_url => "https://#{@app_host}/api/request_token",
24
+ :access_token_url => "https://#{@app_host}/api/access_token",
25
+ :authorize_url => "https://#{@app_host}/api/authorize"
26
+ )
27
+ end
28
+
29
+ it_should_behave_like 'get'
30
+ end
31
+
32
+ context 'not over ssl' do
33
+ before do
34
+ @sfn = Satisfaction.new(
35
+ :root => "http://#{@api_host}",
36
+ :autoload => false,
37
+ :request_token_url => "http://#{@app_host}/api/request_token",
38
+ :access_token_url => "http://#{@app_host}/api/access_token",
39
+ :authorize_url => "http://#{@app_host}/api/authorize"
40
+ )
41
+ end
42
+
43
+ it_should_behave_like 'get'
44
+ end
45
+ end
@@ -3,8 +3,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  describe Sfn::Loader do
4
4
 
5
5
  # ==== GET ==========================================================================================================
6
-
7
- describe "#get" do
6
+ shared_examples_for "#get" do
8
7
  before(:each) do
9
8
  @response = nil
10
9
  @status_code = '200'
@@ -12,12 +11,12 @@ describe Sfn::Loader do
12
11
  @get = lambda do
13
12
  FakeWeb.register_uri(
14
13
  :get,
15
- 'http://test',
14
+ "http://#{@api_host}:#{@api_port}",
16
15
  :body => @response_body,
17
16
  :status => [@status_code]
18
17
  )
19
18
  stub(@loader).add_authentication {}
20
- @response = @loader.get('http://test')
19
+ @response = @loader.get(@api_url)
21
20
  end
22
21
  end
23
22
 
@@ -48,44 +47,6 @@ describe Sfn::Loader do
48
47
  end
49
48
  end
50
49
 
51
- describe "when we are in a redirect loop" do
52
- attr_reader :loader
53
-
54
- before(:each) do
55
- @url = 'http://loop/'
56
- @loader = Sfn::Loader.new
57
- stub(loader).add_authentication {}
58
- end
59
-
60
- describe "and the status is 301" do
61
- before(:each) do
62
- @get = lambda {
63
- FakeWeb.register_uri(:get, @url, :status => 301, :location => @url)
64
- @response = loader.get(@url)
65
- }
66
- end
67
-
68
- it "should raise a TooManyRedirects exception with an appropriate message" do
69
- @get.should raise_error(Sfn::TooManyRedirects, "Too many redirects")
70
- end
71
- end
72
-
73
- describe "and the status is 302" do
74
- before(:each) do
75
- @get = lambda {
76
- FakeWeb.register_uri(:get, @url, :status => 302, :location => @url)
77
- @response = loader.get(@url)
78
- }
79
- end
80
-
81
- it "should raise a TooManyRedirects exception with an appropriate message" do
82
- @get.should raise_error(Sfn::TooManyRedirects, "Too many redirects")
83
- end
84
- end
85
-
86
-
87
- end
88
-
89
50
  describe "when the status is 400 (Bad Request)" do
90
51
  before(:each) do
91
52
  @status_code = '400'
@@ -193,20 +154,20 @@ describe Sfn::Loader do
193
154
  end
194
155
 
195
156
  # ==== POST ==================================================================================================
196
- describe "#post" do
157
+ shared_examples_for "#post" do
197
158
  before(:each) do
198
159
  @response = nil
199
160
  @status_code = '200'
200
161
  @post = lambda do
201
162
  FakeWeb.register_uri(
202
163
  :post,
203
- 'http://test',
164
+ "http://#{@api_host}:#{@api_port}",
204
165
  :body => @response_body,
205
166
  :status => [@status_code]
206
167
  )
207
168
  loader = Sfn::Loader.new
208
169
  stub(loader).add_authentication {}
209
- @response = loader.post('http://test', "a=b")
170
+ @response = loader.post(@api_url, "a=b")
210
171
  end
211
172
  end
212
173
 
@@ -265,13 +226,113 @@ describe Sfn::Loader do
265
226
  end
266
227
  end
267
228
 
229
+ # ---- GATEWAY -----------------------------------------------------------------------------------------------
230
+ describe "when the status is 502 (Bad Gateway, returned when a Unicorn worker is killed)" do
231
+ before(:each) do
232
+ @status_code = '502'
233
+ end
234
+
235
+ it "should raise an Sfn::BadGateway error" do
236
+ @post.should raise_error(Sfn::BadGateway, "Bad Gateway")
237
+ end
238
+ end
239
+
240
+ describe "when the status is 504 (GatewayTimeOut)" do
241
+ before(:each) do
242
+ @status_code = '504'
243
+ end
244
+
245
+ it "should raise an Sfn::GatewayTimeOut error" do
246
+ @post.should raise_error(Sfn::GatewayTimeOut, "Gateway TimeOut")
247
+ end
248
+ end
249
+ end
250
+
251
+ context 'over ssl' do
252
+ before do
253
+ @api_host = 'test'
254
+ @api_url = "https://#{@api_host}"
255
+ @api_port = "443"
256
+ any_instance_of(Net::HTTP) do |n|
257
+ mock(n).use_ssl=(true)
258
+ end
259
+ end
260
+
261
+ it_should_behave_like '#get'
262
+ it_should_behave_like '#post'
263
+ end
264
+
265
+ context 'not over ssl' do
266
+ before do
267
+ @api_host = 'test'
268
+ @api_url = "http://#{@api_host}"
269
+ @api_port = ""
270
+ end
271
+
272
+ it_should_behave_like '#get'
273
+ it_should_behave_like '#post'
274
+
275
+
276
+ describe "when we are in a redirect loop" do
277
+ attr_reader :loader
278
+
279
+ before(:each) do
280
+ @url = @api_url
281
+ @loader = Sfn::Loader.new
282
+ stub(loader).add_authentication {}
283
+ end
284
+
285
+ describe "and the status is 301" do
286
+ before(:each) do
287
+ @get = lambda {
288
+ FakeWeb.register_uri(:get, "http://#{@api_host}:#{@api_port}", :status => 301, :location => @url)
289
+ @response = loader.get(@url)
290
+ }
291
+ end
292
+
293
+ it "should raise a TooManyRedirects exception with an appropriate message" do
294
+ @get.should raise_error(Sfn::TooManyRedirects, "Too many redirects")
295
+ end
296
+ end
297
+
298
+ describe "and the status is 302" do
299
+ before(:each) do
300
+ @get = lambda {
301
+ FakeWeb.register_uri(:get, "http://#{@api_host}:#{@api_port}", :status => 302, :location => @url)
302
+ @response = loader.get(@url)
303
+ }
304
+ end
305
+
306
+ it "should raise a TooManyRedirects exception with an appropriate message" do
307
+ @get.should raise_error(Sfn::TooManyRedirects, "Too many redirects")
308
+ end
309
+ end
310
+ end
311
+ end
312
+
268
313
  # ---- MAINTENANCE --------------------------------------------------------------------------------------------------
314
+ describe 'MAINTENANCE' do
315
+ before(:each) do
316
+ @api_url = "http://test"
317
+ @response = nil
318
+ @status_code = '200'
319
+ @post = lambda do
320
+ FakeWeb.register_uri(
321
+ :post,
322
+ @api_url,
323
+ :body => @response_body,
324
+ :status => [@status_code]
325
+ )
326
+ loader = Sfn::Loader.new
327
+ stub(loader).add_authentication {}
328
+ @response = loader.post(@api_url, "a=b")
329
+ end
330
+ end
269
331
 
270
332
  shared_examples_for "the site is in maintenance mode" do
271
-
272
333
  describe "and there is not an element with a class of error_message_summary in the HTML" do
273
334
  before(:each) do
274
- FakeWeb.register_uri(:get, 'http://test', :body => "blah", :status => "503")
335
+ FakeWeb.register_uri(:get, @api_url, :body => "blah", :status => "503")
275
336
  end
276
337
 
277
338
  it "should raise an error and include the default maintenance message" do
@@ -282,15 +343,14 @@ describe Sfn::Loader do
282
343
  describe "and there is an element with a class of error_message_summary in the HTML" do
283
344
  before(:each) do
284
345
  @custom_error = "Something crazy is going down!"
285
- @response_body = "<html><head></head><body><h2 class='error_message_summary'>#{@custom_error}</h2></body>"
286
- FakeWeb.register_uri(:get, 'http://test', :body => @response_body, :status => "503")
287
- end
346
+ @response_body = "<html><head></head><body><h2 class='error_message_summary'>#{@custom_error}</h2></body>"
347
+ FakeWeb.register_uri(:get, @api_url, :body => @response_body, :status => "503")
348
+ end
288
349
 
289
350
  it "should raise an error and include the contents of the element" do
290
351
  @post.should raise_error(Sfn::SiteMaintenance, @custom_error)
291
352
  end
292
353
  end
293
-
294
354
  end
295
355
 
296
356
  describe "when the status is 405 (Method Not Allowed)" do
@@ -303,7 +363,7 @@ describe Sfn::Loader do
303
363
 
304
364
  describe "when the site is not in maintenance mode" do
305
365
  before(:each) do
306
- FakeWeb.register_uri(:get, 'http://test', :body => "blah", :status => "200")
366
+ FakeWeb.register_uri(:get, @api_url, :body => "blah", :status => "200")
307
367
  end
308
368
 
309
369
  it "should raise an error and include the reponse body" do
@@ -337,28 +397,5 @@ describe Sfn::Loader do
337
397
  end
338
398
  end
339
399
  end
340
-
341
- # ---- GATEWAY -----------------------------------------------------------------------------------------------
342
- describe "when the status is 502 (Bad Gateway, returned when a Unicorn worker is killed)" do
343
- before(:each) do
344
- @status_code = '502'
345
- end
346
-
347
- it "should raise an Sfn::BadGateway error" do
348
- @post.should raise_error(Sfn::BadGateway, "Bad Gateway")
349
- end
350
- end
351
-
352
- describe "when the status is 504 (GatewayTimeOut)" do
353
- before(:each) do
354
- @status_code = '504'
355
- end
356
-
357
- it "should raise an Sfn::GatewayTimeOut error" do
358
- @post.should raise_error(Sfn::GatewayTimeOut, "Gateway TimeOut")
359
- end
360
- end
361
-
362
400
  end
363
-
364
401
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-satisfaction
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 0
10
- version: 0.7.0
9
+ - 3
10
+ version: 0.7.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Get Satisfaction
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-12 00:00:00 -07:00
18
+ date: 2011-12-20 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -198,12 +198,12 @@ dependencies:
198
198
  requirements:
199
199
  - - "="
200
200
  - !ruby/object:Gem::Version
201
- hash: 19
201
+ hash: 31
202
202
  segments:
203
203
  - 1
204
204
  - 0
205
- - 2
206
- version: 1.0.2
205
+ - 4
206
+ version: 1.0.4
207
207
  type: :development
208
208
  version_requirements: *id012
209
209
  description: Ruby client for using Get Satisfaction's RESTful API. Get Satisfaction is a simple way to build online communities that enable productive conversations between companies and their customers. More than 46,000 companies use Get Satisfaction to provide a more social support experience, build better products, increase SEO and improve customer loyalty. Get Satisfaction communities are available at http://getsatisfaction.com.
@@ -243,6 +243,7 @@ files:
243
243
  - lib/satisfaction/util.rb
244
244
  - lib/satisfaction/version.rb
245
245
  - ruby-satisfaction.gemspec
246
+ - spec/integration_spec.rb
246
247
  - spec/satisfaction/associations_spec.rb
247
248
  - spec/satisfaction/identity_map_spec.rb
248
249
  - spec/satisfaction/loader_spec.rb
@@ -285,6 +286,7 @@ signing_key:
285
286
  specification_version: 3
286
287
  summary: Get Satisfaction ruby client
287
288
  test_files:
289
+ - spec/integration_spec.rb
288
290
  - spec/satisfaction/associations_spec.rb
289
291
  - spec/satisfaction/identity_map_spec.rb
290
292
  - spec/satisfaction/loader_spec.rb