Skip to content

Instantly share code, notes, and snippets.

@ritikesh
ritikesh / creator.rb
Last active October 13, 2020 20:36
Creator Pattern
module Creator
extend ActiveSupport::Concern
included do
before_validation -> {
self.creator_id = User.current.id if User.current
}, on: :create
belongs_to :creator, class_name: 'User', foreign_key: :creator_id
end
@ritikesh
ritikesh / actionmailer1.rb
Last active August 25, 2020 09:01
blog gists
class MailboxInterceptor
def self.delivering_email(mail)
set_smtp_settings(mail)
fix_encodings
ensure
unset_email_config
end
private
def self.set_smtp_settings(mail)
@ritikesh
ritikesh / actionmailer5.rb
Created August 25, 2020 09:00
blog gists
class ApplicationMailer < ActionMailer::Base
before_action :block_spam_accounts, if: -> { Tenant.current.spam? }
private
def block_spam_accounts
self.response_body= "Abort!"
end
end
@ritikesh
ritikesh / actionmailer4.rb
Created August 25, 2020 08:59
blog gists
class ApplicationMailer < ActionMailer::Base
before_action :block_spam_accounts, if: -> { Tenant.current.spam? }
private
def block_spam_accounts
message.perform_deliveries = false
end
end
@ritikesh
ritikesh / actionmailer3.rb
Created August 25, 2020 08:58
blog gists
class MailboxInterceptor
def self.delivering_email(mail)
set_smtp_settings(mail)
fix_encodings
mail.perform_deliveries = Rails.env.production? || File.exists?("#{Rails.root}/tmp/send_emails.txt")
ensure
unset_email_config
end
end
ActionMailer::Base.register_interceptor(MailboxInterceptor)
@ritikesh
ritikesh / actionmailer2.rb
Created August 25, 2020 08:58
blog gists
module MailObserver
def self.delivered_email(mail)
logger = ActionMailer::Base.logger
logger.tagged(mail.message_id) do
logger.info do
recipients = Array(mail.to).join(', ')
"Sent mail to #{recipients}"
end
end
logger.debug { mail.encoded }
class Tenant < ActiveRecord::Base
...
# associations
has_one :tenant_configs
delegate :locale, :timezone, :date_format, ..., to: :tenant_configs_from_cache
def tenant_configs_from_cache
Rails.cache.fetch(“tenant_configs:#{self.id}:#{self.tenant_configs.updated_at.to_i}”) { self.tenant_configs }
end
...
class Tenant < ActiveRecord::Base
...
# associations
has_one :tenant_configs
delegate :locale, :timezone, :date_format, ..., to: :tenant_configs
...
end
# Before
class User < ActiveRecord::Base
validates_uniqueness_of :username, message: :taken
end
# After
class User < ActiveRecord::Base
handle_record_not_unique(field: ["username"], message: {username: :taken})
end
Benchmarks User System Total Real
Rehearsal
Existing 2.600000 0.240000 2.840000 (2.833792)
New 1.190000 0.010000 1.200000 (1.206466)
Actual
Existing 2.140000 0.050000 2.190000 (2.194628)
New 0.830000 0.010000 0.840000 (0.835711)