pdm 0.0.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/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pdm.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
data/lib/pdm.rb ADDED
@@ -0,0 +1,11 @@
1
+ require "pdm/version"
2
+
3
+ module Pdm
4
+
5
+ def default_options
6
+ {
7
+ :url => "http://api.pipedevmail.com/jobs",
8
+ }
9
+ end
10
+ module_function :default_options
11
+ end
data/lib/pdm/error.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Pdm
2
+ module Error
3
+
4
+ def self.extend_and_raise(error)
5
+ error.extend(self)
6
+ raise(error)
7
+ end
8
+ end
9
+ end
data/lib/pdm/mail.rb ADDED
@@ -0,0 +1,80 @@
1
+ module Pdm
2
+
3
+ class Mail
4
+
5
+ require "uri"
6
+ require "net/http/post/multipart"
7
+ require "pdm/error"
8
+
9
+ attr_accessor :guid, :mail, :options
10
+
11
+ def initialize(mail, options = {})
12
+ self.mail = mail
13
+ self.options = Pdm.default_options.merge(options)
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)
31
+ end
32
+
33
+ def get_body_parts(mail)
34
+ parts = mail.body.parts
35
+ plain_part = parts.detect { |p| p.content_type == "text/plain" }
36
+ html_part = parts.detect { |p| p.content_type == "text/html" }
37
+
38
+ if plain_part.blank? && html_part.blank?
39
+ html_part = mail.body.to_s
40
+ end
41
+
42
+ [plain_part, html_part]
43
+ end
44
+
45
+ def build_params(mail)
46
+ plain_part, html_part = get_body_parts(mail)
47
+ {
48
+ "job[from]" => mail.from.first,
49
+ "job[reply_to]" => mail.reply_to,
50
+ "job[subject]" => mail.subject,
51
+ "job[plain]" => plain_part,
52
+ "job[html]" => html_part,
53
+ "job[recipients][][email]" => mail.to.first,
54
+ :api_key => options[:api_key],
55
+ }
56
+ end
57
+
58
+ def create_and_send_job(url, params)
59
+ url = URI.parse(url)
60
+ req = Net::HTTP::Post::Multipart.new(url.path, params)
61
+ Net::HTTP.start(url.host, url.port) do |http|
62
+ http.request(req)
63
+ end
64
+ end
65
+
66
+ def deliver
67
+ params = build_params(mail)
68
+ res = create_and_send_job(options[:url], params)
69
+
70
+ case res
71
+ when Net::HTTPSuccess
72
+ self.guid = res.body
73
+ end
74
+
75
+ return res
76
+ rescue Timeout::Error, StandardError => e
77
+ Error.extend_and_raise(e)
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,60 @@
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
@@ -0,0 +1,7 @@
1
+ module Pdm
2
+
3
+ def version
4
+ "0.0.1"
5
+ end
6
+ module_function :version
7
+ end
data/pdm.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/pdm/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["PipeDevMail"]
6
+ gem.email = ["support@pipedevmail.com"]
7
+ gem.description = %q{Wrapper around the PipeDevMail.com API}
8
+ gem.summary = %q{Interact with the PDM API}
9
+ gem.homepage = ""
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "pdm"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Pdm.version
17
+
18
+ gem.add_development_dependency("rake")
19
+ gem.add_runtime_dependency("mail")
20
+ gem.add_runtime_dependency("multipart-post")
21
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pdm
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - PipeDevMail
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-10-18 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ type: :development
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ name: rake
33
+ version_requirements: *id001
34
+ prerelease: false
35
+ - !ruby/object:Gem::Dependency
36
+ type: :runtime
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ name: mail
47
+ version_requirements: *id002
48
+ prerelease: false
49
+ - !ruby/object:Gem::Dependency
50
+ type: :runtime
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ name: multipart-post
61
+ version_requirements: *id003
62
+ prerelease: false
63
+ description: Wrapper around the PipeDevMail.com API
64
+ email:
65
+ - support@pipedevmail.com
66
+ executables: []
67
+
68
+ extensions: []
69
+
70
+ extra_rdoc_files: []
71
+
72
+ files:
73
+ - .gitignore
74
+ - Gemfile
75
+ - Rakefile
76
+ - lib/pdm.rb
77
+ - lib/pdm/error.rb
78
+ - lib/pdm/mail.rb
79
+ - lib/pdm/recent_jobs.rb
80
+ - lib/pdm/version.rb
81
+ - pdm.gemspec
82
+ has_rdoc: true
83
+ homepage: ""
84
+ licenses: []
85
+
86
+ post_install_message:
87
+ rdoc_options: []
88
+
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ hash: 3
97
+ segments:
98
+ - 0
99
+ version: "0"
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ requirements: []
110
+
111
+ rubyforge_project:
112
+ rubygems_version: 1.6.2
113
+ signing_key:
114
+ specification_version: 3
115
+ summary: Interact with the PDM API
116
+ test_files: []
117
+