seeuletter 1.1.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/examples/letters.rb CHANGED
@@ -1,49 +1,49 @@
1
- $:.unshift File.expand_path("../lib", File.dirname(__FILE__))
2
- require 'seeuletter'
3
-
4
- # initialize Seeuletter object
5
- seeuletter = Seeuletter::Client.new(api_key: '<PUT_YOU_API_KEY_HERE>')
6
-
7
- html = %{
8
- <html>
9
- <head>
10
- <style>
11
- *, *:before, *:after {
12
- -webkit-box-sizing: border-box;
13
- -moz-box-sizing: border-box;
14
- box-sizing: border-box;
15
- }
16
- .text {
17
- margin-left: 50px;
18
- padding-top: 450px;
19
- font-size: 50px;
20
- font-weight: 700;
21
- }
22
- </style>
23
- </head>
24
-
25
- <body>
26
- <p class="text">Hello {{name}}!</p>
27
- </body>
28
-
29
- </html>
30
- }
31
-
32
-
33
- # send the letter
34
- puts seeuletter.letters.create(
35
- description: "Test letter from the Ruby Wrapper",
36
- to: {
37
- name: 'Erlich',
38
- address_line1: '30 rue de rivoli',
39
- address_line2: '',
40
- address_city: 'Paris',
41
- address_country: 'France',
42
- address_postalcode: '75004'
43
- },
44
- source_file: html,
45
- source_file_type: 'html',
46
- postage_type: 'prioritaire',
47
- variables: { name: 'Erlich'},
48
- color: 'color'
49
- )
1
+ $:.unshift File.expand_path("../lib", File.dirname(__FILE__))
2
+ require 'seeuletter'
3
+
4
+ # initialize Seeuletter object
5
+ seeuletter = Seeuletter::Client.new(api_key: '<PUT_YOU_API_KEY_HERE>')
6
+
7
+ html = %{
8
+ <html>
9
+ <head>
10
+ <style>
11
+ *, *:before, *:after {
12
+ -webkit-box-sizing: border-box;
13
+ -moz-box-sizing: border-box;
14
+ box-sizing: border-box;
15
+ }
16
+ .text {
17
+ margin-left: 50px;
18
+ padding-top: 450px;
19
+ font-size: 50px;
20
+ font-weight: 700;
21
+ }
22
+ </style>
23
+ </head>
24
+
25
+ <body>
26
+ <p class="text">Hello {{name}}!</p>
27
+ </body>
28
+
29
+ </html>
30
+ }
31
+
32
+
33
+ # send the letter
34
+ puts seeuletter.letters.create(
35
+ description: "Test letter from the Ruby Wrapper",
36
+ to: {
37
+ name: 'Erlich',
38
+ address_line1: '30 rue de rivoli',
39
+ address_line2: '',
40
+ address_city: 'Paris',
41
+ address_country: 'France',
42
+ address_postalcode: '75004'
43
+ },
44
+ source_file: html,
45
+ source_file_type: 'html',
46
+ postage_type: 'prioritaire',
47
+ variables: { name: 'Erlich'},
48
+ color: 'color'
49
+ )
@@ -0,0 +1,48 @@
1
+ $:.unshift File.expand_path("../lib", File.dirname(__FILE__))
2
+ require 'seeuletter'
3
+
4
+ # initialize Seeuletter object
5
+ seeuletter = Seeuletter::Client.new(api_key: '<PUT_YOU_API_KEY_HERE>')
6
+
7
+ html = %{
8
+ <html>
9
+ <head>
10
+ <style>
11
+ *, *:before, *:after {
12
+ -webkit-box-sizing: border-box;
13
+ -moz-box-sizing: border-box;
14
+ box-sizing: border-box;
15
+ }
16
+ .text {
17
+ margin-left: 50px;
18
+ padding-top: 450px;
19
+ font-size: 50px;
20
+ font-weight: 700;
21
+ }
22
+ </style>
23
+ </head>
24
+
25
+ <body>
26
+ <p class="text">Hello {{name}}!</p>
27
+ </body>
28
+
29
+ </html>
30
+ }
31
+
32
+
33
+ # send the letter
34
+ puts seeuletter.letters.createElectronic(
35
+ description: "Test electronic letter from the Ruby Wrapper",
36
+ to: {
37
+ email: 'erlich.dumas@example.com',
38
+ first_name: 'Erlich',
39
+ last_name: 'Dumas',
40
+ status: 'individual'
41
+ },
42
+ source_file: '<html>Hello {{name}}</html>',
43
+ source_file_type: 'html',
44
+ postage_type: 'lre',
45
+ variables: {
46
+ name: 'Erlich'
47
+ }
48
+ )
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
4
+ require 'seeuletter'
5
+
6
+ # initialize Seeuletter object
7
+ seeuletter = Seeuletter::Client.new(api_key: '<PUT_YOU_API_KEY_HERE>')
8
+
9
+ html = %(
10
+ <html>
11
+ <head>
12
+ <style>
13
+ *, *:before, *:after {
14
+ -webkit-box-sizing: border-box;
15
+ -moz-box-sizing: border-box;
16
+ box-sizing: border-box;
17
+ }
18
+ .text {
19
+ margin-left: 50px;
20
+ padding-top: 450px;
21
+ font-size: 50px;
22
+ font-weight: 700;
23
+ }
24
+ </style>
25
+ </head>
26
+
27
+ <body>
28
+ <p class="text">Hello {{name}}!</p>
29
+ </body>
30
+
31
+ </html>
32
+ )
33
+
34
+ # list all postcards sent
35
+ puts seeuletter.postcards.list
36
+
37
+ # send a dummy the letter
38
+ puts seeuletter.postcards.create(
39
+ description: 'Test letter from the Ruby Wrapper',
40
+ to: {
41
+ name: 'Erlich',
42
+ address_line1: '30 rue de rivoli',
43
+ address_line2: '',
44
+ address_city: 'Paris',
45
+ address_country: 'France',
46
+ address_postalcode: '75004'
47
+ },
48
+ source_file_front: html,
49
+ source_file_front_type: 'html',
50
+ source_file_back: html,
51
+ source_file_back_type: 'html',
52
+ variables: { name: 'Erlich' }
53
+ )
data/examples/users.rb ADDED
@@ -0,0 +1,6 @@
1
+ $:.unshift File.expand_path("../lib", File.dirname(__FILE__))
2
+ require 'seeuletter'
3
+
4
+ seeuletter = Seeuletter::Client.new(api_key: '<PUT_YOU_API_KEY_HERE>')
5
+
6
+ puts seeuletter.users.create_from_api(email: 'email@example.com', name: 'Example')
@@ -1,25 +1,46 @@
1
- require "seeuletter/resources/letter"
2
- require 'seeuletter/resources/letter_price'
3
-
4
- module Seeuletter
5
- class Client
6
-
7
- attr_reader :config
8
-
9
- def initialize(config = nil)
10
- if config.nil? || config[:api_key].nil?
11
- raise ArgumentError.new(":api_key is a required argument to initialize Seeuletter")
12
- end
13
-
14
- @config = config
15
- end
16
-
17
- def letters
18
- Seeuletter::Resources::Letter.new(config)
19
- end
20
-
21
- def letter_price
22
- Seeuletter::Resources::LetterPrice.new(config)
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'seeuletter/resources/letter'
4
+ require 'seeuletter/resources/letter_price'
5
+ require 'seeuletter/resources/postcard'
6
+ require "seeuletter/resources/user"
7
+ require "seeuletter/resources/account"
8
+ require "seeuletter/resources/invoice"
9
+
10
+ module Seeuletter
11
+ class Client
12
+ attr_reader :config
13
+
14
+ def initialize(config = nil)
15
+ if config.nil? || config[:api_key].nil?
16
+ raise ArgumentError, ':api_key is a required argument to initialize Seeuletter'
17
+ end
18
+
19
+ @config = config
20
+ end
21
+
22
+ def letters
23
+ Seeuletter::Resources::Letter.new(config)
24
+ end
25
+
26
+ def letter_price
27
+ Seeuletter::Resources::LetterPrice.new(config)
28
+ end
29
+
30
+ def postcards
31
+ Seeuletter::Resources::Postcard.new(config)
32
+ end
33
+
34
+ def users
35
+ Seeuletter::Resources::User.new(config)
36
+ end
37
+
38
+ def accounts
39
+ Seeuletter::Resources::Account.new(config)
40
+ end
41
+
42
+ def invoices
43
+ Seeuletter::Resources::Invoice.new(config)
44
+ end
45
+ end
46
+ end
@@ -1,4 +1,4 @@
1
- module Seeuletter
2
- class InvalidRequestError < SeeuletterError
3
- end
4
- end
1
+ module Seeuletter
2
+ class InvalidRequestError < SeeuletterError
3
+ end
4
+ end
@@ -1,20 +1,20 @@
1
- module Seeuletter
2
-
3
- class SeeuletterError < StandardError
4
- attr_reader :http_status, :http_body, :json_body
5
-
6
- def initialize(message, http_status=nil, http_body=nil, json_body=nil)
7
- @http_status = http_status
8
- @http_body = http_body
9
- @json_body = json_body
10
- status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
11
- super("#{status_string}#{message} \n #{@http_body}")
12
- end
13
-
14
- def _response
15
- @json_body
16
- end
17
-
18
- end
19
-
20
- end
1
+ module Seeuletter
2
+
3
+ class SeeuletterError < StandardError
4
+ attr_reader :http_status, :http_body, :json_body
5
+
6
+ def initialize(message, http_status=nil, http_body=nil, json_body=nil)
7
+ @http_status = http_status
8
+ @http_body = http_body
9
+ @json_body = json_body
10
+ status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
11
+ super("#{status_string}#{message} \n #{@http_body}")
12
+ end
13
+
14
+ def _response
15
+ @json_body
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,30 @@
1
+ require "seeuletter/resources/resource_base"
2
+
3
+ module Seeuletter
4
+ module Resources
5
+ class Account < Seeuletter::Resources::ResourceBase
6
+
7
+ def initialize(config)
8
+ super(config)
9
+ @endpoint = "accounts"
10
+ end
11
+
12
+ def updateEmail(resource_id, email, headers={})
13
+ submit :put, resource_url(resource_id), {"email" => email}, headers
14
+ end
15
+
16
+ def list(options={})
17
+ raise SeeuletterError.new("Invalid REST operation : GET /accounts", "404", nil)
18
+ end
19
+
20
+ def find(resource_id)
21
+ raise SeeuletterError.new("Invalid REST operation : GET /accounts/:account_id", "404", nil)
22
+ end
23
+
24
+ def destroy(resource_id)
25
+ raise SeeuletterError.new("Invalid REST operation : DELETE /accounts/:account_id", "404", nil)
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ require "seeuletter/resources/resource_base"
2
+
3
+ module Seeuletter
4
+ module Resources
5
+ class Invoice < Seeuletter::Resources::ResourceBase
6
+
7
+ def initialize(config)
8
+ super(config)
9
+ @endpoint = "invoices"
10
+ end
11
+
12
+ def create(options={}, headers={})
13
+ raise SeeuletterError.new("Invalid REST operation : POST /invoices", "404", nil)
14
+ end
15
+
16
+ def destroy(resource_id)
17
+ raise SeeuletterError.new("Invalid REST operation : DELETE /accounts/:invoice_id", "404", nil)
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -1,14 +1,17 @@
1
- require "seeuletter/resources/resource_base"
2
-
3
- module Seeuletter
4
- module Resources
5
- class Letter < Seeuletter::Resources::ResourceBase
6
-
7
- def initialize(config)
8
- super(config)
9
- @endpoint = "letters"
10
- end
11
-
12
- end
13
- end
14
- end
1
+ require "seeuletter/resources/resource_base"
2
+
3
+ module Seeuletter
4
+ module Resources
5
+ class Letter < Seeuletter::Resources::ResourceBase
6
+
7
+ def initialize(config)
8
+ super(config)
9
+ @endpoint = "letters"
10
+ end
11
+
12
+ def createElectronic(options={}, headers={})
13
+ submit :post, resource_url("electronic"), options, headers
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,14 +1,14 @@
1
- require "seeuletter/resources/resource_base"
2
-
3
- module Seeuletter
4
- module Resources
5
- class LetterPrice < Seeuletter::Resources::ResourceBase
6
- def initialize(config)
7
- super(config)
8
- @endpoint = "price/letter"
9
- end
10
-
11
- alias get list
12
- end
13
- end
14
- end
1
+ require "seeuletter/resources/resource_base"
2
+
3
+ module Seeuletter
4
+ module Resources
5
+ class LetterPrice < Seeuletter::Resources::ResourceBase
6
+ def initialize(config)
7
+ super(config)
8
+ @endpoint = "price/letter"
9
+ end
10
+
11
+ alias get list
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require "seeuletter/resources/resource_base"
2
+
3
+ module Seeuletter
4
+ module Resources
5
+ class Postcard < Seeuletter::Resources::ResourceBase
6
+
7
+ def initialize(config)
8
+ super(config)
9
+ @endpoint = "postcards"
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -1,109 +1,109 @@
1
- require "rest-client"
2
- require "json"
3
- require "uri"
4
-
5
- module Seeuletter
6
- module Resources
7
- class ResourceBase
8
-
9
- attr_reader :config, :endpoint
10
-
11
- def initialize(config)
12
- @config = config
13
- end
14
-
15
- def list(options={})
16
- submit :get, endpoint_url, options
17
- end
18
-
19
- def find(resource_id)
20
- submit :get, resource_url(resource_id)
21
- end
22
-
23
- def create(options={}, headers={})
24
- submit :post, endpoint_url, options, headers
25
- end
26
-
27
- def destroy(resource_id)
28
- submit :delete, resource_url(resource_id)
29
- end
30
-
31
- private
32
-
33
- def submit(method, url, parameters={}, headers={})
34
- clientVersion = Seeuletter::VERSION
35
-
36
- begin
37
- if method == :get || method == :delete
38
- # Hack to URL encode nested objects like metadata.
39
- url = "#{url}?#{build_nested_query(parameters)}"
40
- response = RestClient.send(method, url, {
41
- user_agent: 'Seeuletter/v1 RubyBindings/' + clientVersion,
42
- "Seeuletter-Version" => config[:api_version]
43
- })
44
- else
45
- headers = headers.merge({
46
- user_agent: 'Seeuletter/v1 RubyBindings/' + clientVersion,
47
- "Seeuletter-Version" => config[:api_version]
48
- })
49
- response = RestClient.send(method, url, parameters, headers)
50
- end
51
-
52
- body = JSON.parse(response)
53
-
54
- body.define_singleton_method(:_response) do
55
- response
56
- end
57
-
58
- return body
59
-
60
- rescue RestClient::ExceptionWithResponse => e
61
- handle_api_error(e)
62
- end
63
- end
64
-
65
- private
66
-
67
- def handle_api_error(error)
68
- begin
69
- response = JSON.parse(error.http_body.to_s)
70
- message = response.fetch("error").fetch("message")
71
- raise InvalidRequestError.new(message, error.http_code, error.http_body, error.response)
72
- rescue JSON::ParserError, KeyError
73
- # :nocov:
74
- raise SeeuletterError.new("Invalid response object:", error.http_code, error.http_body)
75
- # :nocov:
76
- end
77
- end
78
-
79
- def build_nested_query(value, prefix = nil)
80
- case value
81
- when Array
82
- value.map { |v|
83
- build_nested_query(v, "#{prefix}[]")
84
- }.join("&")
85
- when Hash
86
- value.map { |k, v|
87
- build_nested_query(v, prefix ? "#{prefix}[#{URI.encode_www_form_component(k)}]" : URI.encode_www_form_component(k))
88
- }.reject(&:empty?).join('&')
89
- else
90
- raise ArgumentError, "value must be an Array or Hash" if prefix.nil?
91
- "#{prefix}=#{URI.encode_www_form_component(value)}"
92
- end
93
- end
94
-
95
- def base_url
96
- "https://#{config[:api_key]}:@api.seeuletter.com"
97
- end
98
-
99
- def endpoint_url
100
- "#{base_url}/#{endpoint}"
101
- end
102
-
103
- def resource_url(resource_id)
104
- "#{endpoint_url}/#{resource_id}"
105
- end
106
-
107
- end
108
- end
109
- end
1
+ require "rest-client"
2
+ require "json"
3
+ require "uri"
4
+
5
+ module Seeuletter
6
+ module Resources
7
+ class ResourceBase
8
+
9
+ attr_reader :config, :endpoint
10
+
11
+ def initialize(config)
12
+ @config = config
13
+ end
14
+
15
+ def list(options={})
16
+ submit :get, endpoint_url, options
17
+ end
18
+
19
+ def find(resource_id)
20
+ submit :get, resource_url(resource_id)
21
+ end
22
+
23
+ def create(options={}, headers={})
24
+ submit :post, endpoint_url, options, headers
25
+ end
26
+
27
+ def destroy(resource_id)
28
+ submit :delete, resource_url(resource_id)
29
+ end
30
+
31
+ private
32
+
33
+ def submit(method, url, parameters={}, headers={})
34
+ clientVersion = Seeuletter::VERSION
35
+
36
+ begin
37
+ if method == :get || method == :delete
38
+ # Hack to URL encode nested objects like metadata.
39
+ url = "#{url}?#{build_nested_query(parameters)}"
40
+ response = RestClient.send(method, url, {
41
+ user_agent: 'Seeuletter/v1 RubyBindings/' + clientVersion,
42
+ "Seeuletter-Version" => config[:api_version]
43
+ })
44
+ else
45
+ headers = headers.merge({
46
+ user_agent: 'Seeuletter/v1 RubyBindings/' + clientVersion,
47
+ "Seeuletter-Version" => config[:api_version]
48
+ })
49
+ response = RestClient.send(method, url, parameters, headers)
50
+ end
51
+
52
+ body = JSON.parse(response)
53
+
54
+ body.define_singleton_method(:_response) do
55
+ response
56
+ end
57
+
58
+ return body
59
+
60
+ rescue RestClient::ExceptionWithResponse => e
61
+ handle_api_error(e)
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ def handle_api_error(error)
68
+ begin
69
+ response = JSON.parse(error.http_body.to_s)
70
+ message = response.fetch("error").fetch("message")
71
+ raise InvalidRequestError.new(message, error.http_code, error.http_body, error.response)
72
+ rescue JSON::ParserError, KeyError
73
+ # :nocov:
74
+ raise SeeuletterError.new("Invalid response object:", error.http_code, error.http_body)
75
+ # :nocov:
76
+ end
77
+ end
78
+
79
+ def build_nested_query(value, prefix = nil)
80
+ case value
81
+ when Array
82
+ value.map { |v|
83
+ build_nested_query(v, "#{prefix}[]")
84
+ }.join("&")
85
+ when Hash
86
+ value.map { |k, v|
87
+ build_nested_query(v, prefix ? "#{prefix}[#{URI.encode_www_form_component(k)}]" : URI.encode_www_form_component(k))
88
+ }.reject(&:empty?).join('&')
89
+ else
90
+ raise ArgumentError, "value must be an Array or Hash" if prefix.nil?
91
+ "#{prefix}=#{URI.encode_www_form_component(value)}"
92
+ end
93
+ end
94
+
95
+ def base_url
96
+ "https://#{config[:api_key]}:@api.seeuletter.com"
97
+ end
98
+
99
+ def endpoint_url
100
+ "#{base_url}/#{endpoint}"
101
+ end
102
+
103
+ def resource_url(resource_id)
104
+ "#{endpoint_url}/#{resource_id}"
105
+ end
106
+
107
+ end
108
+ end
109
+ end