mailee 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Juan Maiz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Softa
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,64 @@
1
+ = Mailee - Email marketing para quem entende de tecnologia.
2
+ ==============
3
+
4
+ == O problema
5
+
6
+ Você está desenvolvendo um sistema (e-commerce, cms, erp...) e o seu cliente solicita a possibilidade de enviar e-mails promocionais, ou notícias, para diversos contatos. Por experiência própria, você sabe que enviar e-mails não é coisa para _scriptkiddies_, e que, de fato, não vale a pena o esforço de desenvolver todo um sistema que faça o envio, garanta a entrega, analise os retornos e também apresente resultados de tudo isso. O problema é que os sistemas que você conhece não permitem uma integração fácil e rápida com seus sistemas em Rails...
7
+
8
+ == A solução
9
+
10
+ Este plugin tem como objetivo manter os contatos da sua aplicação sincronizados com os contatos do Mailee (www.mailee.me) sem muito esforço. De fato, basta executar o método "sync_with_mailee" no seu modelo (clientes, contatos, pessoas...) que este irá automaticamente realizar as tarefas de inserir, atualizar, excluir e descadastrar via REST. No Mailee, seu cliente poderá então montar as mensagens e enviar para os contatos.
11
+
12
+ == Instalação
13
+
14
+ * Execute o seguinte comando em sua aplicação Rails:
15
+ > script/plugin install git@github.com:softa/mailee-api.git
16
+ * Adicione a seguinte linha de configuração em sua aplicação:
17
+ Mailee::Config.site = 'http://api.chave.subdominio.wizee.net'
18
+ O site você descobre entrando no Mailee e indo em Configurações > Integração > REST
19
+
20
+ Pronto!
21
+
22
+ == Uso
23
+
24
+ * Na mão (console)
25
+ Você pode usar a api do maile "na mão". Basta abrir o console e usar:
26
+ > ruby script/console
27
+ >> Contact.find(:all)
28
+ >> Contact.find(:first)
29
+ >> Contact.create(:name => 'Bertrand Russell', :email => 'russell@cambridge.edu.uk')
30
+ Mais exemplos você encontra(rá) na (futura) documentação da API.
31
+ * Com modelos (ActiveRecord)
32
+ Este plugin é feito para manter um modelo AciveRecord sincronizado com os contatos do Mailee. Para fazer isto, basta colocar o método "sync_with_mailee" em seu modelo. Se o seu modelo se chama "Contact", por exemplo, o código seria este:
33
+ =code
34
+ class Contact < ActiveRecord::Base
35
+ sync_with_mailee
36
+ end
37
+ A priori, o plugin espera que você tenha pelo menos um campo de email e pressupõe que o nome deste campo é "email". Se o campo da sua tabela não tem este nome, você pode fazer o seguinte:
38
+ =code
39
+ class Contact < ActiveRecord::Base
40
+ sync_with_mailee :email => :my_email_column
41
+ end
42
+ Onde "my_email_column" é a coluna que guarda o e-mail na sua tabela.
43
+ O plugin também pode manter o nome do seu contato sincronizado, bastando para isto ter um campo "name" que será mapeado por padrão, mas que também pode ser sobrescrito:
44
+ =code
45
+ class Contact < ActiveRecord::Base
46
+ sync_with_mailee :email => :my_email_column, :name => :my_name_column
47
+ end
48
+ Por fim, o plugin permite que o cadastro no Mailee seja condicionado a um campo booleano (o padrão é "news"), que corresponde ao "opt-in" (a escolha de receber ou não mensagens) do seu contato. Ou seja, se o valor do campo for false, o plugin não cadastrará o contato no Mailee, e se o contato já estiver cadastrado e o valor deste campo mudar para falso, o contato será descadastrado e _não_ poderá ser mais cadastrado no Mailee (normas de privacidade). Para mudar o campo, basta:
49
+ =code
50
+ class Contact < ActiveRecord::Base
51
+ sync_with_mailee :email => :my_email_column, :name => :my_name_column, :news => :do_you_really_accept_to_receive_our_newsletter
52
+ end
53
+ * Tarefas (rake)
54
+ Caso você já tenha itens cadastrados, é necessário adicionar estes contatos ao Mailee antes de mais nada. Para isso execute a tarefa rake:
55
+ > rake mailee:send CLASS=Contact
56
+ Onde "Contact" é o nome do seu modelo. Se você quer apenas enviar os contatos a partir de uma determinada data, você pode fazê-lo desta forma:
57
+ > rake mailee:send CLASS=Contact AFTER=5.days.ago
58
+ Neste caso, ele vai apenas sincronizar os contatos que foram atualizados (baseado no campo "updated_at") nos últimos 5 dias.
59
+ * Mas... como isso funciona, caso eu precise saber?
60
+ O plugin utiliza a API REST do Mailee para enviar dados, por isto cuide bem da sua URL - se alguém descobrir isso pode ser ruim. Para saber qual o contato na sua aplicação o plugin utiliza um campo disponível no Mailee chamado "internal_id" o qual recebe o "id" da sua tabela na criação. Este id é usado nas atualizações, descadastros e exclusões, então tome (ou avise seu cliente para tomar!) cuidado ao editar este campo na interface do Mailee.
61
+
62
+ == Dúvidas?
63
+
64
+ Qualquer dúvida, não hesite em falar conosco pelo e-mail suporte@mailee.me.
@@ -0,0 +1,64 @@
1
+ = Mailee - Email marketing para quem entende de tecnologia.
2
+ ==============
3
+
4
+ == O problema
5
+
6
+ Você está desenvolvendo um sistema (e-commerce, cms, erp...) e o seu cliente solicita a possibilidade de enviar e-mails promocionais, ou notícias, para diversos contatos. Por experiência própria, você sabe que enviar e-mails não é coisa para _scriptkiddies_, e que, de fato, não vale a pena o esforço de desenvolver todo um sistema que faça o envio, garanta a entrega, analise os retornos e também apresente resultados de tudo isso. O problema é que os sistemas que você conhece não permitem uma integração fácil e rápida com seus sistemas em Rails...
7
+
8
+ == A solução
9
+
10
+ Este plugin tem como objetivo manter os contatos da sua aplicação sincronizados com os contatos do Mailee (www.mailee.me) sem muito esforço. De fato, basta executar o método "sync_with_mailee" no seu modelo (clientes, contatos, pessoas...) que este irá automaticamente realizar as tarefas de inserir, atualizar, excluir e descadastrar via REST. No Mailee, seu cliente poderá então montar as mensagens e enviar para os contatos.
11
+
12
+ == Instalação
13
+
14
+ * Execute o seguinte comando em sua aplicação Rails:
15
+ > script/plugin install git@github.com:softa/mailee-api.git
16
+ * Adicione a seguinte linha de configuração em sua aplicação:
17
+ Mailee::Config.site = 'http://api.chave.subdominio.wizee.net'
18
+ O site você descobre entrando no Mailee e indo em Configurações > Integração > REST
19
+
20
+ Pronto!
21
+
22
+ == Uso
23
+
24
+ * Na mão (console)
25
+ Você pode usar a api do maile "na mão". Basta abrir o console e usar:
26
+ > ruby script/console
27
+ >> Contact.find(:all)
28
+ >> Contact.find(:first)
29
+ >> Contact.create(:name => 'Bertrand Russell', :email => 'russell@cambridge.edu.uk')
30
+ Mais exemplos você encontra(rá) na (futura) documentação da API.
31
+ * Com modelos (ActiveRecord)
32
+ Este plugin é feito para manter um modelo AciveRecord sincronizado com os contatos do Mailee. Para fazer isto, basta colocar o método "sync_with_mailee" em seu modelo. Se o seu modelo se chama "Contact", por exemplo, o código seria este:
33
+ =code
34
+ class Contact < ActiveRecord::Base
35
+ sync_with_mailee
36
+ end
37
+ A priori, o plugin espera que você tenha pelo menos um campo de email e pressupõe que o nome deste campo é "email". Se o campo da sua tabela não tem este nome, você pode fazer o seguinte:
38
+ =code
39
+ class Contact < ActiveRecord::Base
40
+ sync_with_mailee :email => :my_email_column
41
+ end
42
+ Onde "my_email_column" é a coluna que guarda o e-mail na sua tabela.
43
+ O plugin também pode manter o nome do seu contato sincronizado, bastando para isto ter um campo "name" que será mapeado por padrão, mas que também pode ser sobrescrito:
44
+ =code
45
+ class Contact < ActiveRecord::Base
46
+ sync_with_mailee :email => :my_email_column, :name => :my_name_column
47
+ end
48
+ Por fim, o plugin permite que o cadastro no Mailee seja condicionado a um campo booleano (o padrão é "news"), que corresponde ao "opt-in" (a escolha de receber ou não mensagens) do seu contato. Ou seja, se o valor do campo for false, o plugin não cadastrará o contato no Mailee, e se o contato já estiver cadastrado e o valor deste campo mudar para falso, o contato será descadastrado e _não_ poderá ser mais cadastrado no Mailee (normas de privacidade). Para mudar o campo, basta:
49
+ =code
50
+ class Contact < ActiveRecord::Base
51
+ sync_with_mailee :email => :my_email_column, :name => :my_name_column, :news => :do_you_really_accept_to_receive_our_newsletter
52
+ end
53
+ * Tarefas (rake)
54
+ Caso você já tenha itens cadastrados, é necessário adicionar estes contatos ao Mailee antes de mais nada. Para isso execute a tarefa rake:
55
+ > rake mailee:send CLASS=Contact
56
+ Onde "Contact" é o nome do seu modelo. Se você quer apenas enviar os contatos a partir de uma determinada data, você pode fazê-lo desta forma:
57
+ > rake mailee:send CLASS=Contact AFTER=5.days.ago
58
+ Neste caso, ele vai apenas sincronizar os contatos que foram atualizados (baseado no campo "updated_at") nos últimos 5 dias.
59
+ * Mas... como isso funciona, caso eu precise saber?
60
+ O plugin utiliza a API REST do Mailee para enviar dados, por isto cuide bem da sua URL - se alguém descobrir isso pode ser ruim. Para saber qual o contato na sua aplicação o plugin utiliza um campo disponível no Mailee chamado "internal_id" o qual recebe o "id" da sua tabela na criação. Este id é usado nas atualizações, descadastros e exclusões, então tome (ou avise seu cliente para tomar!) cuidado ao editar este campo na interface do Mailee.
61
+
62
+ == Dúvidas?
63
+
64
+ Qualquer dúvida, não hesite em falar conosco pelo e-mail suporte@mailee.me.
@@ -0,0 +1,53 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "mailee"
8
+ gem.summary = %Q{Gem de integração do Mailee.me}
9
+ gem.description = %Q{Permite sincronizar automaticamente seus modelos com o Mailee.me, inclusive com gerenciamento de optin.}
10
+ gem.email = "suporte@mailee.me"
11
+ gem.homepage = "http://help.mailee.me/integration_rails.html"
12
+ gem.authors = ["Juan Maiz"]
13
+ # gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
19
+ end
20
+
21
+ require 'rake/testtask'
22
+ Rake::TestTask.new(:test) do |test|
23
+ test.libs << 'lib' << 'test'
24
+ test.pattern = 'test/**/test_*.rb'
25
+ test.verbose = true
26
+ end
27
+
28
+ begin
29
+ require 'rcov/rcovtask'
30
+ Rcov::RcovTask.new do |test|
31
+ test.libs << 'test'
32
+ test.pattern = 'test/**/test_*.rb'
33
+ test.verbose = true
34
+ end
35
+ rescue LoadError
36
+ task :rcov do
37
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
38
+ end
39
+ end
40
+
41
+ task :test => :check_dependencies
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "mailee #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/init.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'mailee'
2
+ ActiveRecord::Base.send(:include, Mailee::Sync)
3
+ #ActionController::Base.send(:include, Softa::Uses::DataGrid)
4
+ #ActionController::Base.send(:include, Softa::DataGrid::Uses)
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,151 @@
1
+ module Mailee
2
+ class Config < ActiveResource::Base
3
+ # O self.site tem q ser configurado no environment!
4
+ end
5
+ class Contact < Config
6
+ def self.find_by_internal_id iid
7
+ find(:first, :params => {:internal_id => iid})
8
+ end
9
+ def unsubscribe(data={})
10
+ #E.g. data --> {:reason => 'Trip to nowhere', :spam => false}
11
+ put(:unsubscribe, :unsubscribe => {:reason => 'Motivo não especificado'}.merge(data))
12
+ end
13
+ end
14
+ class List < Config
15
+ end
16
+
17
+ module Sync
18
+ def self.included(base) # :nodoc:
19
+ base.extend ClassMethods
20
+ end
21
+
22
+ module ClassMethods
23
+ def sync_with_mailee(options = {})
24
+ unless syncd? # don't let AR call this twice
25
+ cattr_accessor :sync_options
26
+ after_create :create_in_mailee
27
+ after_update :update_in_mailee
28
+ after_destroy :destroy_in_mailee
29
+ self.sync_options = {:email => :email, :name => :name, :news => :news}.merge(options) #options[:with] || :deleted_at
30
+ unless self.column_names.include?(self.sync_options[:email].to_s)
31
+ raise "Campo #{sync_options[:email]} não existe em #{new.class}."
32
+ end
33
+ unless self.column_names.include?(self.sync_options[:name].to_s)
34
+ self.sync_options[:name] = nil
35
+ end
36
+ unless self.column_names.include?(self.sync_options[:news].to_s)
37
+ self.sync_options[:news] = nil
38
+ end
39
+ end
40
+ include InstanceMethods
41
+ end
42
+
43
+ def syncd?
44
+ self.included_modules.include?(InstanceMethods)
45
+ end
46
+ end
47
+
48
+
49
+ module InstanceMethods #:nodoc:
50
+ def self.included(base) # :nodoc:
51
+ base.extend ClassMethods
52
+ end
53
+
54
+ def create_in_mailee
55
+ return if( sync_options[:news] and ! send(sync_options[:news])) # Não cria se houver o campo booleano e ele for falso
56
+ self.class.benchmark "Criando contato no Mailee" do
57
+ contact = Mailee::Contact.new
58
+ contact.internal_id = id
59
+ contact.email = send(sync_options[:email])
60
+ contact.name = send(sync_options[:name]) if sync_options[:name]
61
+ contact.save
62
+ end
63
+ rescue
64
+ logger.warn "MAILEE-API: Falhou ao criar o contato #{id} no Mailee"
65
+ end
66
+
67
+ def update_in_mailee
68
+ self.class.benchmark "Atualizando contato no Mailee" do
69
+ contact = Mailee::Contact.find_by_internal_id id
70
+ if contact
71
+ #Se o contato existe e o booleano foi desmarcado, realiza um UNSUBSCRIBE
72
+ if sync_options[:news] and (! send(sync_options[:news]))
73
+ unsubscribe_in_mailee(contact)
74
+ else
75
+ contact.email = send(sync_options[:email])
76
+ contact.name = send(sync_options[:name]) if sync_options[:name]
77
+ contact.save
78
+ end
79
+ else
80
+ create_in_mailee # Se não achou o contato tem q inserir.
81
+ end
82
+ end
83
+ rescue
84
+ logger.warn "MAILEE-API: Falhou ao atualizar o contato #{id} no Mailee"
85
+ end
86
+
87
+ def destroy_in_mailee contact=nil
88
+ self.class.benchmark "Excluindo contato no Mailee" do
89
+ contact ||= Mailee::Contact.find_by_internal_id id
90
+ contact.destroy
91
+ end
92
+ rescue
93
+ logger.warn "MAILEE-API: Falhou ao excluir o contato #{id} no Mailee"
94
+ end
95
+
96
+ def unsubscribe_in_mailee contact=nil
97
+ self.class.benchmark "Descadastrando contato no Mailee" do
98
+ contact ||= Mailee::Contact.find_by_internal_id id
99
+ contact.unsubscribe
100
+ end
101
+ rescue
102
+ logger.warn "MAILEE-API: Falhou ao descadastrar o contato #{id} no Mailee"
103
+ end
104
+
105
+ module ClassMethods
106
+ # Sincroniza todos os itens do modelo com Mailee.
107
+ # Permite que se passe um datetime para enviar apenas os contatos atualizados depois desta data
108
+ # Permite o uso de um bloco, que receberá o item do modelo e o item do Mailee associado a este.
109
+ # Ex: Contact.send_all_to_mailee{|i,im| im.address = i.endereco; im.save }
110
+ # Importante: este método apenas envia os contatos, mas não recebe.
111
+ # Para receber contatos, o ideal é fazer uma exportação no Mailee e realizar uma importação deste arquivo CSV no seu sistema.
112
+
113
+ def send_all_to_mailee(after=nil)
114
+ items = after ? all(:conditions => ["updated_at >= ?", after]) : all
115
+ for item in items
116
+ begin
117
+ contact = Mailee::Contact.find_by_internal_id item.id
118
+ if contact and sync_options[:news] and ! item.send(sync_options[:news])
119
+ contact.unsubscribe
120
+ yield item, contact if block_given?
121
+ next
122
+ end
123
+ unless contact
124
+ next if sync_options[:news] and ! item.send(sync_options[:news])
125
+ contact = Mailee::Contact.new
126
+ contact.internal_id = item.id
127
+ end
128
+ contact.email = item.send(sync_options[:email])
129
+ contact.name = item.send(sync_options[:name]) if sync_options[:name]
130
+ contact.save
131
+ yield item, contact if block_given?
132
+ rescue
133
+ logger.warn "MAILEE-API: Falhou ao enviar o contato #{id} ao Mailee"
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ end
140
+
141
+
142
+ end
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+ end
151
+
@@ -0,0 +1,56 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{mailee}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Juan Maiz"]
12
+ s.date = %q{2010-07-28}
13
+ s.description = %q{Permite sincronizar automaticamente seus modelos com o Mailee.me, inclusive com gerenciamento de optin.}
14
+ s.email = %q{suporte@mailee.me}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ "LICENSE",
22
+ "MIT-LICENSE",
23
+ "README.markdown",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "init.rb",
28
+ "install.rb",
29
+ "lib/mailee.rb",
30
+ "mailee.gemspec",
31
+ "pkg/mailee-0.1.0.gem",
32
+ "tasks/mailee_tasks.rake",
33
+ "test/helper.rb",
34
+ "test/test_mailee.rb"
35
+ ]
36
+ s.homepage = %q{http://help.mailee.me/integration_rails.html}
37
+ s.rdoc_options = ["--charset=UTF-8"]
38
+ s.require_paths = ["lib"]
39
+ s.rubygems_version = %q{1.3.6}
40
+ s.summary = %q{Gem de integração do Mailee.me}
41
+ s.test_files = [
42
+ "test/helper.rb",
43
+ "test/test_mailee.rb"
44
+ ]
45
+
46
+ if s.respond_to? :specification_version then
47
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
+ else
52
+ end
53
+ else
54
+ end
55
+ end
56
+
Binary file
@@ -0,0 +1,28 @@
1
+ def obtain_class
2
+ class_name = ENV['CLASS'] || ENV['class']
3
+ raise "Deve especificar CLASS" unless class_name
4
+ @klass = Object.const_get(class_name)
5
+ end
6
+
7
+ def obtain_after
8
+ after = ENV['AFTER'] || ENV['after']
9
+ @after = after ? eval(after) : nil
10
+ end
11
+
12
+ namespace :mailee do
13
+ desc <<-DESC
14
+ Sincroniza os items da tabela CLASS com os contatos do Mailee.
15
+ Você pode também especificar o env AFTER para enviar apenas os contatos atualizados após uma data.
16
+ E.g. rake mailee:send CLASS=Contact AFTER=1.day.
17
+ DESC
18
+ task :send => :environment do
19
+ klass = obtain_class
20
+ after = obtain_after
21
+ raise "A classe #{klass.name} deve ser sincronizada com o Mailee. Adicione o código 'sync_with_mailee'" if ! klass.syncd?
22
+ print "Enviando\n"
23
+ klass.send_all_to_mailee(after) do
24
+ print "."
25
+ STDOUT.flush
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'mailee'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestMailee < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mailee
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Juan Maiz
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-07-28 00:00:00 -03:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Permite sincronizar automaticamente seus modelos com o Mailee.me, inclusive com gerenciamento de optin.
22
+ email: suporte@mailee.me
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - LICENSE
29
+ - README.markdown
30
+ - README.rdoc
31
+ files:
32
+ - LICENSE
33
+ - MIT-LICENSE
34
+ - README.markdown
35
+ - README.rdoc
36
+ - Rakefile
37
+ - VERSION
38
+ - init.rb
39
+ - install.rb
40
+ - lib/mailee.rb
41
+ - mailee.gemspec
42
+ - pkg/mailee-0.1.0.gem
43
+ - tasks/mailee_tasks.rake
44
+ - test/helper.rb
45
+ - test/test_mailee.rb
46
+ has_rdoc: true
47
+ homepage: http://help.mailee.me/integration_rails.html
48
+ licenses: []
49
+
50
+ post_install_message:
51
+ rdoc_options:
52
+ - --charset=UTF-8
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.3.6
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: "Gem de integra\xC3\xA7\xC3\xA3o do Mailee.me"
76
+ test_files:
77
+ - test/helper.rb
78
+ - test/test_mailee.rb