class Recipes::Mailer
Public Instance Methods
add_mailer_queue()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 35 def add_mailer_queue insert_into_file "config/sidekiq.yml", " - mailers", after: "- default\n" end
ask()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 2 def ask email_services = { aws_ses: "Amazon SES", sendgrid: "Sendgrid (beta)", none: "None, thanks" } email_service = answer(:email_service) do email_services.keys[Ask.list("Which email service are you using?", email_services.values)] end set :email_service, email_service.to_sym end
create()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 15 def create email_service = email_services(get(:email_service)) return if email_service.nil? set(:mailer_delivery_method, email_service[:delivery_method]) set(:mailer_gem_name, email_service[:gem_name]) add_readme_header :mailing dependencies(email_service) config(email_service) ensure_sidekiq_install_and_add_mailers_queue end
install()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 30 def install ask create end
Private Instance Methods
aws_ses()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 113 def aws_ses gather_gems(:development) { gather_gem("letter_opener") } application "config.action_mailer.delivery_method = :letter_opener", env: "development" end
config(service)
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 83 def config(service) template "../assets/config/mailer.rb.erb", 'config/mailer.rb' append_to_file '.env.development', "APPLICATION_HOST=localhost:3000\n" append_to_file '.env.development', "EMAIL_RECIPIENTS=\n" copy_file '../assets/app/mailers/application_mailer.rb', 'app/mailers/application_mailer.rb', force: true config_environments send(service[:name]) end
config_environments()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 66 def config_environments gsub_file 'config/environments/production.rb', /$\s*config.action_mailer.*/, '' asset_host_dev = <<~RUBY config.action_mailer.asset_host = "http://\#{ENV.fetch('APPLICATION_HOST')}" RUBY application asset_host_dev, env: "development" asset_host_prod = <<~RUBY config.action_mailer.asset_host = "https://\#{ENV.fetch('APPLICATION_HOST')}" RUBY application asset_host_prod, env: "production" mailer_config = <<~RUBY require Rails.root.join("config/mailer") RUBY prepend_file "config/environments/production.rb", mailer_config end
dependencies(service)
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 57 def dependencies(service) if service[:version] gather_gem service[:gem_name], service[:version] else gather_gem service[:gem_name] end gather_gem 'recipient_interceptor' end
email_services(service_name)
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 41 def email_services(service_name) email_services = { sendgrid: { name: 'sendgrid', gem_name: 'send_grid_mailer', delivery_method: :sendgrid }, aws_ses: { name: 'aws_ses', gem_name: 'aws-sdk-rails', delivery_method: :aws_sdk } } email_services[service_name] end
ensure_sidekiq_install_and_add_mailers_queue()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 118 def ensure_sidekiq_install_and_add_mailers_queue background_processor_recipe = load_recipe(:background_processor) background_processor_answer = get(:background_processor) if background_processor_recipe.installed? add_mailer_queue else recipe = self after(:install_sidekiq) { recipe.add_mailer_queue } background_processor_recipe.add_sidekiq unless background_processor_answer end end
sendgrid()
click to toggle source
# File lib/potassium/recipes/mailer.rb, line 95 def sendgrid append_to_file '.env.development', "SENDGRID_API_KEY=\n" sendgrid_settings = <<~RUBY Rails.application.config.action_mailer.sendgrid_settings = { api_key: ENV['SENDGRID_API_KEY'] } RUBY inject_into_file 'config/mailer.rb', sendgrid_settings, after: "Rails.application.config.action_mailer.delivery_method = :sendgrid\n" sendgrid_dev_settings = <<~RUBY Rails.application.config.action_mailer.sendgrid_dev_settings = { api_key: ENV['SENDGRID_API_KEY'] } RUBY application sendgrid_dev_settings, env: "development" application "config.action_mailer.delivery_method = :sendgrid_dev", env: "development" end