mailkick 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -18
  3. data/LICENSE.txt +1 -1
  4. data/README.md +153 -85
  5. data/app/controllers/mailkick/subscriptions_controller.rb +38 -20
  6. data/app/models/mailkick/opt_out.rb +1 -1
  7. data/app/models/mailkick/subscription.rb +9 -0
  8. data/app/views/mailkick/subscriptions/show.html.erb +1 -1
  9. data/lib/generators/mailkick/install_generator.rb +4 -21
  10. data/lib/generators/mailkick/templates/install.rb.tt +11 -0
  11. data/lib/mailkick.rb +23 -69
  12. data/lib/mailkick/engine.rb +0 -4
  13. data/lib/mailkick/legacy.rb +70 -0
  14. data/lib/mailkick/model.rb +11 -21
  15. data/lib/mailkick/service.rb +1 -16
  16. data/lib/mailkick/service/aws_ses.rb +47 -0
  17. data/lib/mailkick/service/postmark.rb +41 -0
  18. data/lib/mailkick/service/sendgrid.rb +4 -1
  19. data/lib/mailkick/service/sendgrid_v2.rb +52 -0
  20. data/lib/mailkick/url_helper.rb +8 -0
  21. data/lib/mailkick/version.rb +1 -1
  22. metadata +20 -184
  23. data/.gitignore +0 -25
  24. data/.travis.yml +0 -16
  25. data/Gemfile +0 -6
  26. data/Rakefile +0 -9
  27. data/app/helpers/mailkick/url_helper.rb +0 -15
  28. data/lib/generators/mailkick/templates/install.rb +0 -14
  29. data/mailkick.gemspec +0 -32
  30. data/test/gemfiles/actionmailer42.gemfile +0 -6
  31. data/test/gemfiles/actionmailer50.gemfile +0 -6
  32. data/test/gemfiles/actionmailer51.gemfile +0 -6
  33. data/test/internal/app/mailers/user_mailer.rb +0 -7
  34. data/test/internal/app/models/user.rb +0 -3
  35. data/test/internal/app/views/user_mailer/welcome.html.erb +0 -1
  36. data/test/internal/app/views/user_mailer/welcome.text.erb +0 -1
  37. data/test/internal/config/database.yml +0 -3
  38. data/test/internal/db/schema.rb +0 -16
  39. data/test/mailkick_test.rb +0 -29
  40. data/test/test_helper.rb +0 -18
