mailee 0.5.0 → 0.6.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/Gemfile +12 -0
- data/Gemfile.lock +79 -0
- data/README.markdown +154 -112
- data/Rakefile +12 -3
- data/VERSION +1 -1
- data/app/Gemfile +1 -1
- data/app/Gemfile.lock +2 -2
- data/lib/mailee/active_record.rb +0 -4
- data/lib/mailee/active_resource.rb +8 -1
- data/lib/mailee/railties.rb +1 -1
- data/mailee.gemspec +106 -94
- data/pkg/mailee-0.5.1.gem +0 -0
- data/spec/ar_spec_helper.rb +1 -0
- data/spec/mailee-api_spec.rb +11 -3
- metadata +122 -19
- data/.gitignore +0 -1
- data/README.rdoc +0 -64
data/Gemfile
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
source "http://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gem "actionmailer", "~> 3.0"
|
|
4
|
+
gem "activeresource", "~> 3.0"
|
|
5
|
+
gem "activerecord", "~> 3.0"
|
|
6
|
+
|
|
7
|
+
group :development, :test do
|
|
8
|
+
gem "rspec", "~> 2.6.0"
|
|
9
|
+
gem "bundler", "~> 1.0.0"
|
|
10
|
+
gem "jeweler", "~> 1.6.4"
|
|
11
|
+
gem "sqlite3", "~> 1.3.4"
|
|
12
|
+
end
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: http://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
abstract (1.0.0)
|
|
5
|
+
actionmailer (3.0.10)
|
|
6
|
+
actionpack (= 3.0.10)
|
|
7
|
+
mail (~> 2.2.19)
|
|
8
|
+
actionpack (3.0.10)
|
|
9
|
+
activemodel (= 3.0.10)
|
|
10
|
+
activesupport (= 3.0.10)
|
|
11
|
+
builder (~> 2.1.2)
|
|
12
|
+
erubis (~> 2.6.6)
|
|
13
|
+
i18n (~> 0.5.0)
|
|
14
|
+
rack (~> 1.2.1)
|
|
15
|
+
rack-mount (~> 0.6.14)
|
|
16
|
+
rack-test (~> 0.5.7)
|
|
17
|
+
tzinfo (~> 0.3.23)
|
|
18
|
+
activemodel (3.0.10)
|
|
19
|
+
activesupport (= 3.0.10)
|
|
20
|
+
builder (~> 2.1.2)
|
|
21
|
+
i18n (~> 0.5.0)
|
|
22
|
+
activerecord (3.0.10)
|
|
23
|
+
activemodel (= 3.0.10)
|
|
24
|
+
activesupport (= 3.0.10)
|
|
25
|
+
arel (~> 2.0.10)
|
|
26
|
+
tzinfo (~> 0.3.23)
|
|
27
|
+
activeresource (3.0.10)
|
|
28
|
+
activemodel (= 3.0.10)
|
|
29
|
+
activesupport (= 3.0.10)
|
|
30
|
+
activesupport (3.0.10)
|
|
31
|
+
arel (2.0.10)
|
|
32
|
+
builder (2.1.2)
|
|
33
|
+
diff-lcs (1.1.3)
|
|
34
|
+
erubis (2.6.6)
|
|
35
|
+
abstract (>= 1.0.0)
|
|
36
|
+
git (1.2.5)
|
|
37
|
+
i18n (0.5.0)
|
|
38
|
+
jeweler (1.6.4)
|
|
39
|
+
bundler (~> 1.0)
|
|
40
|
+
git (>= 1.2.5)
|
|
41
|
+
rake
|
|
42
|
+
mail (2.2.19)
|
|
43
|
+
activesupport (>= 2.3.6)
|
|
44
|
+
i18n (>= 0.4.0)
|
|
45
|
+
mime-types (~> 1.16)
|
|
46
|
+
treetop (~> 1.4.8)
|
|
47
|
+
mime-types (1.16)
|
|
48
|
+
polyglot (0.3.2)
|
|
49
|
+
rack (1.2.4)
|
|
50
|
+
rack-mount (0.6.14)
|
|
51
|
+
rack (>= 1.0.0)
|
|
52
|
+
rack-test (0.5.7)
|
|
53
|
+
rack (>= 1.0)
|
|
54
|
+
rake (0.9.2)
|
|
55
|
+
rspec (2.6.0)
|
|
56
|
+
rspec-core (~> 2.6.0)
|
|
57
|
+
rspec-expectations (~> 2.6.0)
|
|
58
|
+
rspec-mocks (~> 2.6.0)
|
|
59
|
+
rspec-core (2.6.4)
|
|
60
|
+
rspec-expectations (2.6.0)
|
|
61
|
+
diff-lcs (~> 1.1.2)
|
|
62
|
+
rspec-mocks (2.6.0)
|
|
63
|
+
sqlite3 (1.3.4)
|
|
64
|
+
treetop (1.4.10)
|
|
65
|
+
polyglot
|
|
66
|
+
polyglot (>= 0.3.1)
|
|
67
|
+
tzinfo (0.3.30)
|
|
68
|
+
|
|
69
|
+
PLATFORMS
|
|
70
|
+
ruby
|
|
71
|
+
|
|
72
|
+
DEPENDENCIES
|
|
73
|
+
actionmailer (~> 3.0)
|
|
74
|
+
activerecord (~> 3.0)
|
|
75
|
+
activeresource (~> 3.0)
|
|
76
|
+
bundler (~> 1.0.0)
|
|
77
|
+
jeweler (~> 1.6.4)
|
|
78
|
+
rspec (~> 2.6.0)
|
|
79
|
+
sqlite3 (~> 1.3.4)
|
data/README.markdown
CHANGED
|
@@ -1,172 +1,214 @@
|
|
|
1
|
-
Mailee - Email marketing para quem entende de tecnologia.
|
|
2
|
-
==============
|
|
1
|
+
# Mailee - Email marketing para quem entende de tecnologia.
|
|
3
2
|
|
|
4
|
-
O problema
|
|
5
|
-
=
|
|
3
|
+
## O problema
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
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.
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
=
|
|
7
|
+
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...
|
|
11
8
|
|
|
12
|
-
|
|
9
|
+
## A solução
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
=
|
|
11
|
+
Esta gem tem como objetivo manter os contatos da sua aplicação sincronizados com os contatos do Mailee (www.mailee.me) sem muito esforço.
|
|
16
12
|
|
|
17
|
-
|
|
18
|
-
* Criar, atualizar, buscar e excluir contatos.
|
|
19
|
-
* Importar contatos com nome e email.
|
|
20
|
-
* Criar, atualizar, buscar e excluir listas.
|
|
21
|
-
* Criar, atualizar, buscar e excluir templates.
|
|
22
|
-
* Criar rascunhos, enviar testes e enviar mensagens agora ou para uma data futura. O envio de mensagens permite enviar para uma lista, para um conjunto de emails, definindo o html na mão ou usando um template do Mailee.me e definindo áreas editáveis e de repetições.
|
|
23
|
-
* Buscar datos dos relatórios.
|
|
24
|
-
* Integrar com ActiveRecord (com ou sem Rails) e fazer um modelo sincronizar automaticamente com o Mailee.me.
|
|
25
|
-
* Integrar com ActionMailer (com ou sem Rails) e fazer os mailers enviarem as mensagens pelo Mailee.me.
|
|
13
|
+
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.
|
|
26
14
|
|
|
27
|
-
|
|
28
|
-
=
|
|
15
|
+
## O que posso fazer com a gem?
|
|
29
16
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
17
|
+
* Simplesmente utilizar as classes do Mailee para:
|
|
18
|
+
* Criar, atualizar, buscar e excluir contatos.
|
|
19
|
+
* Importar contatos com nome e email.
|
|
20
|
+
* Criar, atualizar, buscar e excluir listas.
|
|
21
|
+
* Criar, atualizar, buscar e excluir templates.
|
|
22
|
+
* Criar rascunhos, enviar testes e enviar mensagens agora ou para uma data futura. O envio de mensagens permite enviar para uma lista, para um conjunto de emails, definindo o html na mão ou usando um template do Mailee.me e definindo áreas editáveis e de repetições.
|
|
23
|
+
* Buscar datos dos relatórios.
|
|
24
|
+
* Integrar com ActiveRecord (com ou sem Rails) e fazer um modelo sincronizar automaticamente com o Mailee.me.
|
|
25
|
+
* Integrar com ActionMailer (com ou sem Rails) e fazer os mailers enviarem as mensagens pelo Mailee.me.
|
|
36
26
|
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
## Instalação
|
|
28
|
+
|
|
29
|
+
Adicione a seguinte linha ao seu Gemfile:
|
|
30
|
+
|
|
31
|
+
~~~.ruby
|
|
32
|
+
gem 'mailee'
|
|
33
|
+
~~~
|
|
34
|
+
|
|
35
|
+
E execute o bundle:
|
|
36
|
+
|
|
37
|
+
bundle install
|
|
38
|
+
|
|
39
|
+
Uma vez instalado, para configurar, execute:
|
|
40
|
+
|
|
41
|
+
rails g mailee_rails:setup
|
|
42
|
+
|
|
43
|
+
Este comando irá solicitar sua URL da API e criar um initializer com toda a configuração necessária. A URL da API você descobre entrando no Mailee e indo em **Configurações > Integração > REST**
|
|
39
44
|
|
|
40
|
-
|
|
45
|
+
Pronto!
|
|
46
|
+
|
|
47
|
+
## Compatibilidade
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
=
|
|
49
|
+
Rails 3. 'Nuff said. Se você precisa de suporte ao Rails 2, baixe a versão 0.1.0, mas ela possui muito menos funcionalidades do que a versão atual.
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
## Uso
|
|
46
52
|
|
|
47
|
-
|
|
48
|
-
=
|
|
53
|
+
### Na mão (console)
|
|
49
54
|
|
|
50
|
-
|
|
55
|
+
Você pode usar a api do maile "na mão". Basta abrir o console e usar:
|
|
51
56
|
|
|
52
|
-
Você pode usar a api do maile "na mão". Basta abrir o console e usar:
|
|
53
|
-
= code
|
|
54
57
|
ruby script/console
|
|
58
|
+
|
|
55
59
|
include Mailee
|
|
60
|
+
|
|
56
61
|
Contact.find(:all)
|
|
57
62
|
Contact.find(:first)
|
|
63
|
+
|
|
58
64
|
Contact.search('russell')
|
|
65
|
+
|
|
59
66
|
Contact.find_by_internal_id(789)
|
|
60
67
|
Contact.find_by_email('russell@cambridge.edu.uk')
|
|
68
|
+
|
|
61
69
|
Contact.create(:name => 'Bertrand Russell', :email => 'russell@cambridge.edu.uk')
|
|
62
70
|
Contact.create(:email => 'ludwig@wittgenstein.edu.uk', :dynamic_attributes => {:influence => 'Frege'})
|
|
71
|
+
|
|
72
|
+
Contact.find_by_internal_id(789).put(:subscribe, :list => {:name => 'Analytic Philosophers'})
|
|
73
|
+
Contact.find_by_internal_id(789).put(:unsubscribe, :unsubscribe => {:reason => 'Email too long'})
|
|
74
|
+
|
|
63
75
|
List.find(:all)
|
|
64
76
|
List.find(:first)
|
|
65
77
|
List.create(:name => 'My List')
|
|
78
|
+
|
|
66
79
|
Template.find(:all)
|
|
67
80
|
Template.find(:first)
|
|
68
81
|
Template.create(:title => 'My Template', :html => File.read('mytemplate.html'))
|
|
82
|
+
|
|
69
83
|
# Message with HTML and list
|
|
70
84
|
message = Message.create :title => "Title", :subject => "Subject", :from_name => "Rorty", :from_email => "rorty@princeton.us", :html => File.read('myhtml.html'), :list_id => 987
|
|
85
|
+
|
|
71
86
|
# Message with emails and template (with edits & repeats)
|
|
72
87
|
message = Message.create :title => "Title", :subject => "Subject", :from_name => "Rorty", :from_email => "rorty@princeton.us", :template_id => 765, :edits => {:greeting => 'Hi Davidson!'}, :repeats => {:news => ['A good news', 'A bad news'], :emails => 'davidson@some.com davidson@another.com'}
|
|
73
88
|
message.test([44,55,66])
|
|
74
89
|
message.ready # send it now
|
|
75
90
|
message.ready(10.days.from_now)
|
|
76
91
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
92
|
+
### Com modelos (ActiveRecord)
|
|
93
|
+
|
|
94
|
+
Esta gem é feita para manter um modelo AciveRecord sincronizado com os contatos do Mailee.
|
|
95
|
+
|
|
96
|
+
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:
|
|
97
|
+
|
|
98
|
+
~~~.ruby
|
|
99
|
+
class Contact < ActiveRecord::Base
|
|
100
|
+
sync_with_mailee
|
|
101
|
+
end
|
|
102
|
+
~~~
|
|
103
|
+
|
|
104
|
+
A priori, a gem espera que você tenha pelo menos os campos de email e optins, e pressupõe que estes campos se chamem `email` e `news`. Se os campos da sua tabela não tem estes nomes, você pode fazer o seguinte:
|
|
105
|
+
|
|
106
|
+
~~~.ruby
|
|
107
|
+
class Contact < ActiveRecord::Base
|
|
108
|
+
sync_with_mailee :email => :my_email_column, :news => :my_optin_column
|
|
109
|
+
end
|
|
110
|
+
~~~
|
|
111
|
+
|
|
112
|
+
Onde `my_email_column` é a coluna que guarda o e-mail na sua tabela e `my_optin_column` o booleano que guarda o optin.
|
|
113
|
+
|
|
114
|
+
A gem 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:
|
|
115
|
+
|
|
116
|
+
~~~.ruby
|
|
117
|
+
class Contact < ActiveRecord::Base
|
|
118
|
+
sync_with_mailee :name => :my_name_column
|
|
119
|
+
end
|
|
120
|
+
~~~
|
|
121
|
+
|
|
122
|
+
Se o valor do campo `news` (ou o que você utilizar para optin) for `false`, a gem não cadastrará o contato no Mailee.
|
|
123
|
+
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).
|
|
124
|
+
Se ele estiver `falso` e mudar para `verdadeiro`, ele irá cadastrá-lo.
|
|
125
|
+
|
|
126
|
+
~~~.ruby
|
|
127
|
+
class Contact < ActiveRecord::Base
|
|
128
|
+
sync_with_mailee :list => "Nome da sua lista"
|
|
129
|
+
end
|
|
130
|
+
~~~
|
|
131
|
+
|
|
132
|
+
Você também pode (e a gente recomenda que você o faça) informar a lista na qual você quer que o contato seja inscrito quando ele for cadastrado no Mailee.me. Assim, quando você for criar uma campanha todos seus contatos cadastrados pelo seu sistema já estarão em uma lista. Aí é só enviar para esta lista e pronto.
|
|
133
|
+
|
|
134
|
+
### Com mailers (ActionMailer)
|
|
103
135
|
|
|
104
|
-
|
|
136
|
+
Esta gem permite que você utilize o Mailee.me como meio de enviar suas mensagens sem precisar configurar um servidor smtp ou algo pareceido.
|
|
105
137
|
|
|
106
|
-
|
|
138
|
+
Você pode optar por enviar todas as mensagens por ele, ou só as mensagens de determinados mailers.
|
|
139
|
+
|
|
140
|
+
Para a configuração global, adicione a seguinte linha ao seu arquivo de ambiente (`config/environments/production.rb` ou `development.rb`):
|
|
107
141
|
|
|
108
|
-
|
|
109
|
-
|
|
142
|
+
~~~.ruby
|
|
143
|
+
config.action_mailer.delivery_method = Mailee::Mailer
|
|
144
|
+
~~~
|
|
110
145
|
|
|
111
|
-
|
|
146
|
+
Agora, se você quer enviar apenas mensagens de um certo mailer pelo Mailee, basta adicionar o método `send_with_mailee` em cada um:
|
|
112
147
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
148
|
+
~~~.ruby
|
|
149
|
+
class Notifications < ActionMailer::Base
|
|
150
|
+
send_with_mailee
|
|
151
|
+
...
|
|
152
|
+
end
|
|
153
|
+
~~~
|
|
118
154
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
155
|
+
É importante definir o from com o formato completo:
|
|
156
|
+
|
|
157
|
+
~~~.ruby
|
|
158
|
+
class Notifications < ActionMailer::Base
|
|
159
|
+
default :from => "Plato <plato@liceum.gr>
|
|
160
|
+
...
|
|
161
|
+
end
|
|
162
|
+
~~~
|
|
163
|
+
|
|
164
|
+
Ao enviar uma mensagem, você pode também optar por enviá-la agora ou no futuro:
|
|
165
|
+
|
|
166
|
+
~~~.ruby
|
|
167
|
+
class Notifications < ActionMailer::Base
|
|
168
|
+
def signup(client, date=Time.now)
|
|
169
|
+
mail :date => date, :to => client.email
|
|
170
|
+
end
|
|
171
|
+
def feedback(client, date=Time.now)
|
|
172
|
+
mail :date => date, :to => client.email
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
~~~
|
|
176
|
+
|
|
139
177
|
Notifications.signup(client).deliver
|
|
140
178
|
Notifications.feedback(client, 3.days.from_now).deliver
|
|
141
179
|
|
|
142
|
-
|
|
180
|
+
Por fim, ao enviar uma mensagem, a gem adiciona um método que representa a mensagem no Mailee.me, veja:
|
|
143
181
|
|
|
144
|
-
= code
|
|
145
182
|
mail = Notifications.signup(client).deliver
|
|
146
|
-
mail.mailee_message.id
|
|
147
|
-
mail.mailee_message.html
|
|
183
|
+
mail.mailee_message.id # Retorna o id
|
|
184
|
+
mail.mailee_message.html # Retorna o html
|
|
148
185
|
# e assim por diante...
|
|
149
186
|
|
|
150
|
-
|
|
187
|
+
Isto é útil, pois você já pode monitorar os resultados com este id:
|
|
151
188
|
|
|
152
|
-
= code
|
|
153
189
|
mail = Notifications.signup(client).deliver
|
|
154
190
|
Mailee::Report.find(mail.mailee_message.id)
|
|
155
191
|
|
|
156
|
-
|
|
192
|
+
### Tarefas (rake)
|
|
193
|
+
|
|
194
|
+
Caso você já tenha itens cadastrados, é necessário adicionar estes contatos ao Mailee antes de mais nada. Para isso execute a tarefa rake:
|
|
195
|
+
|
|
196
|
+
$ rake mailee:send CLASS=Contact
|
|
197
|
+
|
|
198
|
+
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:
|
|
199
|
+
|
|
200
|
+
$ rake mailee:send CLASS=Contact AFTER=5.days.ago
|
|
201
|
+
|
|
202
|
+
Neste caso, ele vai apenas sincronizar os contatos que foram atualizados (baseado no campo `updated_at`) nos últimos 5 dias.
|
|
203
|
+
|
|
204
|
+
## Cuidado!
|
|
157
205
|
|
|
158
|
-
|
|
159
|
-
> rake mailee:send CLASS=Contact
|
|
160
|
-
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:
|
|
161
|
-
> rake mailee:send CLASS=Contact AFTER=5.days.ago
|
|
162
|
-
Neste caso, ele vai apenas sincronizar os contatos que foram atualizados (baseado no campo "updated_at") nos últimos 5 dias.
|
|
206
|
+
A gem utiliza a API REST do Mailee para enviar dados, por isto cuide bem da sua URL - se alguém descobrir isso pode ser ruim.
|
|
163
207
|
|
|
164
|
-
|
|
165
|
-
=
|
|
208
|
+
Para saber qual o contato na sua aplicação a gem utiliza um campo disponível no Mailee chamado `internal_id` o qual recebe o `id` da sua tabela na criação.
|
|
166
209
|
|
|
167
|
-
|
|
210
|
+
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.
|
|
168
211
|
|
|
169
|
-
Dúvidas?
|
|
170
|
-
=
|
|
212
|
+
## Dúvidas?
|
|
171
213
|
|
|
172
|
-
|
|
214
|
+
Qualquer dúvida, não hesite em falar conosco pelo e-mail suporte@mailee.me, pelo twitter @maileeme ou pelo IRC #maileeme.
|
data/Rakefile
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
1
3
|
require 'rubygems'
|
|
4
|
+
require 'bundler'
|
|
5
|
+
begin
|
|
6
|
+
Bundler.setup(:default, :development)
|
|
7
|
+
rescue Bundler::BundlerError => e
|
|
8
|
+
$stderr.puts e.message
|
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
|
10
|
+
exit e.status_code
|
|
11
|
+
end
|
|
2
12
|
require 'rake'
|
|
3
13
|
|
|
4
14
|
begin
|
|
5
15
|
require 'jeweler'
|
|
6
16
|
Jeweler::Tasks.new do |gem|
|
|
7
17
|
gem.name = "mailee"
|
|
8
|
-
gem.summary = %Q{Gem
|
|
18
|
+
gem.summary = %Q{Gem para uso da API do Mailee.me}
|
|
9
19
|
gem.description = %Q{Permite sincronizar automaticamente seus modelos com o Mailee.me, inclusive com gerenciamento de optin.}
|
|
10
20
|
gem.email = "suporte@mailee.me"
|
|
11
21
|
gem.homepage = "http://help.mailee.me/integration_rails.html"
|
|
12
22
|
gem.authors = ["Juan Maiz"]
|
|
13
|
-
#
|
|
14
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
|
23
|
+
# dependencies defined in Gemfile
|
|
15
24
|
end
|
|
16
25
|
Jeweler::GemcutterTasks.new
|
|
17
26
|
rescue LoadError
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.6.0
|
data/app/Gemfile
CHANGED
data/app/Gemfile.lock
CHANGED
|
@@ -38,7 +38,7 @@ GEM
|
|
|
38
38
|
activesupport (>= 2.3.6)
|
|
39
39
|
mime-types
|
|
40
40
|
treetop (>= 1.4.5)
|
|
41
|
-
mailee (0.
|
|
41
|
+
mailee (0.5.0)
|
|
42
42
|
mime-types (1.16)
|
|
43
43
|
polyglot (0.3.1)
|
|
44
44
|
rack (1.2.1)
|
|
@@ -70,6 +70,6 @@ PLATFORMS
|
|
|
70
70
|
ruby
|
|
71
71
|
|
|
72
72
|
DEPENDENCIES
|
|
73
|
-
mailee (= 0.
|
|
73
|
+
mailee (= 0.5.0)
|
|
74
74
|
rails (= 3.0.0)
|
|
75
75
|
sqlite3-ruby
|
data/lib/mailee/active_record.rb
CHANGED
|
@@ -43,10 +43,6 @@ module Mailee
|
|
|
43
43
|
unless self.column_names.include?(self.sync_options[:news].to_s)
|
|
44
44
|
self.sync_options[:news] = nil
|
|
45
45
|
end
|
|
46
|
-
if self.sync_options[:list]
|
|
47
|
-
lists = List.find(:all).map(&:name)
|
|
48
|
-
raise "A lista '#{self.sync_options[:list]}' não existe no Mailee.me." unless lists.include?(self.sync_options[:list])
|
|
49
|
-
end
|
|
50
46
|
end
|
|
51
47
|
include InstanceMethods
|
|
52
48
|
end
|
|
@@ -41,7 +41,14 @@ module Mailee
|
|
|
41
41
|
put(:unsubscribe, :unsubscribe => {:reason => 'Motivo não especificado'}.merge(data))
|
|
42
42
|
end
|
|
43
43
|
def subscribe(list)
|
|
44
|
-
|
|
44
|
+
print "Warning: Mailee::Contact.subscribe will be deprecated. Use Mailee::Contact.list_subscribe instead."
|
|
45
|
+
put(:list_subscribe, :list => list)
|
|
46
|
+
end
|
|
47
|
+
def list_subscribe(list)
|
|
48
|
+
put(:list_subscribe, :list => list)
|
|
49
|
+
end
|
|
50
|
+
def list_unsubscribe(list)
|
|
51
|
+
put(:list_unsubscribe, :list => list)
|
|
45
52
|
end
|
|
46
53
|
end
|
|
47
54
|
|
data/lib/mailee/railties.rb
CHANGED
|
@@ -21,7 +21,7 @@ class MaileeRails < Rails::Railtie
|
|
|
21
21
|
puts "Invalid URL. Please try again:"
|
|
22
22
|
url = readline.gsub(/\n/,'').gsub(/\s+/, '')
|
|
23
23
|
else
|
|
24
|
-
puts "I think need support. Please talk to us on IRC (#maileeme) or send an email to suporte@mailee.me"
|
|
24
|
+
puts "I think you need support. Please talk to us on IRC (#maileeme) or send an email to suporte@mailee.me"
|
|
25
25
|
exit
|
|
26
26
|
end
|
|
27
27
|
end
|
data/mailee.gemspec
CHANGED
|
@@ -1,125 +1,137 @@
|
|
|
1
1
|
# Generated by jeweler
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{mailee}
|
|
8
|
-
s.version = "0.
|
|
8
|
+
s.version = "0.6.0"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Juan Maiz"]
|
|
12
|
-
s.date = %q{2011-
|
|
12
|
+
s.date = %q{2011-10-21}
|
|
13
13
|
s.description = %q{Permite sincronizar automaticamente seus modelos com o Mailee.me, inclusive com gerenciamento de optin.}
|
|
14
14
|
s.email = %q{suporte@mailee.me}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
16
16
|
"LICENSE",
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"README.rdoc"
|
|
17
|
+
"README.markdown",
|
|
18
|
+
"README.markdown.pt"
|
|
20
19
|
]
|
|
21
20
|
s.files = [
|
|
22
|
-
".
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
21
|
+
".rspec",
|
|
22
|
+
"Gemfile",
|
|
23
|
+
"Gemfile.lock",
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"MIT-LICENSE",
|
|
26
|
+
"README.markdown",
|
|
27
|
+
"Rakefile",
|
|
28
|
+
"VERSION",
|
|
29
|
+
"app/.gitignore",
|
|
30
|
+
"app/Gemfile",
|
|
31
|
+
"app/Gemfile.lock",
|
|
32
|
+
"app/README",
|
|
33
|
+
"app/Rakefile",
|
|
34
|
+
"app/app/controllers/application_controller.rb",
|
|
35
|
+
"app/app/helpers/application_helper.rb",
|
|
36
|
+
"app/app/mailers/foo.rb",
|
|
37
|
+
"app/app/views/foo/bar.html.erb",
|
|
38
|
+
"app/app/views/foo/baz.text.erb",
|
|
39
|
+
"app/app/views/layouts/application.html.erb",
|
|
40
|
+
"app/config.ru",
|
|
41
|
+
"app/config/application.rb",
|
|
42
|
+
"app/config/boot.rb",
|
|
43
|
+
"app/config/database.yml",
|
|
44
|
+
"app/config/environment.rb",
|
|
45
|
+
"app/config/environments/development.rb",
|
|
46
|
+
"app/config/environments/production.rb",
|
|
47
|
+
"app/config/environments/test.rb",
|
|
48
|
+
"app/config/initializers/backtrace_silencers.rb",
|
|
49
|
+
"app/config/initializers/inflections.rb",
|
|
50
|
+
"app/config/initializers/mailee.rb",
|
|
51
|
+
"app/config/initializers/mime_types.rb",
|
|
52
|
+
"app/config/initializers/secret_token.rb",
|
|
53
|
+
"app/config/initializers/session_store.rb",
|
|
54
|
+
"app/config/locales/en.yml",
|
|
55
|
+
"app/config/routes.rb",
|
|
56
|
+
"app/db/schema.rb",
|
|
57
|
+
"app/db/seeds.rb",
|
|
58
|
+
"app/doc/README_FOR_APP",
|
|
59
|
+
"app/lib/tasks/.gitkeep",
|
|
60
|
+
"app/public/404.html",
|
|
61
|
+
"app/public/422.html",
|
|
62
|
+
"app/public/500.html",
|
|
63
|
+
"app/public/favicon.ico",
|
|
64
|
+
"app/public/images/rails.png",
|
|
65
|
+
"app/public/index.html",
|
|
66
|
+
"app/public/javascripts/application.js",
|
|
67
|
+
"app/public/javascripts/controls.js",
|
|
68
|
+
"app/public/javascripts/dragdrop.js",
|
|
69
|
+
"app/public/javascripts/effects.js",
|
|
70
|
+
"app/public/javascripts/prototype.js",
|
|
71
|
+
"app/public/javascripts/rails.js",
|
|
72
|
+
"app/public/robots.txt",
|
|
73
|
+
"app/public/stylesheets/.gitkeep",
|
|
74
|
+
"app/script/rails",
|
|
75
|
+
"app/test.rb",
|
|
76
|
+
"app/test/functional/foo_test.rb",
|
|
77
|
+
"app/test/performance/browsing_test.rb",
|
|
78
|
+
"app/test/test_helper.rb",
|
|
79
|
+
"app/vendor/plugins/.gitkeep",
|
|
80
|
+
"init.rb",
|
|
81
|
+
"install.rb",
|
|
82
|
+
"lib/mailee.rb",
|
|
83
|
+
"lib/mailee/action_mailer.rb",
|
|
84
|
+
"lib/mailee/active_record.rb",
|
|
85
|
+
"lib/mailee/active_resource.rb",
|
|
86
|
+
"lib/mailee/railties.rb",
|
|
87
|
+
"mailee.gemspec",
|
|
88
|
+
"pkg/mailee-0.1.0.gem",
|
|
89
|
+
"pkg/mailee-0.1.1.gem",
|
|
90
|
+
"pkg/mailee-0.1.2.gem",
|
|
91
|
+
"pkg/mailee-0.4.4.gem",
|
|
92
|
+
"pkg/mailee-0.5.1.gem",
|
|
93
|
+
"spec/am_spec_helper.rb",
|
|
94
|
+
"spec/ar_spec_helper.rb",
|
|
95
|
+
"spec/mailee-api-am_spec.rb",
|
|
96
|
+
"spec/mailee-api-ar_spec.rb",
|
|
97
|
+
"spec/mailee-api_spec.rb",
|
|
98
|
+
"spec/spec_helper.rb",
|
|
99
|
+
"tasks/mailee_tasks.rake"
|
|
100
100
|
]
|
|
101
101
|
s.homepage = %q{http://help.mailee.me/integration_rails.html}
|
|
102
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
|
103
102
|
s.require_paths = ["lib"]
|
|
104
103
|
s.rubygems_version = %q{1.3.7}
|
|
105
|
-
s.summary = %q{Gem
|
|
106
|
-
s.test_files = [
|
|
107
|
-
"spec/am_spec_helper.rb",
|
|
108
|
-
"spec/ar_spec_helper.rb",
|
|
109
|
-
"spec/mailee-api-am_spec.rb",
|
|
110
|
-
"spec/mailee-api-ar_spec.rb",
|
|
111
|
-
"spec/mailee-api_spec.rb",
|
|
112
|
-
"spec/spec_helper.rb"
|
|
113
|
-
]
|
|
104
|
+
s.summary = %q{Gem para uso da API do Mailee.me}
|
|
114
105
|
|
|
115
106
|
if s.respond_to? :specification_version then
|
|
116
107
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
117
108
|
s.specification_version = 3
|
|
118
109
|
|
|
119
110
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
111
|
+
s.add_runtime_dependency(%q<actionmailer>, ["~> 3.0"])
|
|
112
|
+
s.add_runtime_dependency(%q<activeresource>, ["~> 3.0"])
|
|
113
|
+
s.add_runtime_dependency(%q<activerecord>, ["~> 3.0"])
|
|
114
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
|
|
115
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
116
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
|
117
|
+
s.add_development_dependency(%q<sqlite3>, ["~> 1.3.4"])
|
|
120
118
|
else
|
|
119
|
+
s.add_dependency(%q<actionmailer>, ["~> 3.0"])
|
|
120
|
+
s.add_dependency(%q<activeresource>, ["~> 3.0"])
|
|
121
|
+
s.add_dependency(%q<activerecord>, ["~> 3.0"])
|
|
122
|
+
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
|
123
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
124
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
|
125
|
+
s.add_dependency(%q<sqlite3>, ["~> 1.3.4"])
|
|
121
126
|
end
|
|
122
127
|
else
|
|
128
|
+
s.add_dependency(%q<actionmailer>, ["~> 3.0"])
|
|
129
|
+
s.add_dependency(%q<activeresource>, ["~> 3.0"])
|
|
130
|
+
s.add_dependency(%q<activerecord>, ["~> 3.0"])
|
|
131
|
+
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
|
132
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
133
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
|
134
|
+
s.add_dependency(%q<sqlite3>, ["~> 1.3.4"])
|
|
123
135
|
end
|
|
124
136
|
end
|
|
125
137
|
|
|
Binary file
|
data/spec/ar_spec_helper.rb
CHANGED
data/spec/mailee-api_spec.rb
CHANGED
|
@@ -35,9 +35,9 @@ describe "Mailee" do
|
|
|
35
35
|
it "should get all contacts" do
|
|
36
36
|
Array.new(25){|i| Mailee::Contact.create :email => "rest_test_#{@moment}_#{i}@test.com"}
|
|
37
37
|
contacts = Mailee::Contact.find(:all)
|
|
38
|
-
contacts.size.should
|
|
38
|
+
contacts.size.should == 15
|
|
39
39
|
contacts = Mailee::Contact.find(:all, :params => {:page => 2, :by_keyword => "rest_test_#{@moment}" })
|
|
40
|
-
contacts.size.should
|
|
40
|
+
contacts.size.should == 10
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
it "should create contact - and find by id" do
|
|
@@ -108,6 +108,13 @@ describe "Mailee" do
|
|
|
108
108
|
contact.unsubscribe.should_not be nil
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
+
it "should create a contact, subscribe to a list and unsubscribe from a list" do
|
|
112
|
+
contact = Mailee::Contact.create :email => "rest_test_#{@moment}@test.com"
|
|
113
|
+
contact.list_subscribe("rest_test_#{@moment}").should_not be nil
|
|
114
|
+
Mailee::List.all.find{|l| l.name == "rest_test_#{@moment}"}.name.should == "rest_test_#{@moment}"
|
|
115
|
+
contact.list_unsubscribe("rest_test_#{@moment}").should_not be nil
|
|
116
|
+
end
|
|
117
|
+
|
|
111
118
|
it "should search contacts" do
|
|
112
119
|
Mailee::Contact.search("rest_test").should_not be nil
|
|
113
120
|
end
|
|
@@ -142,7 +149,8 @@ describe "Mailee" do
|
|
|
142
149
|
message.ready(10.days.from_now).should_not be nil
|
|
143
150
|
end
|
|
144
151
|
|
|
145
|
-
it "should import (quick) - specific methods" do
|
|
152
|
+
it "should import (quick) - specific methods" do
|
|
153
|
+
Mailee::Quick.import("rest_test_#{@moment}@test.com\nrest_test_2_#{@moment}@test.com\nrest_test_3_#{@moment}@test.com").should_not be nil
|
|
146
154
|
end
|
|
147
155
|
|
|
148
156
|
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mailee
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 7
|
|
5
5
|
prerelease: false
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
|
-
-
|
|
8
|
+
- 6
|
|
9
9
|
- 0
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.6.0
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Juan Maiz
|
|
@@ -15,10 +15,118 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-
|
|
18
|
+
date: 2011-10-21 00:00:00 -02:00
|
|
19
19
|
default_executable:
|
|
20
|
-
dependencies:
|
|
21
|
-
|
|
20
|
+
dependencies:
|
|
21
|
+
- !ruby/object:Gem::Dependency
|
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
23
|
+
none: false
|
|
24
|
+
requirements:
|
|
25
|
+
- - ~>
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
hash: 7
|
|
28
|
+
segments:
|
|
29
|
+
- 3
|
|
30
|
+
- 0
|
|
31
|
+
version: "3.0"
|
|
32
|
+
type: :runtime
|
|
33
|
+
name: actionmailer
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: *id001
|
|
36
|
+
- !ruby/object:Gem::Dependency
|
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
38
|
+
none: false
|
|
39
|
+
requirements:
|
|
40
|
+
- - ~>
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
hash: 7
|
|
43
|
+
segments:
|
|
44
|
+
- 3
|
|
45
|
+
- 0
|
|
46
|
+
version: "3.0"
|
|
47
|
+
type: :runtime
|
|
48
|
+
name: activeresource
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: *id002
|
|
51
|
+
- !ruby/object:Gem::Dependency
|
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
53
|
+
none: false
|
|
54
|
+
requirements:
|
|
55
|
+
- - ~>
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
hash: 7
|
|
58
|
+
segments:
|
|
59
|
+
- 3
|
|
60
|
+
- 0
|
|
61
|
+
version: "3.0"
|
|
62
|
+
type: :runtime
|
|
63
|
+
name: activerecord
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: *id003
|
|
66
|
+
- !ruby/object:Gem::Dependency
|
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
68
|
+
none: false
|
|
69
|
+
requirements:
|
|
70
|
+
- - ~>
|
|
71
|
+
- !ruby/object:Gem::Version
|
|
72
|
+
hash: 23
|
|
73
|
+
segments:
|
|
74
|
+
- 2
|
|
75
|
+
- 6
|
|
76
|
+
- 0
|
|
77
|
+
version: 2.6.0
|
|
78
|
+
type: :development
|
|
79
|
+
name: rspec
|
|
80
|
+
prerelease: false
|
|
81
|
+
version_requirements: *id004
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
84
|
+
none: false
|
|
85
|
+
requirements:
|
|
86
|
+
- - ~>
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
hash: 23
|
|
89
|
+
segments:
|
|
90
|
+
- 1
|
|
91
|
+
- 0
|
|
92
|
+
- 0
|
|
93
|
+
version: 1.0.0
|
|
94
|
+
type: :development
|
|
95
|
+
name: bundler
|
|
96
|
+
prerelease: false
|
|
97
|
+
version_requirements: *id005
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
100
|
+
none: false
|
|
101
|
+
requirements:
|
|
102
|
+
- - ~>
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
hash: 7
|
|
105
|
+
segments:
|
|
106
|
+
- 1
|
|
107
|
+
- 6
|
|
108
|
+
- 4
|
|
109
|
+
version: 1.6.4
|
|
110
|
+
type: :development
|
|
111
|
+
name: jeweler
|
|
112
|
+
prerelease: false
|
|
113
|
+
version_requirements: *id006
|
|
114
|
+
- !ruby/object:Gem::Dependency
|
|
115
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
116
|
+
none: false
|
|
117
|
+
requirements:
|
|
118
|
+
- - ~>
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
hash: 19
|
|
121
|
+
segments:
|
|
122
|
+
- 1
|
|
123
|
+
- 3
|
|
124
|
+
- 4
|
|
125
|
+
version: 1.3.4
|
|
126
|
+
type: :development
|
|
127
|
+
name: sqlite3
|
|
128
|
+
prerelease: false
|
|
129
|
+
version_requirements: *id007
|
|
22
130
|
description: Permite sincronizar automaticamente seus modelos com o Mailee.me, inclusive com gerenciamento de optin.
|
|
23
131
|
email: suporte@mailee.me
|
|
24
132
|
executables: []
|
|
@@ -29,14 +137,13 @@ extra_rdoc_files:
|
|
|
29
137
|
- LICENSE
|
|
30
138
|
- README.markdown
|
|
31
139
|
- README.markdown.pt
|
|
32
|
-
- README.rdoc
|
|
33
140
|
files:
|
|
34
|
-
- .gitignore
|
|
35
141
|
- .rspec
|
|
142
|
+
- Gemfile
|
|
143
|
+
- Gemfile.lock
|
|
36
144
|
- LICENSE
|
|
37
145
|
- MIT-LICENSE
|
|
38
146
|
- README.markdown
|
|
39
|
-
- README.rdoc
|
|
40
147
|
- Rakefile
|
|
41
148
|
- VERSION
|
|
42
149
|
- app/.gitignore
|
|
@@ -102,6 +209,7 @@ files:
|
|
|
102
209
|
- pkg/mailee-0.1.1.gem
|
|
103
210
|
- pkg/mailee-0.1.2.gem
|
|
104
211
|
- pkg/mailee-0.4.4.gem
|
|
212
|
+
- pkg/mailee-0.5.1.gem
|
|
105
213
|
- spec/am_spec_helper.rb
|
|
106
214
|
- spec/ar_spec_helper.rb
|
|
107
215
|
- spec/mailee-api-am_spec.rb
|
|
@@ -115,8 +223,8 @@ homepage: http://help.mailee.me/integration_rails.html
|
|
|
115
223
|
licenses: []
|
|
116
224
|
|
|
117
225
|
post_install_message:
|
|
118
|
-
rdoc_options:
|
|
119
|
-
|
|
226
|
+
rdoc_options: []
|
|
227
|
+
|
|
120
228
|
require_paths:
|
|
121
229
|
- lib
|
|
122
230
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
@@ -143,11 +251,6 @@ rubyforge_project:
|
|
|
143
251
|
rubygems_version: 1.3.7
|
|
144
252
|
signing_key:
|
|
145
253
|
specification_version: 3
|
|
146
|
-
summary:
|
|
147
|
-
test_files:
|
|
148
|
-
|
|
149
|
-
- spec/ar_spec_helper.rb
|
|
150
|
-
- spec/mailee-api-am_spec.rb
|
|
151
|
-
- spec/mailee-api-ar_spec.rb
|
|
152
|
-
- spec/mailee-api_spec.rb
|
|
153
|
-
- spec/spec_helper.rb
|
|
254
|
+
summary: Gem para uso da API do Mailee.me
|
|
255
|
+
test_files: []
|
|
256
|
+
|
data/.gitignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
mailee-api-test.db
|
data/README.rdoc
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
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.
|