sendgrid_events 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/generators/sendgrid_events/install/templates/initializer.rb +2 -2
- data/lib/generators/sendgrid_events/install/templates/routes.rb +1 -1
- data/lib/generators/sendgrid_events/install_generator.rb +25 -4
- data/lib/sendgrid_events.rb +1 -0
- data/lib/sendgrid_events/handlers/dispatch.rb +3 -3
- data/lib/sendgrid_events/middleware.rb +22 -0
- data/lib/sendgrid_events/receiver.rb +6 -10
- data/lib/sendgrid_events/version.rb +1 -1
- data/spec/sendgrid_events/handlers/base_spec.rb +1 -1
- data/spec/sendgrid_events/receiver_spec.rb +4 -17
- metadata +5 -4
data/Gemfile.lock
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
|
2
|
-
match
|
2
|
+
match SendgridEvents::Configure.mount_at => "sendgrid_events/sendgrid_events#receiver", :via => :post
|
@@ -14,21 +14,42 @@ module SendgridEvents
|
|
14
14
|
@prev_migration_nr.to_s
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def install
|
18
|
+
migrations
|
19
|
+
initializer
|
20
|
+
routes
|
21
|
+
middleware
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def migrations
|
18
27
|
puts "Copying Sengrid Events migrations..."
|
19
|
-
|
28
|
+
begin
|
29
|
+
migration_template "sendgrid_events_table.rb", "db/migrate/sendgrid_events_table.rb"
|
30
|
+
rescue
|
31
|
+
puts "Already have that migration"
|
32
|
+
end
|
20
33
|
end
|
21
34
|
|
22
|
-
def
|
35
|
+
def initializer
|
23
36
|
puts "Copying initializer..."
|
24
37
|
copy_file "initializer.rb", "config/initializers/sendgrid_events.rb"
|
25
38
|
end
|
26
39
|
|
27
|
-
def
|
40
|
+
def routes
|
41
|
+
puts "Copying routes..."
|
28
42
|
insert_into_file Rails.root.join('config', 'routes.rb'),
|
29
43
|
File.open(File.join(File.expand_path("../install/templates", __FILE__), 'routes.rb')).read,
|
30
44
|
:after => /Application\.routes\.draw do$/
|
31
45
|
end
|
46
|
+
|
47
|
+
def middleware
|
48
|
+
puts "Copying config..."
|
49
|
+
insert_into_file Rails.root.join('config', 'application.rb'), :after => /class Application.*$/ do
|
50
|
+
"\n\t\tconfig.middleware.insert_after ActiveRecord::ParamsParser, SendgridEvents::Middleware"
|
51
|
+
end
|
52
|
+
end
|
32
53
|
end
|
33
54
|
end
|
34
55
|
end
|
data/lib/sendgrid_events.rb
CHANGED
@@ -6,7 +6,7 @@ module SendgridEvents
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.registered_handlers
|
9
|
-
@registered_handlers ||= {}
|
9
|
+
@registered_handlers ||= {}.with_indifferent_access
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.acceptable_handlers
|
@@ -21,13 +21,13 @@ module SendgridEvents
|
|
21
21
|
spamreport
|
22
22
|
unsubscribe
|
23
23
|
]
|
24
|
-
Hash[array.zip([true] * array.size)].
|
24
|
+
Hash[array.zip([true] * array.size)].with_indifferent_access
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.selected_handlers=(handler_list)
|
29
29
|
raise ArgumentError, "Found an unaccetable handler" unless handler_list.all? { |x| acceptable_handlers[x.to_sym] }
|
30
|
-
@selected_handlers = Hash[handler_list.zip([true] * handler_list.size)].
|
30
|
+
@selected_handlers = Hash[handler_list.zip([true] * handler_list.size)].with_indifferent_access
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module SendgridEvents
|
2
|
+
class Middleware
|
3
|
+
def initialize(app)
|
4
|
+
@app = app
|
5
|
+
end
|
6
|
+
|
7
|
+
def call(env)
|
8
|
+
scrub(env) if env["REQUEST_URI"].include? Configure.mount_at
|
9
|
+
@app.call(env)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def scrub(env)
|
14
|
+
rack_input = env["rack.input"].read
|
15
|
+
rack_input ="[#{rack_input.split("\r\n").join(",")}]"
|
16
|
+
env["rack.input"] = StringIO.new(rack_input)
|
17
|
+
rescue
|
18
|
+
ensure
|
19
|
+
env["rack.input"].rewind
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,18 +1,14 @@
|
|
1
1
|
module SendgridEvents
|
2
2
|
class Receiver
|
3
3
|
def self.receive(params)
|
4
|
-
if Configure.receive?
|
5
|
-
|
6
|
-
|
4
|
+
if Configure.receive? and params['_json'] and params['_json'].is_a? Array
|
5
|
+
params['_json'].each do |event|
|
6
|
+
if event.is_a? Hash and event.has_key? "sendgrid_events_id"
|
7
|
+
event = event.with_indifferent_access
|
8
|
+
Handlers::Base.choose_and_handle(event)
|
9
|
+
end
|
7
10
|
end
|
8
11
|
end
|
9
12
|
end
|
10
|
-
|
11
|
-
private
|
12
|
-
def self.extract_events_and_clean(params)
|
13
|
-
params.first.first.split("\n").collect do |json_hash|
|
14
|
-
JSON.parse(json_hash).symbolize_keys
|
15
|
-
end
|
16
|
-
end
|
17
13
|
end
|
18
14
|
end
|
@@ -17,7 +17,7 @@ module SendgridEvents
|
|
17
17
|
} }
|
18
18
|
|
19
19
|
it "returns the list of handlers" do
|
20
|
-
subject.registered_handlers.
|
20
|
+
subject.registered_handlers.keys.sort.should == Dispatch.acceptable_handlers.keys.sort
|
21
21
|
end
|
22
22
|
|
23
23
|
it "chose a handler if handler is registered" do
|
@@ -3,30 +3,17 @@ module SendgridEvents
|
|
3
3
|
describe Receiver do
|
4
4
|
subject { Receiver }
|
5
5
|
it { should respond_to(:receive) }
|
6
|
-
it { should respond_to(:extract_events_and_clean) }
|
7
6
|
|
8
7
|
let(:params) {
|
9
|
-
{"
|
8
|
+
{ "_json" => [
|
9
|
+
{"email" => "foo@bar.com", "timestamp" => 1322000095,"sendgrid_events_id" => "7", "event" => "delivered"},
|
10
|
+
{"email" => "foo@bar.com", "timestamp" => 1322000096, "sendgrid_events_id" => "4", "event" => "delivered"}
|
11
|
+
] }
|
10
12
|
}
|
11
13
|
|
12
14
|
it "sends the poorly composed params to be cleaned then handles" do
|
13
15
|
Handlers::Base.should_receive(:choose_and_handle).exactly(2).times
|
14
16
|
subject.receive params
|
15
17
|
end
|
16
|
-
|
17
|
-
it "extracts JSON objects" do
|
18
|
-
subject.extract_events_and_clean(params).should == [{
|
19
|
-
:email => "foo@bar.com",
|
20
|
-
:timestamp => 1322000095,
|
21
|
-
:sendgrid_events_id => '7',
|
22
|
-
:event => "delivered"
|
23
|
-
},
|
24
|
-
{
|
25
|
-
:email => "foo@bar.com",
|
26
|
-
:timestamp => 1322000096,
|
27
|
-
:sendgrid_events_id => "4",
|
28
|
-
:event => "delivered"
|
29
|
-
}]
|
30
|
-
end
|
31
18
|
end
|
32
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendgrid_events
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -209,6 +209,7 @@ files:
|
|
209
209
|
- lib/sendgrid_events/handlers/processed.rb
|
210
210
|
- lib/sendgrid_events/handlers/spam_reported.rb
|
211
211
|
- lib/sendgrid_events/handlers/unsubscribed.rb
|
212
|
+
- lib/sendgrid_events/middleware.rb
|
212
213
|
- lib/sendgrid_events/receiver.rb
|
213
214
|
- lib/sendgrid_events/version.rb
|
214
215
|
- script/rails
|
@@ -240,7 +241,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
240
241
|
version: '0'
|
241
242
|
segments:
|
242
243
|
- 0
|
243
|
-
hash:
|
244
|
+
hash: 143610152345397580
|
244
245
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
245
246
|
none: false
|
246
247
|
requirements:
|
@@ -249,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
250
|
version: '0'
|
250
251
|
segments:
|
251
252
|
- 0
|
252
|
-
hash:
|
253
|
+
hash: 143610152345397580
|
253
254
|
requirements: []
|
254
255
|
rubyforge_project:
|
255
256
|
rubygems_version: 1.8.24
|