data/.travis.yml DELETED
@@ -1,16 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4.2
4
- sudo: false
5
- script: bundle exec rake test
6
- before_script:
7
- - gem install bundler
8
- notifications:
9
- email:
10
- on_success: never
11
- on_failure: change
12
- gemfile:
13
- - Gemfile
14
- - test/gemfiles/actionmailer51.gemfile
15
- - test/gemfiles/actionmailer50.gemfile
16
- - test/gemfiles/actionmailer42.gemfile
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in mailkick.gemspec
4
- gemspec
5
-
6
- gem "actionmailer", "~> 5.2.0"
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- task default: :test
5
- Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.pattern = "test/**/*_test.rb"
8
- t.warning = false
9
- end
@@ -1,15 +0,0 @@
1
- module Mailkick
2
- module UrlHelper
3
- def mailkick_unsubscribe_url(email: nil, user: nil, list: nil, **options)
4
- email ||= controller.try(:message).try(:to).try(:first)
5
-
6
- Mailkick::Engine.routes.url_helpers.url_for(
7
- (ActionMailer::Base.default_url_options || {}).merge(options).merge(
8
- controller: "mailkick/subscriptions",
9
- action: "unsubscribe",
10
- id: Mailkick.generate_token(email, user: user, list: list)
11
- )
12
- )
13
- end
14
- end
15
- end
@@ -1,14 +0,0 @@
1
- class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version %>
2
- def change
3
- create_table :mailkick_opt_outs do |t|
4
- t.string :email
5
- t.references :user, polymorphic: true
6
- t.boolean :active, null: false, default: true
7
- t.string :reason
8
- t.string :list
9
- t.timestamps
10
- end
11
-
12
- add_index :mailkick_opt_outs, :email
13
- end
14
- end
data/mailkick.gemspec DELETED
@@ -1,32 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "mailkick/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "mailkick"
8
- spec.version = Mailkick::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
- spec.summary = "Email subscriptions made easy"
12
- spec.homepage = "https://github.com/ankane/mailkick"
13
- spec.license = "MIT"
14
-
15
- spec.files = `git ls-files -z`.split("\x0")
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_dependency "activesupport", ">= 4.2"
21
-
22
- spec.add_development_dependency "bundler"
23
- spec.add_development_dependency "gibbon", ">= 2"
24
- spec.add_development_dependency "mailgun-ruby"
25
- spec.add_development_dependency "mandrill-api"
26
- spec.add_development_dependency "minitest"
27
- spec.add_development_dependency "rake"
28
- spec.add_development_dependency "sendgrid_toolkit"
29
- spec.add_development_dependency "combustion"
30
- spec.add_development_dependency "rails"
31
- spec.add_development_dependency "sqlite3"
32
- end
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in mailkick.gemspec
4
- gemspec path: "../../"
5
-
6
- gem "actionmailer", "~> 4.2.0"
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in mailkick.gemspec
4
- gemspec path: "../../"
5
-
6
- gem "actionmailer", "~> 5.0.0"
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in mailkick.gemspec
4
- gemspec path: "../../"
5
-
6
- gem "actionmailer", "~> 5.1.0"
@@ -1,7 +0,0 @@
1
- class UserMailer < ActionMailer::Base
2
- default from: "from@example.com"
3
-
4
- def welcome
5
- mail to: "test@example.org", subject: "Hello"
6
- end
7
- end
@@ -1,3 +0,0 @@
1
- class User < ActiveRecord::Base
2
- mailkick_user
3
- end
@@ -1 +0,0 @@
1
- <p><%= mailkick_unsubscribe_url %></p>
@@ -1 +0,0 @@
1
- Unsubscribe: <%= mailkick_unsubscribe_url %>
@@ -1,3 +0,0 @@
1
- test:
2
- adapter: sqlite3
3
- database: db/combustion_test.sqlite
@@ -1,16 +0,0 @@
1
- ActiveRecord::Schema.define do
2
- create_table :mailkick_opt_outs do |t|
3
- t.string :email
4
- t.references :user, polymorphic: true
5
- t.boolean :active, null: false, default: true
6
- t.string :reason
7
- t.string :list
8
- t.timestamps
9
- end
10
-
11
- add_index :mailkick_opt_outs, :email
12
-
13
- create_table :users do |t|
14
- t.string :email
15
- end
16
- end
@@ -1,29 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class MailkickTest < Minitest::Test
4
- def test_unsubscribe_url
5
- message = UserMailer.welcome.deliver_now
6
- html_body = message.html_part.body.to_s
7
- assert_includes html_body, "unsubscribe"
8
- text_body = message.text_part.body.to_s
9
- assert_includes text_body, "unsubscribe"
10
- end
11
-
12
- def test_opt_out
13
- email = "test2@example.org"
14
- user = User.create!(email: email)
15
-
16
- Mailkick.opt_out(email: email, user: user)
17
-
18
- opt_outs = Mailkick::OptOut.all.to_a
19
- assert_equal 1, opt_outs.size
20
-
21
- opt_out = opt_outs.first
22
- assert_equal email, opt_out.email
23
- assert_equal user, opt_out.user
24
-
25
- assert user.opted_out?
26
- assert_equal 1, User.opted_out.count
27
- assert_equal 0, User.not_opted_out.count
28
- end
29
- end
data/test/test_helper.rb DELETED
@@ -1,18 +0,0 @@
1
- require "bundler/setup"
2
- require "combustion"
3
- Bundler.require(:default)
4
- require "minitest/autorun"
5
- require "minitest/pride"
6
- require "logger"
7
-
8
- Minitest::Test = Minitest::Unit::TestCase unless defined?(Minitest::Test)
9
-
10
- Combustion.path = "test/internal"
11
- Combustion.initialize! :all do
12
- if config.active_record.sqlite3.respond_to?(:represent_boolean_as_integer)
13
- config.active_record.sqlite3.represent_boolean_as_integer = false
14
- end
15
- end
16
-
17
- ActiveRecord::Base.logger = ActiveSupport::Logger.new(STDOUT) if ENV["VERBOSE"]
18
- ActionMailer::Base.delivery_method = :test