griddler 1.0.0.pre.alpha.2 → 1.0.0.pre.beta.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14d0542f8b3e4760904cd0cae896aa2f2b38bfef
4
- data.tar.gz: ce6967089ef0171910af88f294a6a6aafba876fc
3
+ metadata.gz: 5db84495ea1dd75d93ad77af6b7b345471658418
4
+ data.tar.gz: ab4522dd7709770a8fa825c1328a034fc42abe8a
5
5
  SHA512:
6
- metadata.gz: b4163d740d3bccefdb2339663331a3ffa8a3bb7e5caa7687188a21446a143a2670588b2c4b3654a35e99455f64a4c843d2ace43ebc60e0fb1ef9b6ad40ef1067
7
- data.tar.gz: 88a91945c578a51cda0f769715533ab6fa66431d7f9e7ccc59dd4f195a19e7936a20c6873df444b35c81a37eca3866cf4b64065f5939dbfdabe726820adc8d46
6
+ metadata.gz: c3a1251948e7b861c2fea3ba5e526a90c14dbe352ab9b00d64dacb18fb9cd0a3e3dd77f3a910ed0f709eb9802ef81a031dbe624d4392902d1bb6877df04ca6d3
7
+ data.tar.gz: 3df07fd60447f539702466ea27e5d6890e2e68d25266b0a9e3cc98d6b134b15125d2cea2cd4dfe835b0501bbfd9f8aecf29b3ada57064af1eb1ac79f32702932
@@ -1,14 +1,25 @@
1
1
  class Griddler::EmailsController < ActionController::Base
2
2
  def create
3
3
  normalized_params.each do |p|
4
- Griddler::Email.new(p).process
4
+ process_email Griddler::Email.new(p)
5
5
  end
6
+
6
7
  head :ok
7
8
  end
8
9
 
9
10
  private
10
11
 
12
+ delegate :processor_class, :processor_method, :email_service, to: :griddler_configuration
13
+
11
14
  def normalized_params
12
- Array.wrap(Griddler.configuration.email_service.normalize_params(params))
15
+ Array.wrap(email_service.normalize_params(params))
16
+ end
17
+
18
+ def process_email(email)
19
+ processor_class.new(email).public_send(processor_method)
20
+ end
21
+
22
+ def griddler_configuration
23
+ Griddler.configuration
13
24
  end
14
25
  end
data/lib/griddler.rb CHANGED
@@ -7,12 +7,3 @@ require 'griddler/email_parser'
7
7
  require 'griddler/configuration'
8
8
  require 'griddler/route_extensions'
9
9
  require 'griddler/adapter_registry'
10
- require 'griddler/adapters/cloudmailin_adapter'
11
- require 'griddler/adapters/postmark_adapter'
12
-
13
- require 'griddler/sendgrid'
14
- require 'griddler/mandrill'
15
- require 'griddler/mailgun'
16
-
17
- Griddler.adapter_registry.register(:cloudmailin, Griddler::Adapters::CloudmailinAdapter)
18
- Griddler.adapter_registry.register(:postmark, Griddler::Adapters::PostmarkAdapter)
@@ -16,30 +16,7 @@ module Griddler
16
16
  end
17
17
 
18
18
  class Configuration
19
- attr_accessor :processor_class, :processor_method, :reply_delimiter, :cc, :from
20
-
21
- def to
22
- @to ||= :hash
23
- end
24
-
25
- def to=(type)
26
- if type == :token
27
- Kernel.warn <<-WARN.strip_heredoc
28
- [Deprecation] the :token option is deprecated and will be removed in v0.6.
29
- For tokens use :hash and retrieve the token from email.to[:token] or choose any of [:email, :full, :hash]
30
- WARN
31
- end
32
-
33
- @to = type
34
- end
35
-
36
- def cc
37
- @cc ||= :email
38
- end
39
-
40
- def from
41
- @from ||= :email
42
- end
19
+ attr_accessor :processor_class, :processor_method, :reply_delimiter
43
20
 
44
21
  def processor_class
45
22
  @processor_class ||=
@@ -65,7 +42,7 @@ module Griddler
65
42
  end
66
43
 
67
44
  def email_service
68
- @email_service_adapter ||= Griddler.adapter_registry[:sendgrid]
45
+ @email_service_adapter ||= Griddler.adapter_registry[:default]
69
46
  end
70
47
 
71
48
  def email_service=(new_email_service)
@@ -10,7 +10,7 @@ module Griddler
10
10
  @params = params
11
11
 
12
12
  @to = recipients(:to)
13
- @from = extract_address(params[:from], config.from)
13
+ @from = extract_address(params[:from])
14
14
  @subject = params[:subject]
15
15
 
16
16
  @body = extract_body
@@ -27,12 +27,6 @@ module Griddler
27
27
  @attachments = params[:attachments]
28
28
  end
29
29
 
30
- def process
31
- processor_class = config.processor_class
32
- processor_method = config.processor_method
33
- processor_class.public_send(processor_method, self)
34
- end
35
-
36
30
  private
37
31
 
38
32
  attr_reader :params
@@ -41,18 +35,12 @@ module Griddler
41
35
  @config ||= Griddler.configuration
42
36
  end
43
37
 
44
- def recipients(type=:to)
45
- params[type].to_a.map { |recipient| extract_address(recipient, config.send(type)) }
38
+ def recipients(type)
39
+ params[type].to_a.map { |recipient| extract_address(recipient) }
46
40
  end
47
41
 
48
- def extract_address(address, type)
49
- parsed = EmailParser.parse_address(address)
50
-
51
- if type == :hash
52
- parsed
53
- else
54
- parsed[type]
55
- end
42
+ def extract_address(address)
43
+ EmailParser.parse_address(address)
56
44
  end
