pdm 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+