mailee 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +20 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +64 -0
- data/README.rdoc +64 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/init.rb +4 -0
- data/install.rb +1 -0
- data/lib/mailee.rb +151 -0
- data/mailee.gemspec +56 -0
- data/pkg/mailee-0.1.0.gem +0 -0
- data/tasks/mailee_tasks.rake +28 -0
- data/test/helper.rb +10 -0
- data/test/test_mailee.rb +7 -0
- metadata +78 -0
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.
|
data/MIT-LICENSE
ADDED
@@ -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.
|
data/README.markdown
ADDED
@@ -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.
|
data/README.rdoc
ADDED
@@ -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.
|
data/Rakefile
ADDED
@@ -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
data/install.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Install hook code here
|
data/lib/mailee.rb
ADDED
@@ -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
|
+
|
data/mailee.gemspec
ADDED
@@ -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
|
data/test/helper.rb
ADDED
data/test/test_mailee.rb
ADDED
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
|