57
45
 
58
46
  def extract_body
@@ -76,7 +76,7 @@ module Griddler::EmailParser
76
76
  reply_delimeter_regex,
77
77
  /^\s*[-]+\s*Original Message\s*[-]+\s*$/i,
78
78
  /^\s*--\s*$/,
79
- /^\s*\>?\s*On.*\r?\n?\s*.*\s*wrote:$/,
79
+ /^\s*\>?\s*On.*\r?\n?\s*.*\s*wrote:\r?\n?$/,
80
80
  /On.*wrote:/,
81
81
  /From:.*$/i,
82
82
  /^\s*\d{4}\/\d{1,2}\/\d{1,2}\s.*\s<.*>?$/i
@@ -51,7 +51,39 @@ shared_examples_for 'Griddler adapter' do |adapter, service_params|
51
51
  email: 'hi@example.com',
52
52
  name: 'Hello World',
53
53
  }])
54
- email.cc.should eq ['emily@example.com']
54
+ email.cc.should eq [{
55
+ token: 'emily',
56
+ host: 'example.com',
57
+ email: 'emily@example.com',
58
+ full: 'emily@example.com',
59
+ name: nil
60
+ }]
61
+ end
62
+ end
63
+ end
64
+
65
+ RSpec::Matchers.define :be_normalized_to do |expected|
66
+ failure_message do |actual|
67
+ message = ""
68
+ expected.each do |k, v|
69
+ if actual[k] != expected[k]
70
+ message << "expected :#{k} to be normalized to #{expected[k].inspect}, "\
71
+ "but received #{actual[k].inspect}\n"
72
+ end
73
+ end
74
+ message
75
+ end
76
+
77
+ description do
78
+ "be normalized to #{expected}"
79
+ end
80
+
81
+ match do |actual|
82
+ expected.each do |k, v|
83
+ case v
84
+ when Regexp then actual[k].should =~ v
85
+ else actual[k].should === v
86
+ end
55
87
  end
56
88
  end
57
89
  end
@@ -1,3 +1,3 @@
1
1
  module Griddler
2
- VERSION = "1.0.0-alpha.2"
2
+ VERSION = "1.0.0-beta.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: griddler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.alpha.2
4
+ version: 1.0.0.pre.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Caleb Thompson
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-06-17 00:00:00.000000000 Z
14
+ date: 2014-06-25 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -69,6 +69,20 @@ dependencies:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: pry
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
72
86
  - !ruby/object:Gem::Dependency
73
87
  name: jquery-rails
74
88
  requirement: !ruby/object:Gem::Requirement
@@ -99,8 +113,6 @@ files:
99
113
  - config/initializers/griddler.rb
100
114
  - lib/griddler.rb
101
115
  - lib/griddler/adapter_registry.rb
102
- - lib/griddler/adapters/cloudmailin_adapter.rb
103
- - lib/griddler/adapters/postmark_adapter.rb
104
116
  - lib/griddler/configuration.rb
105
117
  - lib/griddler/email.rb
106
118
  - lib/griddler/email_parser.rb
@@ -1,34 +0,0 @@
1
- module Griddler
2
- module Adapters
3
- class CloudmailinAdapter
4
- def initialize(params)
5
- @params = params
6
- end
7
-
8
- def self.normalize_params(params)
9
- adapter = new(params)
10
- adapter.normalize_params
11
- end
12
-
13
- def normalize_params
14
- {
15
- to: params[:envelope][:to].split(','),
16
- cc: ccs,
17
- from: params[:envelope][:from],
18
- subject: params[:headers][:Subject],
19
- text: params[:plain],
20
- attachments: params.fetch(:attachments) { [] },
21
- }
22
- end
23
-
24
- private
25
-
26
- attr_reader :params
27
-
28
- def ccs
29
- params[:headers][:Cc].to_s.split(',').map(&:strip)
30
- end
31
-
32
- end
33
- end
34
- end
@@ -1,63 +0,0 @@
1
- module Griddler
2
- module Adapters
3
- class PostmarkAdapter
4
- def initialize(params)
5
- @params = params
6
- end
7
-
8
- def self.normalize_params(params)
9
- adapter = new(params)
10
- adapter.normalize_params
11
- end
12
-
13
- def normalize_params
14
- {
15
- to: extract_recipients(:ToFull),
16
- cc: extract_recipients(:CcFull),
17
- from: full_email(params[:FromFull]),
18
- subject: params[:Subject],
19
- text: params[:TextBody],
20
- html: params[:HtmlBody],
21
- attachments: attachment_files,
22
- }
23
- end
24
-
25
- private
26
-
27
- attr_reader :params
28
-
29
- def extract_recipients(key)
30
- params[key].to_a.map { |recipient| full_email(recipient) }
31
- end
32
-
33
- def full_email(contact_info)
34
- email = contact_info[:Email]
35
- if contact_info[:Name].present?
36
- "#{contact_info[:Name]} <#{email}>"
37
- else
38
- email
39
- end
40
- end
41
-
42
- def attachment_files
43
- attachments = Array(params[:Attachments])
44
-
45
- attachments.map do |attachment|
46
- ActionDispatch::Http::UploadedFile.new({
47
- filename: attachment[:Name],
48
- type: attachment[:ContentType],
49
- tempfile: create_tempfile(attachment)
50
- })
51
- end
52
- end
53
-
54
- def create_tempfile(attachment)
55
- filename = attachment[:Name]
56
- tempfile = Tempfile.new(filename, Dir::tmpdir, encoding: 'ascii-8bit')
57
- tempfile.write(Base64.decode64(attachment[:Content]))
58
- tempfile.rewind
59
- tempfile
60
- end
61
- end
62
- end
63
- end