mongo_mailer 0.0.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of mongo_mailer might be problematic. Click here for more details.

Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +10 -13
  3. data/.travis.yml +6 -0
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +112 -61
  6. data/README.md +112 -0
  7. data/Rakefile +7 -4
  8. data/bin/console +7 -0
  9. data/bin/mongo_mailer +11 -0
  10. data/bin/worker +6 -0
  11. data/config/boot.rb +12 -0
  12. data/config/mongo_mailer.yml.example +38 -0
  13. data/lib/generators/mongo_mailer/mongo_mailer_generator.rb +10 -0
  14. data/lib/generators/mongo_mailer/templates/mongo_mailer.yml +38 -0
  15. data/lib/mongo_mailer.rb +9 -2
  16. data/lib/mongo_mailer/capistrano.rb +33 -0
  17. data/lib/mongo_mailer/capistrano3.rb +49 -0
  18. data/lib/mongo_mailer/common/deliveries_counter.rb +18 -0
  19. data/lib/mongo_mailer/common/has_mongo_collection.rb +36 -0
  20. data/lib/mongo_mailer/common/mail_queue.rb +49 -0
  21. data/lib/mongo_mailer/configuration.rb +127 -0
  22. data/lib/mongo_mailer/core_ext/hash.rb +12 -0
  23. data/lib/mongo_mailer/delivery_methods/mongo_queue.rb +28 -0
  24. data/lib/mongo_mailer/delivery_methods/test.rb +38 -0
  25. data/lib/mongo_mailer/rails.rb +5 -0
  26. data/lib/mongo_mailer/standalone.rb +6 -0
  27. data/lib/mongo_mailer/standalone/final_deliverer.rb +35 -0
  28. data/lib/mongo_mailer/standalone/worker.rb +23 -0
  29. data/lib/mongo_mailer/version.rb +3 -0
  30. data/log/.gitkeep +0 -0
  31. data/mongo_mailer.gemspec +25 -26
  32. data/spec/lib/common/deliveries_counter_spec.rb +22 -0
  33. data/spec/lib/common/mail_queue_spec.rb +68 -0
  34. data/spec/lib/configuration_spec.rb +26 -0
  35. data/spec/lib/standalone/final_deliverer_spec.rb +40 -0
  36. data/spec/rails/delivery_methods/mongo_queue_spec.rb +33 -0
  37. data/spec/spec_helper.rb +29 -0
  38. metadata +97 -44
  39. data/LICENSE +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 1f28fa35aeba2febbdacacaa1c5ab93966d88bee4bd91d72106bb45f9ca38060
4
- data.tar.gz: 86edf6e41fceec20af13046be6223b27af265528e870d0ae40b3eeb3a9660153
2
+ SHA1:
3
+ metadata.gz: ae32a268782ce6659964b4f2e4730c04daa55f77
4
+ data.tar.gz: f080335933a7bb536e31018fa5d0fb867b13f453
5
5
  SHA512:
6
- metadata.gz: b8cb494a687cb716aa47f8170219e9d3d875ebcb299070d2a5ef03c5d925cd131db2d4d4effe3e4ab3c58635c78ae4b12ea3698a51d6a6ff09f0d46a659593e1
7
- data.tar.gz: 6df867865f4cd2ad758bceee71d2a94777c28c612c64eb67a05838fe615dc32ecab7615aeb0c0454504dc089811a280c918b516b97178220ef45ddf97c6df54b
6
+ metadata.gz: 2fde9a9f5b98b0ecf6df6024f98ea1a8e76700734bea9c104cb234dd29c3a3a04b9de0fd1b5be75523e969e6c2533dc49969b6ef62fe4b4e80d256b73a036cf7
7
+ data.tar.gz: 42f8b6b9d11754fd45a40d36de3d6cb5bfdaf9e0e621327a1fbeb3217c10a627aa2726937cbf643a9442c31504458299845ebe671f9cdbb6cdf0d126863ff38f
data/.gitignore CHANGED
@@ -1,14 +1,11 @@
1
+ .rvmrc
2
+ .ruby-version
3
+ .ruby-gemset
1
4
  *.gem
2
- .bundle
3
- .config
4
- .yardoc
5
- _yardoc
6
- coverage
7
- doc/
8
- lib/bundler/man
9
- pkg
10
- rdoc
11
- spec/reports
12
- tmp
13
- .coveralls.yml
14
- spec/examples.txt
5
+ *.swp
6
+ .DS_Store
7
+
8
+ tmp/
9
+ log/
10
+ coverage/
11
+ config/*.yml
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ services: mongodb
3
+ rvm:
4
+ - "2.2"
5
+ - "2.3"
6
+ - "2.4"
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
data/Gemfile.lock CHANGED
@@ -1,76 +1,127 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongo_mailer (0.0.0)
5
- mail
6
- mongo (~> 2.15)
4
+ mongo_mailer (0.1.2)
5
+ activesupport (>= 4.2.8)
6
+ bson_ext (~> 1.9.2)
7
+ daemons (~> 1.1.9)
8
+ mail (~> 2.5.5)
9
+ mongo (~> 1.9.2)
7
10
 
8
11
  GEM
9
- remote: https://rubygems.org/
12
+ remote: http://rubygems.org/
10
13
  specs:
11
- ast (2.4.2)
12
- bson (4.12.1)
13
- coderay (1.1.3)
14
- diff-lcs (1.4.4)
15
- mail (2.7.1)
16
- mini_mime (>= 0.1.1)
17
- method_source (1.0.0)
18
- mini_mime (1.1.0)
19
- mongo (2.15.0)
20
- bson (>= 4.8.2, < 5.0.0)
21
- parallel (1.20.1)
22
- parser (3.0.2.0)
23
- ast (~> 2.4.1)
24
- pry (0.14.1)
25
- coderay (~> 1.1)
26
- method_source (~> 1.0)
27
- rainbow (3.0.0)
28
- rake (13.0.6)
29
- regexp_parser (2.1.1)
30
- rexml (3.2.5)
31
- rspec (3.10.0)
32
- rspec-core (~> 3.10.0)
33
- rspec-expectations (~> 3.10.0)
34
- rspec-mocks (~> 3.10.0)
35
- rspec-core (3.10.1)
36
- rspec-support (~> 3.10.0)
37
- rspec-expectations (3.10.1)
14
+ actionmailer (4.2.9)
15
+ actionpack (= 4.2.9)
16
+ actionview (= 4.2.9)
17
+ activejob (= 4.2.9)
18
+ mail (~> 2.5, >= 2.5.4)
19
+ rails-dom-testing (~> 1.0, >= 1.0.5)
20
+ actionpack (4.2.9)
21
+ actionview (= 4.2.9)
22
+ activesupport (= 4.2.9)
23
+ rack (~> 1.6)
24
+ rack-test (~> 0.6.2)
25
+ rails-dom-testing (~> 1.0, >= 1.0.5)
26
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
27
+ actionview (4.2.9)
28
+ activesupport (= 4.2.9)
29
+ builder (~> 3.1)
30
+ erubis (~> 2.7.0)
31
+ rails-dom-testing (~> 1.0, >= 1.0.5)
32
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
33
+ activejob (4.2.9)
34
+ activesupport (= 4.2.9)
35
+ globalid (>= 0.3.0)
36
+ activesupport (4.2.9)
37
+ i18n (~> 0.7)
38
+ minitest (~> 5.1)
39
+ thread_safe (~> 0.3, >= 0.3.4)
40
+ tzinfo (~> 1.1)
41
+ bson (1.9.2)
42
+ bson_ext (1.9.2)
43
+ bson (~> 1.9.2)
44
+ builder (3.2.3)
45
+ coveralls (0.7.0)
46
+ multi_json (~> 1.3)
47
+ rest-client
48
+ simplecov (>= 0.7)
49
+ term-ansicolor
50
+ thor
51
+ daemons (1.1.9)
52
+ diff-lcs (1.3)
53
+ docile (1.1.5)
54
+ erubis (2.7.0)
55
+ globalid (0.4.0)
56
+ activesupport (>= 4.2.0)
57
+ i18n (0.8.4)
58
+ json (2.1.0)
59
+ loofah (2.0.3)
60
+ nokogiri (>= 1.5.9)
61
+ mail (2.5.5)
62
+ mime-types (~> 1.16)
63
+ treetop (~> 1.4.8)
64
+ mime-types (1.25.1)
65
+ mini_portile2 (2.2.0)
66
+ minitest (5.10.2)
67
+ mongo (1.9.2)
68
+ bson (~> 1.9.2)
69
+ multi_json (1.12.1)
70
+ nokogiri (1.8.0)
71
+ mini_portile2 (~> 2.2.0)
72
+ polyglot (0.3.5)
73
+ rack (1.6.8)
74
+ rack-test (0.6.3)
75
+ rack (>= 1.0)
76
+ rails-deprecated_sanitizer (1.0.3)
77
+ activesupport (>= 4.2.0.alpha)
78
+ rails-dom-testing (1.0.8)
79
+ activesupport (>= 4.2.0.beta, < 5.0)
80
+ nokogiri (~> 1.6)
81
+ rails-deprecated_sanitizer (>= 1.0.1)
82
+ rails-html-sanitizer (1.0.3)
83
+ loofah (~> 2.0)
84
+ rake (10.1.1)
85
+ rest-client (1.6.7)
86
+ mime-types (>= 1.16)
87
+ rspec (3.6.0)
88
+ rspec-core (~> 3.6.0)
89
+ rspec-expectations (~> 3.6.0)
90
+ rspec-mocks (~> 3.6.0)
91
+ rspec-core (3.6.0)
92
+ rspec-support (~> 3.6.0)
93
+ rspec-expectations (3.6.0)
38
94
  diff-lcs (>= 1.2.0, < 2.0)
39
- rspec-support (~> 3.10.0)
40
- rspec-mocks (3.10.2)
95
+ rspec-support (~> 3.6.0)
96
+ rspec-mocks (3.6.0)
41
97
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.10.0)
43
- rspec-support (3.10.2)
44
- rubocop (1.18.4)
45
- parallel (~> 1.10)
46
- parser (>= 3.0.0.0)
47
- rainbow (>= 2.2.2, < 4.0)
48
- regexp_parser (>= 1.8, < 3.0)
49
- rexml
50
- rubocop-ast (>= 1.8.0, < 2.0)
51
- ruby-progressbar (~> 1.7)
52
- unicode-display_width (>= 1.4.0, < 3.0)
53
- rubocop-ast (1.8.0)
54
- parser (>= 3.0.1.1)
55
- rubocop-rake (0.6.0)
56
- rubocop (~> 1.0)
57
- rubocop-rspec (2.4.0)
58
- rubocop (~> 1.0)
59
- rubocop-ast (>= 1.1.0)
60
- ruby-progressbar (1.11.0)
61
- unicode-display_width (2.0.0)
98
+ rspec-support (~> 3.6.0)
99
+ rspec-support (3.6.0)
100
+ simplecov (0.14.1)
101
+ docile (~> 1.1.0)
102
+ json (>= 1.8, < 3)
103
+ simplecov-html (~> 0.10.0)
104
+ simplecov-html (0.10.1)
105
+ term-ansicolor (1.2.2)
106
+ tins (~> 0.8)
107
+ thor (0.18.1)
108
+ thread_safe (0.3.6)
109
+ tins (0.13.1)
110
+ treetop (1.4.15)
111
+ polyglot
112
+ polyglot (>= 0.3.1)
113
+ tzinfo (1.2.3)
114
+ thread_safe (~> 0.1)
62
115
 
63
116
  PLATFORMS
64
- x86_64-darwin-20
117
+ ruby
65
118
 
66
119
  DEPENDENCIES
120
+ actionmailer (>= 4.2.8)
121
+ coveralls
67
122
  mongo_mailer!
68
- pry
69
- rake
70
- rspec
71
- rubocop
72
- rubocop-rake
73
- rubocop-rspec
123
+ rake (>= 10.0.4)
124
+ rspec (>= 2.14.0)
74
125
 
75
126
  BUNDLED WITH
76
- 2.2.24
127
+ 1.15.1
data/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # MongoMailer
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/mongo_mailer.png)][gem_version]
4
+ [![Build status](https://secure.travis-ci.org/infakt/mongo_mailer.png?branch=master)][travis]
5
+ [![Code Climate](https://codeclimate.com/github/infakt/mongo_mailer.png)][codeclimate]
6
+ [![Coverage Status](https://coveralls.io/repos/infakt/mongo_mailer/badge.png?branch=master)][coveralls]
7
+
8
+ [gem_version]: https://rubygems.org/gems/mongo_mailer
9
+ [travis]: http://travis-ci.org/infakt/mongo_mailer
10
+ [codeclimate]: https://codeclimate.com/github/infakt/mongo_mailer
11
+ [coveralls]: https://coveralls.io/r/infakt/mongo_mailer
12
+
13
+
14
+ ## Asynchronous mail delivery with mongodb for Rails
15
+
16
+ ### Elements
17
+
18
+ * Rails plugin containing delivery_method, generators, capistrano recipies
19
+ * worker daemon fetching mails for queue and doing the final delivery using two methods: base and emergency, if base delivery fails, then emergency is being used.
20
+
21
+ ### Rails plugin
22
+
23
+ Add mongo_mailer to your `Gemfile`:
24
+ <pre>
25
+ gem 'mongo_mailer', require: 'mongo_mailer/rails'
26
+ </pre>
27
+
28
+ Run the generator:
29
+ <pre>
30
+ bundle exec rails generate mongo_mailer
31
+ </pre>
32
+ which creates `config/mongo_mailer.yml.example`
33
+
34
+ Based on example configuration file, create `mongo_mailer.yml` and add it to gitignored.
35
+ `mongo_mailer.yml` contains configuration of mongo database and final delivery methods used by worker.
36
+
37
+ Set `ActionMailer::Base` delivery method in your environment file:
38
+ <pre>
39
+ config.action_mailer.delivery_method :mongo_queue
40
+ </pre>
41
+
42
+ Add mongo_mailer capistrano recipies, by adding:
43
+ <pre>
44
+ require 'mongo_mailer/capistrano'
45
+ </pre>
46
+ to your `deploy.rb`. Since then you have access to `cap mongo_mailer:start|stop|restart` recipies.
47
+
48
+ ### Standalone worker
49
+
50
+ Worker can be used within a rails app or as a standalone application. In both cases only mongo_mailer related stuff is used - rails are never being loaded.
51
+
52
+ Worker usees [daemons](https://rubygems.org/gems/daemons) to daemonize the process, continuously polls mongo queue for new mail and does the final delivery.
53
+
54
+ * to start, stop or restart worker just run:
55
+ <pre>
56
+ bundle exec mongo_mailer start|stop|restart [rails_env]
57
+ </pre>
58
+ within a rails app, or:
59
+ <pre>
60
+ bundle exec worker start|stop|restart [app_env]
61
+ </pre>
62
+ in a standalone version.
63
+
64
+ * by default workers activity and pids are being loged in the app's `log` directory:
65
+ <pre>
66
+ log/mongo_mailer.output
67
+ log/mongo_mailer.log
68
+ log/mongo_mailer.pid
69
+ </pre>
70
+ you can change it, by modifying proper daemon options in `mongo_mailer.yml`.
71
+
72
+ * all sent mail are logged into:
73
+ <pre>
74
+ log/mongo_queue.log
75
+ </pre>
76
+
77
+ ### Debugging & stats
78
+
79
+ mongo_mailer doesn't have any web interface, so irb console is the only interface to get information :)
80
+
81
+ #### Getting number of sent messages for each delivery method:
82
+
83
+ <pre>
84
+ MongoMailer::DeliveriesCounter.instance.by_type(:base)
85
+ => {"_id"=>BSON::ObjectId('5177ecb0df30cc350e3fbdf3'), "type"=>:base, "value"=>11}
86
+
87
+ MongoMailer::DeliveriesCounter.instance.by_type(:emergency)
88
+ => {"_id"=>BSON::ObjectId('5178f501df30cc350e3fbdf4'), "type"=>:base, "value"=>1}
89
+
90
+ MongoMailer::DeliveriesCounter.instance.all
91
+ => [{"_id"=>BSON::ObjectId('5177ecb0df30cc350e3fbdf3'), "type"=>:base, "value"=>11}, {"_id"=>BSON::ObjectId('5178f501df30cc350e3fbdf4'), "type"=>:emergency, "value"=>1}]
92
+ </pre>
93
+
94
+ #### Getting list of unsent message due to errors:
95
+
96
+ <pre>
97
+ MongoMailer::MailQueue.instance.invalid_items
98
+ </pre>
99
+
100
+ #### Clearing the list of unsent messages:
101
+
102
+ <pre>
103
+ MongoMailer::MailQueue.instance.clear_invalid_items!
104
+ </pre>
105
+
106
+ ## Contributing
107
+
108
+ 1. Fork it
109
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
110
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
111
+ 4. Push to the branch (`git push origin my-new-feature`)
112
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,8 +1,11 @@
1
+ #!/usr/bin/env rake
1
2
  require 'bundler/gem_tasks'
2
3
  require 'rspec/core/rake_task'
3
- require 'rubocop/rake_task'
4
4
 
5
- RSpec::Core::RakeTask.new(:spec)
6
- RuboCop::RakeTask.new
5
+ desc 'Run all specs'
6
+ RSpec::Core::RakeTask.new(:spec) do |t|
7
+ t.pattern = './spec/**/*_spec.rb'
8
+ t.rspec_opts = ['--profile', '--color']
9
+ end
7
10
 
8
- task default: %i[rubocop spec]
11
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "irb"
4
+ require "irb/completion"
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+
7
+ IRB.start
data/bin/mongo_mailer ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['RAILS_ENV'] = ENV['APP_ENV'] = ARGV[1] || 'development'
3
+
4
+ require 'mongo_mailer/standalone'
5
+
6
+ rails_root = File.dirname(ENV['BUNDLE_GEMFILE'])
7
+
8
+ MongoMailer::Configuration.instance.root = rails_root
9
+ MongoMailer::Configuration.instance.load!
10
+
11
+ MongoMailer::Worker.new.run!
data/bin/worker ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['RAILS_ENV'] = ENV['APP_ENV'] = ARGV[1] || 'development'
3
+
4
+ require File.expand_path('../../config/boot', __FILE__)
5
+
6
+ MongoMailer::Worker.new.run!
data/config/boot.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+
3
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
4
+ ENV['RAILS_ENV'] ||= 'development'
5
+
6
+ require 'bundler/setup'
7
+ Bundler.require
8
+
9
+ require 'mongo_mailer/standalone'
10
+
11
+ MongoMailer::Configuration.instance.root = File.expand_path("../..", __FILE__)
12
+ MongoMailer::Configuration.instance.load!
@@ -0,0 +1,38 @@
1
+ development: &development
2
+ mongodb:
3
+ host: localhost
4
+ port: 27017
5
+ name: mongo_mailer
6
+ base_delivery_method: smtp
7
+ base_delivery_settings:
8
+ user_name: "username"
9
+ password: "apikey"
10
+ domain: "example.com"
11
+ address: "smtp1.example.com"
12
+ port: 587
13
+ authentication: plain
14
+ enable_starttls_auto: true
15
+ emergency_delivery_method: smtp
16
+ emergency_delivery_settings:
17
+ user_name: "username"
18
+ password: "apikey"
19
+ domain: "example.com"
20
+ address: "smtp2.example.com"
21
+ port: 587
22
+ authentication: plain
23
+ enable_starttls_auto: true
24
+ log_level: info
25
+ daemon_options:
26
+ dir_mode: !ruby/symbol normal
27
+ log_dir: log
28
+ dir: log
29
+ log_output: true
30
+ backtrace: true
31
+ multiple: false
32
+ production:
33
+ <<: *development
34
+ test:
35
+ <<: *development
36
+ base_delivery_method: test1
37
+ emergency_delivery_method: test2
38
+ log_level: error