Inheritance
As you start to accumulating more components in your application, youβll natrually find yourself wanting to make little tweaks in different areas. Thereβs several strategies to managing these tweaks including intialization parameters, extended classes, and composition.
Initialization parameters
One way of handling slight varations to a component is by passing arguments into it upon initialization. This example shows how to change the size of a card compone.t
class MyCard < Component::Base
def initialize(size: :small)
@size = size
end
def view_template
div(class: ["card", "card__#{@size}"]){
yield
}
end
end
You might call the variants like this:
<%= render MyCard.new(size: :large) do %>
<h1>Large Card</h1>
<% end %>
<%= render MyCard.new(size: :small) do %>
<h1>Small Card</h1>
<% end %>
π Unlock content
Pre-order this course to unlock this video, source code, and content.
βββ βββββββ ββββ ββββ ββββββββ ββ β ββββ βββββ ββββ βββ βββββ ββββββββ ββββ βββ ββββββββββββ βββββ βββββ βββββ ββββ ββ βββ ββββββββββ ββ βββββ βββ βββββ
<%= ββββββ ββββββ.βββ(size: "blue") do %>
ββββLarge Cardβββββ
<% end %>
βββ βββββ βββ ββββββββββ βββββ ββ βββ ββββββββββ ββ βββββ βββ βββββ βββ ββββ ββββ β ββββ ββββββ ββ ββββ βββ βββ ββββ ββββββββ ββββββββ ββββββββ ββββββββββ ββ βββ ββββ βββ βββ ββββββββββ
Variations via class inheritance and endless methods
βββββββ ββ βββββββ β ββββ βββββββββ ββββ β βββββββββ ββ βββ βββ βββββββββββ βββ ββββ ββ ββββ ββ ββββββ ββ βββ βββ
module MyCard
class Base < βββββββββ::ββββ
def ββββ = :small
def βββββββββββββ
βββ(class: ["card", "card__#{ββββ}"]){
yield
}
end
end
β βββ βββββββββββ
βββββ = ββββ
class Medium < ββββ
def ββββ = :medium
end
class Large < ββββ
def ββββ = :large
end
end
ββββββ ββββ ββ βββββ ββββ ββββ βββββββββ ββββ ββββ ββββ
<%= ββββββ ββββββ::βββββ.βββ do %>
ββββLarge Cardβββββ
<% end %>
<%= ββββββ ββββββ::βββββ.βββ do %>
ββββSmall Cardβββββ
<% end %>
ββββ β βββββββββ βββββ ββ ββββββ β ββββ ββββ ββ βββββββ βββββ ββ βββββ ββββ ββ ββββββ ββββ ββββββββββββ βββββββ ββββββ
<%= ββββββ ββββββ::ββββ.βββ do %>
ββββLarge Cardβββββ
<% end %>
βββββ βββββ ββ ββββ βββββ ββ βββ βββ ββββββ ββββββββ ββββββ ββ ββββββ ββββ βββ ββ βββββ βββββ ββββ ββββ βββ ββ ββ βββββ βββ βββββ βββ ββββββ βββββ ββββββββ βββ ββββββββββ βββββ βββ βββββββββββ