midwife-client 0.0.5 → 0.0.6
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/lib/midwife/client/version.rb +1 -1
 - data/lib/midwife/client.rb +16 -6
 - data/midwife-client.gemspec +0 -1
 - data/spec/client_spec.rb +30 -13
 - metadata +6 -22
 
    
        data/lib/midwife/client.rb
    CHANGED
    
    | 
         @@ -1,7 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require "net/http"
         
     | 
| 
       2 
2 
     | 
    
         
             
            require "uri"
         
     | 
| 
       3 
3 
     | 
    
         
             
            require "json"
         
     | 
| 
       4 
     | 
    
         
            -
            require 'excon'
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
            module Midwife
         
     | 
| 
       7 
6 
     | 
    
         
             
              class RequestError < StandardError
         
     | 
| 
         @@ -16,9 +15,17 @@ module Midwife 
     | 
|
| 
       16 
15 
     | 
    
         
             
                private
         
     | 
| 
       17 
16 
     | 
    
         | 
| 
       18 
17 
     | 
    
         
             
                def request(path, attributes)
         
     | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
      
 18 
     | 
    
         
            +
                  uri = URI.parse(@endpoint + path)
         
     | 
| 
       20 
19 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                   
     | 
| 
      
 20 
     | 
    
         
            +
                  request = Net::HTTP::Post.new(uri.path)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  request["content-type"] = "application/json"
         
     | 
| 
      
 22 
     | 
    
         
            +
                  request.body = attributes.to_json
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  response = Net::HTTP.start(uri.host, uri.port) { |http|
         
     | 
| 
      
 25 
     | 
    
         
            +
                    http.request(request)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  if response.code =~ /2../
         
     | 
| 
       22 
29 
     | 
    
         
             
                    JSON.parse(response.body)
         
     | 
| 
       23 
30 
     | 
    
         
             
                  else
         
     | 
| 
       24 
31 
     | 
    
         
             
                    raise RequestError.new(response)
         
     | 
| 
         @@ -43,9 +50,6 @@ module Midwife 
     | 
|
| 
       43 
50 
     | 
    
         
             
                    raise ArgumentError, "list_id is required"
         
     | 
| 
       44 
51 
     | 
    
         
             
                  }
         
     | 
| 
       45 
52 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                  # transform into an array
         
     | 
| 
       47 
     | 
    
         
            -
                  attributes['subscription_ids[]'] = attributes.delete(:subscription_ids) || []
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
53 
     | 
    
         
             
                  request "/lists/#{list_id}/recipients", attributes
         
     | 
| 
       50 
54 
     | 
    
         
             
                end
         
     | 
| 
       51 
55 
     | 
    
         | 
| 
         @@ -65,6 +69,12 @@ module Midwife 
     | 
|
| 
       65 
69 
     | 
    
         
             
                  request "/campaigns/#{campaign_id}/deliver", attributes
         
     | 
| 
       66 
70 
     | 
    
         
             
                end
         
     | 
| 
       67 
71 
     | 
    
         | 
| 
      
 72 
     | 
    
         
            +
                def deliver_campaign_test(attributes)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  campaign_id = attributes.delete(:campaign_id)
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  request "/campaigns/#{campaign_id}/deliver_test", attributes
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
       68 
78 
     | 
    
         
             
                def unsubscribe(attributes)
         
     | 
| 
       69 
79 
     | 
    
         
             
                  request "/unsubscribe", attributes
         
     | 
| 
       70 
80 
     | 
    
         
             
                end
         
     | 
    
        data/midwife-client.gemspec
    CHANGED
    
    
    
        data/spec/client_spec.rb
    CHANGED
    
    | 
         @@ -33,14 +33,6 @@ describe Midwife::Client do 
     | 
|
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                before do
         
     | 
| 
       35 
35 
     | 
    
         
             
                  client.reset
         
     | 
| 
       36 
     | 
    
         
            -
                  @campaign_attributes = {
         
     | 
| 
       37 
     | 
    
         
            -
                    'name'       => 'April 2011 eVetTen',
         
     | 
| 
       38 
     | 
    
         
            -
                    'from_name'  => 'Robert Eversole',
         
     | 
| 
       39 
     | 
    
         
            -
                    'from_email' => 'robert.eversole@recruitmilitary.com',
         
     | 
| 
       40 
     | 
    
         
            -
                    'subject'    => '[RecruitMilitary] April eVetTen',
         
     | 
| 
       41 
     | 
    
         
            -
                    'html_body'  => '<p>Hello world</p>',
         
     | 
| 
       42 
     | 
    
         
            -
                    'plain_body' => 'hello world'
         
     | 
| 
       43 
     | 
    
         
            -
                  }
         
     | 
