midwife-client 0.0.7 → 0.0.8

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,5 +1,5 @@
1
1
  module Midwife
2
2
  class Client
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
@@ -13,11 +13,13 @@ module Midwife
13
13
  end
14
14
  end
15
15
 
16
+ class NotFoundError < RequestError; end
17
+
16
18
  module Request
17
19
  private
18
20
 
19
21
  def request(path, attributes)
20
- uri = URI.parse(@endpoint + path)
22
+ uri = URI.join(@endpoint, path)
21
23
 
22
24
  request = Net::HTTP::Post.new(uri.path)
23
25
  request["content-type"] = "application/json"
@@ -32,8 +34,11 @@ module Midwife
32
34
 
33
35
  response = http.request(request)
34
36
 
35
- if response.code =~ /2../
37
+ case response.code
38
+ when /2../
36
39
  JSON.parse(response.body)
40
+ when /404/
41
+ raise NotFoundError.new(response)
37
42
  else
38
43
  raise RequestError.new(response)
39
44
  end
@@ -22,4 +22,5 @@ Gem::Specification.new do |s|
22
22
  s.add_dependency 'json'
23
23
 
24
24
  s.add_development_dependency 'rspec', '~> 2.5'
25
+ s.add_development_dependency 'webmock', '~> 1.6.4'
25
26
  end
data/spec/client_spec.rb CHANGED
@@ -141,11 +141,13 @@ describe Midwife::Client do
141
141
 
142
142
  context 'when processing a non-success response' do
143
143
  let(:client) { Midwife::Client.new }
144
+ let(:http) { double.as_null_object }
144
145
  let(:response) { double(:code => '404', :body => 'error') }
145
146
 
146
147
 
147
148
  before do
148
- Net::HTTP.stub(:start).and_return(response)
149
+ http.stub(:request).and_return(response)
150
+ Net::HTTP.stub(:new).and_return(http)
149
151
  end
150
152
 
151
153
  it 'raises an exception' do
@@ -0,0 +1 @@
1
+ {"status":false}
@@ -0,0 +1 @@
1
+ {"status":true}
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+ require 'webmock/rspec'
3
+
4
+ describe Midwife::Client do
5
+
6
+ let(:client) { Midwife::Client.new }
7
+
8
+ def file_fixture(path)
9
+ File.read(File.join('spec/fixtures', path))
10
+ end
11
+
12
+ describe '#unsubscribe' do
13
+ context 'when the recipient exists' do
14
+ before do
15
+ stub_request(:post, "http://localhost:3000/unsubscribe").
16
+ with(:body => "{\"list_id\":42,\"email\":\"exists@email.com\"}").
17
+ to_return(:body => file_fixture('unsubscribe/recipient_exists.json'))
18
+ end
19
+
20
+ it 'returns the JSON from the response' do
21
+ response = client.unsubscribe(:list_id => 42, :email => 'exists@email.com')
22
+
23
+ response.should == { 'status' => true }
24
+ end
25
+ end
26
+
27
+ context 'when the recipient does not exist' do
28
+ before do
29
+ stub_request(:post, "http://localhost:3000/unsubscribe").
30
+ with(:body => "{\"list_id\":42,\"email\":\"doesnotexist@email.com\"}").
31
+ to_return(:status => 404, :body => file_fixture('unsubscribe/recipient_does_not_exist.json'))
32
+ end
33
+
34
+ it 'raises a RecipientNotFound exception' do
35
+ expect {
36
+ client.unsubscribe(:list_id => 42, :email => 'doesnotexist@email.com')
37
+ }.to raise_error(Midwife::NotFoundError)
38
+ end
39
+ end
40
+ end
41
+
42
+ end
File without changes
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: midwife-client
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Guterl
@@ -47,6 +47,22 @@ dependencies:
47
47
  version: "2.5"
48
48
  type: :development
49
49
  version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: webmock
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 7
59
+ segments:
60
+ - 1
61
+ - 6
62
+ - 4
63
+ version: 1.6.4
64
+ type: :development
65
+ version_requirements: *id003
50
66
  description: A ruby wrapper for the Midwife HTTP API
51
67
  email:
52
68
  - mguterl@gmail.com
@@ -66,7 +82,10 @@ files:
66
82
  - lib/midwife/client/version.rb
67
83
  - midwife-client.gemspec
68
84
  - spec/client_spec.rb
69
- - spec_helper.rb
85
+ - spec/fixtures/unsubscribe/recipient_does_not_exist.json
86
+ - spec/fixtures/unsubscribe/recipient_exists.json
87
+ - spec/integration_spec.rb
88
+ - spec/spec_helper.rb
70
89
  has_rdoc: true
71
90
  homepage: ""
72
91
  licenses: []
@@ -103,3 +122,7 @@ specification_version: 3
103
122
  summary: A ruby wrapper for the Midwife HTTP API
104
123
  test_files:
105
124
  - spec/client_spec.rb
125
+ - spec/fixtures/unsubscribe/recipient_does_not_exist.json
126
+ - spec/fixtures/unsubscribe/recipient_exists.json
127
+ - spec/integration_spec.rb
128
+ - spec/spec_helper.rb