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 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