seeuletter 1.1.0 → 1.4.1

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/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