mailercity 0.0.3 → 0.0.4

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/mailercity.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "faraday"
2
+ require "json"
2
3
  require "mailercity/helper"
3
4
  require "mailercity/version"
4
5
  require 'mailercity/errors/authentication_error'
@@ -27,16 +28,20 @@ module Mailercity
27
28
  @@api_key
28
29
  end
29
30
 
30
- def self.request(path, params)
31
+ def self.request(path, args)
31
32
  raise AuthenticationError.new('No API key provided. (HINT: set your API key using "Mailercity.api_key = <API-KEY>".') unless api_key
32
- response = Faraday.post(api_url(path), params, "X-Api-Key" => Mailercity.api_key)
33
- # TODO: CATCH ALL EXCEPTIONS (like URI::InvalidURIError) AND RAISE MY OWN ERROR
33
+ payload = {:args => args}
34
+ response = Faraday.post(api_url(path)) do |req|
35
+ req.headers['Content-Type'] = 'application/json'
36
+ req.headers['X-Api-Key'] = Mailercity.api_key
37
+ req.body = ::JSON.dump(payload)
38
+ end
34
39
  end
35
40
 
36
41
  def self.const_missing(const_name)
37
42
  new_class = Class.new(super_class=Message)
38
43
 
39
- # Non-obvious: we assign it to a const in order to name.
44
+ # Non-obvious: we assign it in order to name it.
40
45
  const_set(const_name, new_class)
41
46
  end
42
47
 
@@ -61,7 +66,7 @@ module Mailercity
61
66
 
62
67
  private
63
68
 
64
- def self.method_missing(method_name, args, &block)
69
+ def self.method_missing(method_name, *args, &block)
65
70
  new(template: method_name, params: args)
66
71
  end
67
72
  end
@@ -1,3 +1,3 @@
1
1
  module Mailercity
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -5,29 +5,40 @@ Mailercity.api_base = "http://testhost"
5
5
  Mailercity.api_key = "testkey"
6
6
 
7
7
  describe Mailercity do
8
- def stub_post(url, params, options={})
9
- status = options.fetch(:status, 201)
10
- api_key = options.fetch(:api_key, Mailercity.api_key)
11
- stub_request(:post, url).with(:body => params, :headers => {'X-Api-Key' => api_key}).to_return(:status => status, :body => "", :headers => {})
8
+ def stub_post(url, status, *args)
9
+ payload = {:args => args}
10
+ body = JSON.dump(payload)
11
+ api_key = Mailercity.api_key
12
+ stub_request(:post, url).
13
+ with(:body => body, :headers => {'X-Api-Key' => api_key, 'Content-Type' => 'application/json'}).
14
+ to_return(:status => status, :body => "", :headers => {})
12
15
  end
13
16
 
17
+ let(:user) { {"id"=>1, "email"=>"rob@robforman.com", "first_name"=>"Rob", "last_name"=>"Forman"} }
18
+ let(:account) { {"id"=>1, "name"=>"Awesometown"} }
19
+
14
20
  it "can create dynamic mailer classes and template methods while passing appropriate parameters" do
15
- mail = Mailercity::MyTestMailer.my_test_template(:user_email => "rob@robforman.com")
21
+ mail = Mailercity::MyTestMailer.my_test_template(user)
16
22
  mail.should be_kind_of Mailercity::Message
17
23
  end
18
24
 
19
25
  describe ".deliver" do
20
26
  context "without http error" do
21
27
  it "should post and return true" do
22
- stub = stub_post("http://testhost/my_test_mailer/my_test_template", {"user_email"=>"rob@robforman.com"})
23
- Mailercity::MyTestMailer.my_test_template(:user_email => "rob@robforman.com").deliver.should == true
28
+ stub = stub_post("http://testhost/my_test_mailer/my_test_template", 201, user)
29
+ Mailercity::MyTestMailer.my_test_template(user).deliver.should == true
30
+ end
31
+
32
+ it "should post multiple values in order" do
33
+ stub = stub_post("http://testhost/my_test_mailer/my_test_template", 201, user, account)
34
+ Mailercity::MyTestMailer.my_test_template(user, account).deliver.should == true
24
35
  end
25
36
  end
26
37
 
27
38
  context "with http error" do
28
39
  it "should fail to post and return false" do
29
- stub = stub_post("http://testhost/my_test_mailer/my_test_template", {"user_email"=>"rob@robforman.com"}, :status => 403)
30
- Mailercity::MyTestMailer.my_test_template(:user_email => "rob@robforman.com").deliver.should == false
40
+ stub = stub_post("http://testhost/my_test_mailer/my_test_template", 403, user)
41
+ Mailercity::MyTestMailer.my_test_template(user).deliver.should == false
31
42
  end
32
43
  end
33
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailercity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-12 00:00:00.000000000 Z
12
+ date: 2012-12-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday