mm-data_mapper 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MWMxYzU1YTFmYjNlY2I3ODkxYjIyZWUzYWIzYTFkNDJkYTM3OWViYQ==
5
+ data.tar.gz: !binary |-
6
+ MmNjZDQ2NDYxZWQzMTMxNWY0Y2JlYzEyZWVhNDU0M2ZjNmE2ZTdlZg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MDczNjUyZDhmZDViODljNTlmOWEwYjZmNDk5ZmQ4ZmQ4YWU4N2M5OGVhMGNk
10
+ MjIxYTU3ZTNiZmI4MzFkMmI3YzRhYzk2YzYxMTdiMjMyZjkyY2E1N2VkNmRm
11
+ YTIxZTI1NmMyN2JkNzRmYTkwMjA0NDcwMjJiYzVmN2U1ZDQ2OWI=
12
+ data.tar.gz: !binary |-
13
+ MjM5MTZjYjFjYjg2YzBmMWUzZWYxMzgzMTViNGVkMmE5MTdjOTFhNDc3Mzhi
14
+ YmY5ZGQzMDdmMzk2OTBlMmY5NzJiNzRiMGE4MGYxY2FlMWZiMWZlOTcxZWY1
15
+ NWY3MDJjYzQwMzE5MDkwNTIxYTYzYjk4ZmE0Nzg3OTU2YThkYzk=
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ services: mysql
3
+ script: "bundle exec rspec"
4
+ before_install:
5
+ - gem install bundler
6
+ before_script:
7
+ - mysql -e 'create database monkey_mailer_test'
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,26 @@
1
+ [![Build Status](https://travis-ci.org/fsaravia/mm-data_mapper.png)](https://travis-ci.org/fsaravia/mm-data_mapper)
2
+
3
+ mm-data_mapper
4
+ ======
5
+
6
+ ## Description
7
+
8
+ `mm-data_mapper` is a plugin for [MonkeyMailer](https://github.com/fsaravia/monkey-mailer) which allows using a `DataMapper` model as the datasource.
9
+ It requires that you configure your database settings inside MonkeyMailer.configuration.loader_options using DataMapper's configuration options:
10
+ ```ruby
11
+ MonkeyMailer.configure do |config|
12
+ config.loader = MonkeyMailer::Loaders::DataMapper
13
+ config.loader_options = {
14
+ :default => {
15
+ :adapter => 'mysql',
16
+ :user => 'monkey-mailer',
17
+ :password => 'monkey_mailer_dev',
18
+ :database => 'monkey_mailer_test'
19
+ }
20
+ }
21
+ end
22
+ ```
23
+ Note that you will need to have the adapter gem installed in your system (dm-mysql-adapter in this case)
24
+
25
+ ## License
26
+ See the `UNLICENSE` file included with this gem distribution.
data/UNLICENSE ADDED
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <http://unlicense.org/>
@@ -0,0 +1,44 @@
1
+ require 'monkey-mailer'
2
+ require 'data_mapper'
3
+
4
+ class MailQueue
5
+ include ::DataMapper::Resource
6
+
7
+ property :id, Serial
8
+ property :priority, Enum[:urgent, :normal, :low]
9
+ property :to_email, String, :length => 255, :required => true
10
+ property :to_name, String, :length => 255
11
+ property :from_email, String, :length => 255, :required => true
12
+ property :from_name, String, :length => 255
13
+ property :subject, String, :length => 255
14
+ property :body, Text
15
+ end
16
+
17
+ module MonkeyMailer::Loaders
18
+ class DataMapper
19
+
20
+ def initialize(sources)
21
+ ::DataMapper::Logger.new(STDOUT, 'fatal')
22
+ raise ArgumentError, 'One of the database names must be default' unless sources.include?(:default)
23
+ sources.each_pair do |name, opts|
24
+ ::DataMapper.setup(name.to_sym, opts)
25
+ end
26
+
27
+ ::DataMapper.finalize
28
+ end
29
+
30
+ def find_emails(priority, quota)
31
+ emails = []
32
+ MonkeyMailer.configuration.loader_options.each_key do |database|
33
+ new_emails = ::DataMapper.repository(database.to_sym) {MailQueue.all(:priority => priority, :limit => quota)}
34
+ quota -= new_emails.size
35
+ emails.concat(new_emails)
36
+ end
37
+ emails
38
+ end
39
+
40
+ def delete_email(email)
41
+ email.destroy
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "mm-data_mapper"
6
+ spec.authors = ["Federico Saravia Barrantes"]
7
+ spec.email = ["fedesaravia+monkey-mailer@gmail.com"]
8
+ spec.description = %q{DataMapper loader for MonkeyMailer}
9
+ spec.summary = %q{DataMapper loader for MonkeyMailer}
10
+ spec.homepage = "https://github.com/fsaravia/mm-data_mapper/"
11
+ spec.version = '0.0.1'
12
+ spec.license = "UNLICENSE"
13
+
14
+ spec.files = `git ls-files`.split("\n")
15
+ spec.test_files = `git ls-files -- spec/*`.split("\n")
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_dependency 'monkey-mailer', '>= 0.0.1'
19
+ spec.add_dependency 'data_mapper', '>= 1.2.0'
20
+ spec.add_development_dependency 'rspec', '>= 2.12.0'
21
+ spec.add_development_dependency 'dm-mysql-adapter', '>= 1.2.0'
22
+ spec.add_development_dependency 'database_cleaner', '>= 1.2.0'
23
+ spec.add_development_dependency 'spawn', '>= 0.1.4'
24
+ end
@@ -0,0 +1,53 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe MailQueue do
4
+
5
+ before :all do
6
+ @mail_hash = {
7
+ :from_name => 'Test example',
8
+ :from_email => 'test@example.org',
9
+ :to_name => 'Test recipient',
10
+ :to_email => 'test@example.org',
11
+ :subject => "I'm doing some test dude!",
12
+ :body => "<html><h1>Title</h1><p>Just some text on the test email</p></html>"
13
+ }
14
+ end
15
+
16
+ it 'should create urgent priority emails' do
17
+ MailQueue.create(@mail_hash.merge(:priority => :urgent)).should be_true
18
+ MailQueue.count(:priority => :urgent).should eq 1
19
+ end
20
+
21
+ it 'should create normal priority emails' do
22
+ MailQueue.create(@mail_hash.merge(:priority => :normal)).should be_true
23
+ MailQueue.count(:priority => :normal).should eq 1
24
+ end
25
+
26
+ it 'should create low priority emails' do
27
+ MailQueue.create(@mail_hash.merge(:priority => :low)).should be_true
28
+ MailQueue.count(:priority => :low).should eq 1
29
+ end
30
+
31
+ it 'should load mails from database and send them according to stablished quotas' do
32
+ adapter = MonkeyMailer::TestAdapter.new
33
+ MonkeyMailer.class_variable_set(:@@adapter, adapter)
34
+ adapter.sent_emails.should be_empty
35
+ 20.times do |count|
36
+ MailQueue.spawn(:priority => :urgent)
37
+ MailQueue.spawn(:priority => :normal) if (count + 1) % 2 == 0
38
+ MailQueue.spawn(:priority => :low) if (count + 1) % 5 == 0
39
+ end
40
+ MonkeyMailer.find_and_deliver
41
+ MailQueue.count(:priority => :urgent).should eq 10
42
+ MailQueue.count(:priority => :normal).should eq 10
43
+ MailQueue.count(:priority => :low).should eq 4
44
+ MonkeyMailer.find_and_deliver
45
+ MailQueue.count(:priority => :urgent).should eq 0
46
+ MailQueue.count(:priority => :normal).should eq 5
47
+ MailQueue.count(:priority => :low).should eq 4
48
+ MonkeyMailer.find_and_deliver
49
+ MailQueue.count(:priority => :urgent).should eq 0
50
+ MailQueue.count(:priority => :normal).should eq 5
51
+ MailQueue.count(:priority => :low).should eq 2
52
+ end
53
+ end
@@ -0,0 +1,39 @@
1
+ require 'mm-data_mapper'
2
+ require 'database_cleaner'
3
+
4
+ Dir[::File.join(::File.dirname(__FILE__), "support/**/*.rb")].each { |f| require f }
5
+
6
+ MonkeyMailer.configure do |config|
7
+ config.normal_sleep = 1
8
+ config.low_sleep = 2
9
+ config.urgent_quota = 10
10
+ config.normal_quota = 5
11
+ config.low_quota = 2
12
+ config.loader = MonkeyMailer::Loaders::DataMapper
13
+ config.loader_options = {
14
+ :default => {
15
+ :adapter => 'mysql',
16
+ :user => 'travis',
17
+ :database => 'monkey_mailer_test'
18
+ }
19
+ }
20
+ end
21
+
22
+ RSpec.configure do |config|
23
+
24
+ config.order = "random"
25
+
26
+ config.before(:suite) do
27
+ MonkeyMailer.loader
28
+ DatabaseCleaner.strategy = :transaction
29
+ DataMapper.auto_upgrade!
30
+ end
31
+
32
+ config.before(:each) do
33
+ DatabaseCleaner.start
34
+ end
35
+
36
+ config.after(:each) do
37
+ DatabaseCleaner.clean
38
+ end
39
+ end
@@ -0,0 +1,11 @@
1
+ require 'spawn'
2
+
3
+ MailQueue.extend(Spawn).spawner do |mail_queue|
4
+ mail_queue.to_name ||= 'Example User'
5
+ mail_queue.to_email ||= 'user@example.org'
6
+ mail_queue.from_name ||= 'Example Sender'
7
+ mail_queue.from_email ||= 'noreply@example.com'
8
+ mail_queue.subject ||= 'Hey you!'
9
+ mail_queue.body ||= "<html><h1>Title</h1><p>Just some text on the test email</p></html>"
10
+ mail_queue.priority ||= [MailUrgent, MailNormal, MailLow].sample
11
+ end
@@ -0,0 +1,14 @@
1
+ module MonkeyMailer
2
+ class TestAdapter
3
+
4
+ attr_accessor :sent_emails
5
+
6
+ def initialize
7
+ @sent_emails = []
8
+ end
9
+
10
+ def send_email(email)
11
+ @sent_emails << email
12
+ end
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mm-data_mapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Federico Saravia Barrantes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: monkey-mailer
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: data_mapper
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 2.12.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 2.12.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: dm-mysql-adapter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: database_cleaner
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.2.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: spawn
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.1.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.1.4
97
+ description: DataMapper loader for MonkeyMailer
98
+ email:
99
+ - fedesaravia+monkey-mailer@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - .gitignore
105
+ - .travis.yml
106
+ - Gemfile
107
+ - README.md
108
+ - UNLICENSE
109
+ - lib/mm-data_mapper.rb
110
+ - mm-data_mapper.gemspec
111
+ - spec/mm-data_mapper_spec.rb
112
+ - spec/spec_helper.rb
113
+ - spec/support/spawners.rb
114
+ - spec/support/test_adapter.rb
115
+ homepage: https://github.com/fsaravia/mm-data_mapper/
116
+ licenses:
117
+ - UNLICENSE
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.1.11
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: DataMapper loader for MonkeyMailer
139
+ test_files:
140
+ - spec/mm-data_mapper_spec.rb
141
+ - spec/spec_helper.rb
142
+ - spec/support/spawners.rb
143
+ - spec/support/test_adapter.rb