21
loading...
This website collects cookies to deliver better user experience
# Invoice PDF view
<% if @invoice.marketplace? %>
IBAN number of the marketplace bank account
<% else %>
IBAN number of the revenue bank account
<% end %>
# Invoice show page
<% if @invoice.marketplace? %>
IBAN number of the marketplace bank account
<% else %>
IBAN number of the revenue bank account
<% end %>
# Invoice show page
<% if @invoice.marketplace? %>
Name of the marketplace bank account
<% else %>
Name of the revenue bank account
<% end %>
# Invoice mailer
if @invoice.marketplace?
attachments["RIB Kactus.pdf"] = URL of the marketplace bank account
else
attachments["RIB Kactus.pdf"] = URL of the revenue bank account
end
# Everywhere
if @invoice.marketplace?
...
else
...
end
# Everywhere
<% if @invoice.marketplace? && @invoice.recipient.premium_account? %>
# ...
<% elsif @invoice.marketplace? %>
# ...
<% else %>
# ...
<% end %>
# app/models/bank_account.rb
class BankAccount
end
# app/models/bank_account.rb
class BankAccount
# The factory `.for` method is the only place in the application
# where the if statements should appear
def self.for(invoice)
if invoice.marketplace? && invoice.recipient.premium_account?
PremiumMarketplace
elsif @invoice.marketplace?
DefaultMarketplace
else
Revenue
end.new
end
end
# app/models/bank_account/premium_marketplace.rb
class BankAccount::PremiumMarketplace
def name
"Premium marketplace bank account name"
end
def iban_number
"Premium marketplace bank account IBAN number"
end
def iban_url
"Premium marketplace bank account IBAN URL"
end
end
# app/models/bank_account/default_marketplace.rb
class BankAccount::DefaultMarketplace
def name
"Default marketplace bank account name"
end
def iban_number
"Default marketplace bank account IBAN number"
end
def iban_url
"Default marketplace bank account IBAN URL"
end
end
# app/models/bank_account/revenue.rb
class BankAccount::Revenue
def name
"Revenue bank account name"
end
def iban_number
"Revenue bank account IBAN number"
end
def iban_url
"Revenue bank account IBAN URL"
end
end
# app/models/invoice.rb
class Invoice < ApplicationRecord
def bank_account
@bank_account ||= BankAccount.for(self)
end
end
# Everywhere
# No more if statemements, we replaced conditional
# with polymorphism
@invoice.bank_account.name
@invoice.bank_account.url
@invoice.bank_account.iban_number