griddler 1.3.1 → 1.5.2

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: 75f194d5d7ffebb9f599c4e67580b66759b894e7
4
- data.tar.gz: 7b1fe0580a6ec472aa19a05193e064d8140761b4
3
+ metadata.gz: 638ce28e726a636413b01cc51837099ec9b828a6
4
+ data.tar.gz: feca8309eed5360ae57a59846d98b0f163bfe169
5
5
  SHA512:
6
- metadata.gz: 5d44196465d1efb54a6c86e1892b487bed74a88e454b6f55ad20330194aa5459758dbc8656cdd601a6aa76db140c69366a33729d2a7f68779e3489c37db84059
7
- data.tar.gz: 5560e05ef5350e6285d92cbebe36415efa4d5e0999d9b175dbd5e934c815c27b9003750f6cf60701d249612696ec79a474b3eb56338198139bc9a5e2e5faaab4
6
+ metadata.gz: a91bba6d57fbd43ad02cbec2ac3dbbdfe9bf0cadcb3259e471a753292e20560f587a45aeeece4dce1bc2a8f3938842a1950ed7982ef48dae0503c7067fc2ee76
7
+ data.tar.gz: 494bac5827de8abeea296d31f8ca81159fbc847fc89a8d0a9a1a7636579d915d577cf91bfe08f0edce51d76f51215e76c7e31e5afe26a0f488e589c840333fef
data/README.md CHANGED
@@ -14,7 +14,7 @@ Tutorials
14
14
  ---------
15
15
 
16
16
  * SendGrid wrote a