| 
       44 
36 
     | 
    
         
             
                end
         
     | 
| 
       45 
37 
     | 
    
         | 
| 
       46 
38 
     | 
    
         
             
                def last_request
         
     | 
| 
         @@ -63,7 +55,7 @@ describe Midwife::Client do 
     | 
|
| 
       63 
55 
     | 
    
         | 
| 
       64 
56 
     | 
    
         
             
                    last_request.path.should == "/lists/42/recipients"
         
     | 
| 
       65 
57 
     | 
    
         
             
                    last_request.method.should == :post
         
     | 
| 
       66 
     | 
    
         
            -
                    last_request.params.should == { :email => 'michael@jordan.com',  
     | 
| 
      
 58 
     | 
    
         
            +
                    last_request.params.should == { :email => 'michael@jordan.com', :subscription_ids => [1, 2] }
         
     | 
| 
       67 
59 
     | 
    
         
             
                  end
         
     | 
| 
       68 
60 
     | 
    
         | 
| 
       69 
61 
     | 
    
         
             
                  context 'when list_id is missing' do
         
     | 
| 
         @@ -77,11 +69,26 @@ describe Midwife::Client do 
     | 
|
| 
       77 
69 
     | 
    
         | 
| 
       78 
70 
     | 
    
         
             
                describe '#create_campaign' do
         
     | 
| 
       79 
71 
     | 
    
         
             
                  it 'creates a campaign' do
         
     | 
| 
       80 
     | 
    
         
            -
                    client.create_campaign( 
     | 
| 
      
 72 
     | 
    
         
            +
                    client.create_campaign(
         
     | 
| 
      
 73 
     | 
    
         
            +
                      :filters    => [{:column => 'location', :operator => 'near', :value => '45140', :extras => { :distance => 150 }}],
         
     | 
| 
      
 74 
     | 
    
         
            +
                      :name       => 'April 2011 eVetTen',
         
     | 
| 
      
 75 
     | 
    
         
            +
                      :from_name  => 'Robert Eversole',
         
     | 
| 
      
 76 
     | 
    
         
            +
                      :from_email => 'robert.eversole@recruitmilitary.com',
         
     | 
| 
      
 77 
     | 
    
         
            +
                      :subject    => '[RecruitMilitary] April eVetTen',
         
     | 
| 
      
 78 
     | 
    
         
            +
                      :html_body  => '<p>Hello world</p>',
         
     | 
| 
      
 79 
     | 
    
         
            +
                      :plain_body => 'hello world')
         
     | 
| 
       81 
80 
     | 
    
         | 
| 
       82 
81 
     | 
    
         
             
                    last_request.path.should == "/campaigns"
         
     | 
| 
       83 
82 
     | 
    
         
             
                    last_request.method.should == :post
         
     | 
| 
       84 
     | 
    
         
            -
                    last_request.params.should ==  
     | 
| 
      
 83 
     | 
    
         
            +
                    last_request.params.should == {
         
     | 
| 
      
 84 
     | 
    
         
            +
                      :filters    => [{:column => 'location', :operator => 'near', :value => '45140', :extras => { :distance => 150 }}],
         
     | 
| 
      
 85 
     | 
    
         
            +
                      :name       => 'April 2011 eVetTen',
         
     | 
| 
      
 86 
     | 
    
         
            +
                      :from_name  => 'Robert Eversole',
         
     | 
| 
      
 87 
     | 
    
         
            +
                      :from_email => 'robert.eversole@recruitmilitary.com',
         
     | 
| 
      
 88 
     | 
    
         
            +
                      :subject    => '[RecruitMilitary] April eVetTen',
         
     | 
| 
      
 89 
     | 
    
         
            +
                      :html_body  => '<p>Hello world</p>',
         
     | 
| 
      
 90 
     | 
    
         
            +
                      :plain_body => 'hello world'
         
     | 
| 
      
 91 
     | 
    
         
            +
                    }
         
     | 
| 
       85 
92 
     | 
    
         
             
                  end
         
     | 
| 
       86 
93 
     | 
    
         
             
                end
         
     | 
| 
       87 
94 
     | 
    
         | 
| 
         @@ -120,15 +127,25 @@ describe Midwife::Client do 
     | 
|
| 
       120 
127 
     | 
    
         
             
                    last_request.params.should == { :email => 'foo@bar.com', :list_id => 42 }
         
     | 
| 
       121 
128 
     | 
    
         
             
                  end
         
     | 
| 
       122 
129 
     | 
    
         
             
                end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                describe '#deliver_campaign_test' do
         
     | 
| 
      
 132 
     | 
    
         
            +
                  it 'generates the correct request' do
         
     | 
| 
      
 133 
     | 
    
         
            +
                    client.deliver_campaign_test(:campaign_id => 42, :emails => ['a@b.com', 'c@d.com'])
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                    last_request.path.should == "/campaigns/42/deliver_test"
         
     | 
| 
      
 136 
     | 
    
         
            +
                    last_request.method.should == :post
         
     | 
| 
      
 137 
     | 
    
         
            +
                    last_request.params.should == { :emails => ['a@b.com', 'c@d.com'] }
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
                end
         
     | 
| 
       123 
140 
     | 
    
         
             
              end
         
     | 
| 
       124 
141 
     | 
    
         | 
| 
       125 
142 
     | 
    
         
             
              context 'when processing a non-success response' do
         
     | 
| 
       126 
143 
     | 
    
         
             
                let(:client) { Midwife::Client.new }
         
     | 
| 
       127 
     | 
    
         
            -
                let(:response) { double(: 
     | 
| 
      
 144 
     | 
    
         
            +
                let(:response) { double(:code => '404') }
         
     | 
| 
       128 
145 
     | 
    
         | 
| 
       129 
146 
     | 
    
         | 
| 
       130 
147 
     | 
    
         
             
                before do
         
     | 
| 
       131 
     | 
    
         
            -
                   
     | 
| 
      
 148 
     | 
    
         
            +
                  Net::HTTP.stub(:start).and_return(response)
         
     | 
| 
       132 
149 
     | 
    
         
             
                end
         
     | 
| 
       133 
150 
     | 
    
         | 
| 
       134 
151 
     | 
    
         
             
                it 'raises an exception' do
         
     | 
    
        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:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 19
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 0
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 6
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.0.6
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Michael Guterl
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2011-05- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-05-25 00:00:00 -04:00
         
     | 
| 
       19 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -32,26 +32,10 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                    version: "0"
         
     | 
| 
       33 
33 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       34 
34 
     | 
    
         
             
              version_requirements: *id001
         
     | 
| 
       35 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       36 
     | 
    
         
            -
              name: excon
         
     | 
| 
       37 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
       39 
     | 
    
         
            -
                none: false
         
     | 
| 
       40 
     | 
    
         
            -
                requirements: 
         
     | 
| 
       41 
     | 
    
         
            -
                - - ~>
         
     | 
| 
       42 
     | 
    
         
            -
                  - !ruby/object:Gem::Version 
         
     | 
| 
       43 
     | 
    
         
            -
                    hash: 1
         
     | 
| 
       44 
     | 
    
         
            -
                    segments: 
         
     | 
| 
       45 
     | 
    
         
            -
                    - 0
         
     | 
| 
       46 
     | 
    
         
            -
                    - 6
         
     | 
| 
       47 
     | 
    
         
            -
                    - 3
         
     | 
| 
       48 
     | 
    
         
            -
                    version: 0.6.3
         
     | 
| 
       49 
     | 
    
         
            -
              type: :runtime
         
     | 
| 
       50 
     | 
    
         
            -
              version_requirements: *id002
         
     | 
| 
       51 
35 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       52 
36 
     | 
    
         
             
              name: rspec
         
     | 
| 
       53 
37 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       54 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
       55 
39 
     | 
    
         
             
                none: false
         
     | 
| 
       56 
40 
     | 
    
         
             
                requirements: 
         
     | 
| 
       57 
41 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -62,7 +46,7 @@ dependencies: 
     | 
|
| 
       62 
46 
     | 
    
         
             
                    - 5
         
     | 
| 
       63 
47 
     | 
    
         
             
                    version: "2.5"
         
     | 
| 
       64 
48 
     | 
    
         
             
              type: :development
         
     | 
| 
       65 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 49 
     | 
    
         
            +
              version_requirements: *id002
         
     | 
| 
       66 
50 
     | 
    
         
             
            description: A ruby wrapper for the Midwife HTTP API
         
     | 
| 
       67 
51 
     | 
    
         
             
            email: 
         
     | 
| 
       68 
52 
     | 
    
         
             
            - mguterl@gmail.com
         
     |