pdm 0.0.1 → 0.0.2
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/pdm.rb +1 -1
- data/lib/pdm/api_request.rb +63 -0
- data/lib/pdm/ext/mail/message.rb +9 -0
- data/lib/pdm/history.rb +17 -0
- data/lib/pdm/json.rb +18 -0
- data/lib/pdm/mail.rb +33 -37
- data/lib/pdm/resource.rb +39 -0
- data/lib/pdm/template.rb +72 -0
- data/lib/pdm/version.rb +1 -1
- data/pdm.gemspec +1 -0
- metadata +30 -11
- data/lib/pdm/recent_jobs.rb +0 -60
data/lib/pdm.rb
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
module Pdm
|
2
|
+
|
3
|
+
class ApiRequest
|
4
|
+
|
5
|
+
require "cgi"
|
6
|
+
require "uri"
|
7
|
+
require "net/http/post/multipart"
|
8
|
+
require "pdm/json"
|
9
|
+
|
10
|
+
|
11
|
+
attr_accessor :endpoint, :api_key
|
12
|
+
|
13
|
+
def initialize(endpoint, api_key)
|
14
|
+
self.endpoint = endpoint
|
15
|
+
self.api_key = api_key
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def decorate_params(params)
|
20
|
+
params = params.dup
|
21
|
+
params["api_key"] = self.api_key
|
22
|
+
params
|
23
|
+
end
|
24
|
+
|
25
|
+
def uri_from_path(path)
|
26
|
+
URI.join(self.endpoint, path.to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
def make_query_string(path, params)
|
30
|
+
params = params.collect { |k,v| "#{k}=#{CGI.escape(v.to_s)}" }
|
31
|
+
params = params.join("&")
|
32
|
+
[path, params].join("?")
|
33
|
+
end
|
34
|
+
|
35
|
+
def request(path, params = {})
|
36
|
+
uri = uri_from_path(path)
|
37
|
+
params = decorate_params(params)
|
38
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
39
|
+
req = yield(uri, params)
|
40
|
+
http.request(req)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def get(path, params = {})
|
45
|
+
request(path, params) do |uri, params|
|
46
|
+
query_string = make_query_string(uri.path, params)
|
47
|
+
Net::HTTP::Get.new(query_string)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def multipart_post(path, params)
|
52
|
+
request(path, params) do |uri, params|
|
53
|
+
Net::HTTP::Post::Multipart.new(uri.path, params)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def multipart_put(path, params)
|
58
|
+
request(path, params) do |uri, params|
|
59
|
+
Net::HTTP::Put::Multipart.new(uri.path, params)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/pdm/history.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Pdm
|
2
|
+
|
3
|
+
require "pdm/api_request"
|
4
|
+
|
5
|
+
module History
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def recent_jobs(options = {})
|
10
|
+
options = Pdm.default_options.merge(options)
|
11
|
+
api_request = Pdm::ApiRequest.new(options[:endpoint], options[:api_key])
|
12
|
+
res = api_request.get(:recent_jobs)
|
13
|
+
Pdm::Json.decode(res.body)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/pdm/json.rb
ADDED
data/lib/pdm/mail.rb
CHANGED
@@ -1,35 +1,17 @@
|
|
1
1
|
module Pdm
|
2
|
+
|
3
|
+
require "pdm/resource"
|
2
4
|
|
3
|
-
class Mail
|
5
|
+
class Mail < Pdm::Resource
|
4
6
|
|
5
|
-
|
6
|
-
require "net/http/post/multipart"
|
7
|
-
require "pdm/error"
|
8
|
-
|
9
|
-
attr_accessor :guid, :mail, :options
|
7
|
+
attr_accessor :guid, :mail
|
10
8
|
|
11
9
|
def initialize(mail, options = {})
|
12
10
|
self.mail = mail
|
13
|
-
|
14
|
-
check_opts
|
15
|
-
end
|
16
|
-
|
17
|
-
def check_opts
|
18
|
-
required_opt_proc = lambda do |value|
|
19
|
-
!(value.nil? || value.empty?)
|
20
|
-
end
|
21
|
-
|
22
|
-
[
|
23
|
-
[:url, required_opt_proc],
|
24
|
-
[:api_key, required_opt_proc],
|
25
|
-
].each do |key, proc|
|
26
|
-
raise ArgumentError.new(":api_key is a required option") unless
|
27
|
-
proc.call(options[key])
|
28
|
-
end
|
29
|
-
rescue => e
|
30
|
-
Error.extend_and_raise(e)
|
11
|
+
super(options)
|
31
12
|
end
|
32
13
|
|
14
|
+
|
33
15
|
def get_body_parts(mail)
|
34
16
|
parts = mail.body.parts
|
35
17
|
plain_part = parts.detect { |p| p.content_type == "text/plain" }
|
@@ -42,30 +24,46 @@ module Pdm
|
|
42
24
|
[plain_part, html_part]
|
43
25
|
end
|
44
26
|
|
45
|
-
def
|
46
|
-
plain_part, html_part = get_body_parts(mail)
|
27
|
+
def basic_params(mail)
|
47
28
|
{
|
48
29
|
"job[from]" => mail.from.first,
|
49
30
|
"job[reply_to]" => mail.reply_to,
|
50
31
|
"job[subject]" => mail.subject,
|
32
|
+
"job[recipients][][email]" => mail.to.first,
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def body_params(mail)
|
37
|
+
plain_part, html_part = get_body_parts(mail)
|
38
|
+
{
|
51
39
|
"job[plain]" => plain_part,
|
52
40
|
"job[html]" => html_part,
|
53
|
-
"job[recipients][][email]" => mail.to.first,
|
54
|
-
:api_key => options[:api_key],
|
55
41
|
}
|
56
42
|
end
|
57
43
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
44
|
+
def template_params(mail)
|
45
|
+
return {} if mail.template_html.nil?
|
46
|
+
{
|
47
|
+
"job[template_html]" => mail.template_html,
|
48
|
+
"job[template_assigns]" => mail.template_assigns,
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_and_send_job_params(mail)
|
53
|
+
params = basic_params(mail)
|
54
|
+
params.merge!(body_params(mail))
|
55
|
+
params.merge!(template_params(mail))
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_and_send_job(mail)
|
59
|
+
params = create_and_send_job_params(mail)
|
60
|
+
with_exceptions do
|
61
|
+
api_request.multipart_post(:jobs, params)
|
63
62
|
end
|
64
63
|
end
|
65
64
|
|
66
65
|
def deliver
|
67
|
-
|
68
|
-
res = create_and_send_job(options[:url], params)
|
66
|
+
res = create_and_send_job(mail)
|
69
67
|
|
70
68
|
case res
|
71
69
|
when Net::HTTPSuccess
|
@@ -73,8 +71,6 @@ module Pdm
|
|
73
71
|
end
|
74
72
|
|
75
73
|
return res
|
76
|
-
rescue Timeout::Error, StandardError => e
|
77
|
-
Error.extend_and_raise(e)
|
78
74
|
end
|
79
75
|
end
|
80
76
|
end
|
data/lib/pdm/resource.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Pdm
|
2
|
+
|
3
|
+
class Resource
|
4
|
+
|
5
|
+
require "pdm/api_request"
|
6
|
+
require "pdm/error"
|
7
|
+
|
8
|
+
attr_accessor :options
|
9
|
+
|
10
|
+
def initialize(options = {})
|
11
|
+
self.options = Pdm.default_options.merge(options)
|
12
|
+
check_opts
|
13
|
+
end
|
14
|
+
|
15
|
+
def with_exceptions
|
16
|
+
yield
|
17
|
+
rescue Timeout::Error, StandardError => e
|
18
|
+
Error.extend_and_raise(e)
|
19
|
+
end
|
20
|
+
|
21
|
+
def check_opts
|
22
|
+
required_opt_proc = lambda do |value|
|
23
|
+
!(value.nil? || value.empty?)
|
24
|
+
end
|
25
|
+
|
26
|
+
[
|
27
|
+
[:endpoint, required_opt_proc],
|
28
|
+
[:api_key, required_opt_proc],
|
29
|
+
].each do |key, proc|
|
30
|
+
raise ArgumentError.new(":api_key is a required option") unless
|
31
|
+
proc.call(options[key])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def api_request
|
36
|
+
Pdm::ApiRequest.new(options[:endpoint], options[:api_key])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/pdm/template.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
module Pdm
|
2
|
+
|
3
|
+
require "pdm/resource"
|
4
|
+
|
5
|
+
class Template < Pdm::Resource
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def exists?(name)
|
10
|
+
Template.new(name).exists?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
attr_accessor :name, :description, :html
|
16
|
+
|
17
|
+
def initialize(name, description = nil, html = nil, options = {})
|
18
|
+
self.name = name
|
19
|
+
self.description = description
|
20
|
+
self.html = html
|
21
|
+
super(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def show_params
|
26
|
+
{
|
27
|
+
"template[name]" => self.name,
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def show
|
32
|
+
params = show_params
|
33
|
+
with_exceptions do
|
34
|
+
api_request.get(:templates, params)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def exists?
|
39
|
+
params = show_params
|
40
|
+
res = with_exceptions do
|
41
|
+
api_request.get(:templates, params)
|
42
|
+
end
|
43
|
+
res.is_a?(Net::HTTPSuccess)
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_params
|
47
|
+
{
|
48
|
+
"template[name]" => self.name,
|
49
|
+
"template[description]" => self.description,
|
50
|
+
"template[html]" => self.html,
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def create
|
55
|
+
params = create_params
|
56
|
+
with_exceptions do
|
57
|
+
api_request.multipart_post(:templates, params)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# FIXME: I guess we could be clever here - e.g. no need to repost
|
62
|
+
# the HTML if only the name is changing.
|
63
|
+
alias :update_params :create_params
|
64
|
+
|
65
|
+
def update
|
66
|
+
params = update_params
|
67
|
+
with_exceptions do
|
68
|
+
api_request.multipart_put(:templates, params)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/pdm/version.rb
CHANGED
data/pdm.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- PipeDevMail
|
@@ -15,11 +15,10 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-11-20 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
type: :development
|
23
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
23
|
none: false
|
25
24
|
requirements:
|
@@ -29,11 +28,11 @@ dependencies:
|
|
29
28
|
segments:
|
30
29
|
- 0
|
31
30
|
version: "0"
|
32
|
-
name: rake
|
33
31
|
version_requirements: *id001
|
32
|
+
name: rake
|
33
|
+
type: :development
|
34
34
|
prerelease: false
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
type: :runtime
|
37
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
37
|
none: false
|
39
38
|
requirements:
|
@@ -43,11 +42,11 @@ dependencies:
|
|
43
42
|
segments:
|
44
43
|
- 0
|
45
44
|
version: "0"
|
46
|
-
name: mail
|
47
45
|
version_requirements: *id002
|
46
|
+
name: mail
|
47
|
+
type: :runtime
|
48
48
|
prerelease: false
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
type: :runtime
|
51
50
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
51
|
none: false
|
53
52
|
requirements:
|
@@ -57,8 +56,23 @@ dependencies:
|
|
57
56
|
segments:
|
58
57
|
- 0
|
59
58
|
version: "0"
|
60
|
-
name: multipart-post
|
61
59
|
version_requirements: *id003
|
60
|
+
name: yajl-ruby
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
hash: 3
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
version_requirements: *id004
|
74
|
+
name: multipart-post
|
75
|
+
type: :runtime
|
62
76
|
prerelease: false
|
63
77
|
description: Wrapper around the PipeDevMail.com API
|
64
78
|
email:
|
@@ -74,9 +88,14 @@ files:
|
|
74
88
|
- Gemfile
|
75
89
|
- Rakefile
|
76
90
|
- lib/pdm.rb
|
91
|
+
- lib/pdm/api_request.rb
|
77
92
|
- lib/pdm/error.rb
|
93
|
+
- lib/pdm/ext/mail/message.rb
|
94
|
+
- lib/pdm/history.rb
|
95
|
+
- lib/pdm/json.rb
|
78
96
|
- lib/pdm/mail.rb
|
79
|
-
- lib/pdm/
|
97
|
+
- lib/pdm/resource.rb
|
98
|
+
- lib/pdm/template.rb
|
80
99
|
- lib/pdm/version.rb
|
81
100
|
- pdm.gemspec
|
82
101
|
has_rdoc: true
|
data/lib/pdm/recent_jobs.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
module Pdm
|
2
|
-
|
3
|
-
class RecentJobs
|
4
|
-
|
5
|
-
require "uri"
|
6
|
-
require "net/http"
|
7
|
-
require "pdm/error"
|
8
|
-
|
9
|
-
attr_accessor :response, :options
|
10
|
-
|
11
|
-
def initialize(options = {})
|
12
|
-
self.options = Pdm.default_options.merge(options)
|
13
|
-
check_opts
|
14
|
-
end
|
15
|
-
|
16
|
-
def check_opts
|
17
|
-
required_opt_proc = lambda do |value|
|
18
|
-
!(value.nil? || value.empty?)
|
19
|
-
end
|
20
|
-
|
21
|
-
[
|
22
|
-
[:url, required_opt_proc],
|
23
|
-
[:api_key, required_opt_proc],
|
24
|
-
].each do |key, proc|
|
25
|
-
raise ArgumentError.new(":api_key is a required option") unless
|
26
|
-
proc.call(options[key])
|
27
|
-
end
|
28
|
-
rescue => e
|
29
|
-
Error.extend_and_raise(e)
|
30
|
-
end
|
31
|
-
|
32
|
-
def build_params
|
33
|
-
{
|
34
|
-
:api_key => options[:api_key],
|
35
|
-
}
|
36
|
-
end
|
37
|
-
|
38
|
-
def make_api_request(url, params)
|
39
|
-
uri = URI.parse(url)
|
40
|
-
req = Net::HTTP::Get.new(url.path, params)
|
41
|
-
Net::HTTP.start(url.host, url.port) do |http|
|
42
|
-
http.request(req)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def fetch
|
47
|
-
params = build_params
|
48
|
-
res = make_api_request(options[:url], params)
|
49
|
-
|
50
|
-
case res
|
51
|
-
when Net::HTTPSuccess
|
52
|
-
return self.response = res.body
|
53
|
-
else
|
54
|
-
raise RuntimeError.new("Unexpected server response: #{res.inspect}")
|
55
|
-
end
|
56
|
-
rescue Timeout::Error, StandardError => e
|
57
|
-
Error.extend_and_raise(e)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|