17
- [great tutorial](http://blog.sendgrid.com/receiving-email-in-your-rails-app-with-griddler/)
17
+ [great tutorial](https://sendgrid.com/blog/receiving-email-in-your-rails-app-with-griddler/)
18
18
  on integrating Griddler with your application.
19
19
  * We have our own blog post on the subject over at
20
20
  [Giant Robots](https://robots.thoughtbot.com/griddler-is-better-than-ever).
@@ -53,6 +53,7 @@ Defaults are shown below with sample overrides following. In
53
53
  ```ruby
54
54
  Griddler.configure do |config|
55
55
  config.processor_class = EmailProcessor # CommentViaEmail
56
+ config.email_class = Griddler::Email # MyEmail
56
57
  config.processor_method = :process # :create_comment (A method on CommentViaEmail)
57
58
  config.reply_delimiter = '-- REPLY ABOVE THIS LINE --'
58
59
  config.email_service = :sendgrid # :cloudmailin, :postmark, :mandrill, :mailgun
@@ -62,8 +63,9 @@ end
62
63
  | Option | Meaning
63
64
  | ------ | -------
64
65
  | `processor_class` | The class Griddler will use to handle your incoming emails.
66
+ | `email_class` | The class Griddler will use to represent an incoming e-mail. It must support an initializer that receives a hash as the only argument. We recommend inheriting it from Griddler::Email or checking this class to see all the methods it responds to.
65
67
  | `processor_method` | The method Griddler will call on the processor class when handling your incoming emails.
66
- | `reply_delimiter` | The string searched for that will split your body.
68
+ | `reply_delimiter` | The string searched for that will split your body. You can also supply an array of string - useful if you need translated versions of the delimiter
67
69
  | `email_service` | Tells Griddler which email service you are using. The supported email service options are `:sendgrid` (the default), `:cloudmailin` (expects multipart format), `:postmark`, `:mandrill` and `:mailgun`. You will also need to have an appropriate [adapter] gem included in your Gemfile.
68
70
 
69
71
  By default Griddler will look for a class named `EmailProcessor`. The class is
@@ -107,6 +109,7 @@ Griddler::Email attributes
107
109
  | `#attachments` | An array of `File` objects containing any attachments.
108
110
  | `#headers` | A hash of headers parsed by `Mail::Header`, unless they are already formatted as a hash when received from the adapter in which case the original hash is returned.
109
111
  | `#raw_headers` | The raw headers included in the message.
112
+ | `#to_h` | A hash of the above attributes.
110
113
 
111
114
  ### Email Addresses
112
115
 
@@ -165,16 +168,20 @@ adapter gem in addition to `griddler`.
165
168
  | Service | Adapter
166
169
  | ------- | -------
167
170
  | sendgrid | [griddler-sendgrid]
171
+ | cloudmailin | [griddler-cloudmailin]
168
172
  | mandrill | [griddler-mandrill]
169
173
  | mailgun | [griddler-mailgun]
170
174
  | postmark | [griddler-postmark]
171
175
  | sparkpost | [griddler-sparkpost]
176
+ | ses (amazon)| [griddler-ses]
172
177
 
173
178
  [griddler-sendgrid]: https://github.com/thoughtbot/griddler-sendgrid
179
+ [griddler-cloudmailin]: https://github.com/thoughtbot/griddler-cloudmailin
174
180
  [griddler-mandrill]: https://github.com/wingrunr21/griddler-mandrill
175
181
  [griddler-mailgun]: https://github.com/bradpauly/griddler-mailgun
176
182
  [griddler-postmark]: https://github.com/r38y/griddler-postmark
177
183
  [griddler-sparkpost]: https://github.com/PrestoDoctor/griddler-sparkpost
184
+ [griddler-ses]: https://github.com/85x14/griddler-ses
178
185
 
179
186
  Writing an Adapter
180
187
  ------------------
@@ -210,6 +217,6 @@ Griddler was written by Caleb Thompson and Joel Oliveira.
210
217
 
211
218
  Thanks to our [contributors](https://github.com/thoughtbot/griddler/contributors)!
212
219
 
213
- ![thoughtbot](http://thoughtbot.com/images/tm/logo.png)
220
+ ![thoughtbot](http://presskit.thoughtbot.com/images/thoughtbot-logo-for-readmes.svg)
214
221
 
215
222
  The names and logos for thoughtbot are trademarks of thoughtbot, inc.
data/Rakefile CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env rake
2
2
  begin
3
3
  require 'bundler/setup'
4
- require 'bundler/gem_tasks'
5
4
  rescue LoadError
6
5
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
6
  exit 1
@@ -1,7 +1,9 @@
1
1
  class Griddler::EmailsController < ActionController::Base
2
+ skip_before_action :verify_authenticity_token, raise: false
3
+
2
4
  def create
3
5
  normalized_params.each do |p|
4
- process_email Griddler::Email.new(p)
6
+ process_email email_class.new(p)
5
7
  end
6
8
 
7
9
  head :ok
@@ -9,9 +11,9 @@ class Griddler::EmailsController < ActionController::Base
9
11
 
10
12
  private
11
13
 
12
- delegate :processor_class, :processor_method, :email_service, to: :griddler_configuration
14
+ delegate :processor_class, :email_class, :processor_method, :email_service, to: :griddler_configuration
13
15
 
14
- private :processor_class, :processor_method, :email_service
16
+ private :processor_class, :email_class, :processor_method, :email_service
15
17
 
16
18
  def normalized_params
17
19
  Array.wrap(email_service.normalize_params(params))
@@ -17,6 +17,7 @@ module Griddler
17
17
 
18
18
  class Configuration
19
19
  attr_accessor :processor_method, :reply_delimiter
20
+ attr_writer :email_class
20
21
 
21
22
  def processor_class
22
23
  @processor_class ||=
@@ -36,6 +37,10 @@ module Griddler
36
37
  @processor_class = klass.to_s
37
38
  end
38
39
 
40
+ def email_class
41
+ @email_class ||= Griddler::Email
42
+ end
43
+
39
44
  def processor_method
40
45
  @processor_method ||= :process
41
46
  end
@@ -3,8 +3,24 @@ require 'htmlentities'
3
3
  module Griddler
4
4
  class Email
5
5
  include ActionView::Helpers::SanitizeHelper
6
- attr_reader :to, :from, :cc, :bcc, :subject, :body, :raw_body, :raw_text, :raw_html,
7
- :headers, :raw_headers, :attachments
6
+
7
+ attr_reader :to,
8
+ :from,
9
+ :cc,
10
+ :bcc,
11
+ :original_recipient,
12
+ :reply_to,
13
+ :subject,
14
+ :body,
15
+ :raw_body,
16
+ :raw_text,
17
+ :raw_html,
18
+ :headers,
19
+ :raw_headers,
20
+ :attachments,
21
+ :vendor_specific,
22
+ :spam_report,
23
+ :charsets
8
24
 
9
25
  def initialize(params)
10
26
  @params = params
@@ -22,10 +38,43 @@ module Griddler
22
38
 
23
39
  @cc = recipients(:cc)
24
40
  @bcc = recipients(:bcc)
41
+ @original_recipient = extract_address(params[:original_recipient])
42
+ @reply_to = extract_address(params[:reply_to])
25
43
 
26
44
  @raw_headers = params[:headers]
27
45
 
28
46
  @attachments = params[:attachments]
47
+
48
+ @vendor_specific = params.fetch(:vendor_specific, {})
49
+
50
+ @spam_report = params[:spam_report]
51
+
52
+ @charsets = params[:charsets]
53
+ end
54
+
55
+ def to_h
56
+ @to_h ||= {
57
+ to: to,
58
+ from: from,
59
+ cc: cc,
60
+ bcc: bcc,
61
+ subject: subject,
62
+ body: body,
63
+ raw_body: raw_body,
64
+ raw_text: raw_text,
65
+ raw_html: raw_html,
66
+ headers: headers,
67
+ raw_headers: raw_headers,
68
+ attachments: attachments,
69
+ vendor_specific: vendor_specific,
70
+ spam_score: spam_score,
71
+ spam_report: spam_report,
72
+ charsets: charsets,
73
+ }
74
+ end
75
+
76
+ def spam_score
77
+ @spam_report[:score] if @spam_report
29
78
  end
30
79
 
31
80
  private
@@ -81,10 +81,13 @@ module Griddler::EmailParser
81
81
  /^[[:space:]]*[-]+[[:space:]]*Original Message[[:space:]]*[-]+[[:space:]]*$/i,
82
82
  /^[[:space:]]*--[[:space:]]*$/,
83
83
  /^[[:space:]]*\>?[[:space:]]*On.*\r?\n?.*wrote:\r?\n?$/,
84
- /^On.*<\n?.*>.*\n?wrote:$/,
84
+ /^On.*<\r?\n?.*>.*\r?\n?wrote:\r?\n?$/,
85
85
  /On.*wrote:/,
86
86
  /\*?From:.*$/i,
87
- /^[[:space:]]*\d{4}[-\/]\d{1,2}[-\/]\d{1,2}[[:space:]].*[[:space:]]<.*>?$/i
87
+ /^[[:space:]]*\d{4}[-\/]\d{1,2}[-\/]\d{1,2}[[:space:]].*[[:space:]]<.*>?$/i,
88
+ /(_)*\n[[:space:]]*De :.*\n[[:space:]]*Envoyé :.*\n[[:space:]]*À :.*\n[[:space:]]*Objet :.*\n$/i, # French Outlook
89
+ /^[[:space:]]*\>?[[:space:]]*Le.*<\n?.*>.*\n?a[[:space:]]?\n?écrit :$/, # French
90
+ /^[[:space:]]*\>?[[:space:]]*El.*<\n?.*>.*\n?escribió:$/ # Spanish
88
91
  ]
89
92
  end
90
93
 
@@ -1,3 +1,3 @@
1
1
  module Griddler
2
- VERSION = '1.3.1'
2
+ VERSION = '1.5.2'
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.3.1
4
+ version: 1.5.2
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: 2016-03-23 00:00:00.000000000 Z
14
+ date: 2018-05-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -122,7 +122,8 @@ files:
122
122
  - lib/griddler/testing.rb
123
123
  - lib/griddler/version.rb
124
124
  homepage: http://thoughtbot.com
125
- licenses: []
125
+ licenses:
126
+ - MIT
126
127
  metadata: {}
127
128
  post_install_message:
128
129
  rdoc_options: []
@@ -141,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
142
  version: '0'
142
143
  requirements: []
143
144
  rubyforge_project:
144
- rubygems_version: 2.5.1
145
+ rubygems_version: 2.5.2
145
146
  signing_key:
146
147
  specification_version: 4
147
148
  summary: SendGrid Parse API client Rails Engine