3b583d1c5e2d57db5ad32ee82b56adf4

Looking for a better way to build an hCard microformat partial that only shows completed data

1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="vcard company">
  <h3 class="org fn"><%=h company.name %></h3>
  <% if company.business_address %>
  <div class="adr">
    <% if !company.business_address.street.blank? %><div class="street-address"><%=h company.business_address.street %></div><% end %>
    <% if !company.business_address.locality.blank? %><span class="locality"><%=h company.business_address.locality %></span><% end %><% if !company.business_address.locality.blank? && !company.business.region %>,<% end %>
    <% if !company.business_address.region.blank? %><span class="region"><%=h company.business_address.region %></span><% end %>
    <% if !company.business_address.postal_code.blank? %><span class="postal-code"><%=h company.business_address.postal_code %></span><% end %>
    <% if !company.business_address.country.blank? %><div class="country-name"><%=h company.business_address.country %></div><% end %>
  </div>
  <% end %>
  <% if !company.business_telephone_number.blank? %><div><strong>Phone:</strong> <span class="tel"><%=h company.business_telephone_number %></span></div><% end %>
</div>

Refactorings

No refactoring yet !

1e8f141e7857d397d8020ed3b759e88a

Maciej Piechotka

July 3, 2008, July 03, 2008 14:10, permalink

3 ratings. Login to rate!

The simple refactoring

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# In helper:

def vcard_div(klass, value)
  if value.blank?
    ""
  else
    "<div class=#{klass}>#{h value}</div>"
  end
end

# In program

<div class="vcard company">
  <h3 class="org fn"><%=h company.name %></h3>
  <% if company.business_address %>
    <div class="adr">
      <%
        {
           :street => 'street-address',
           :locality => 'locality',
           :region => 'region',
           :postal_code => 'postal-code',
           :country => 'country-name',
        }.each do |value, klass|
      %>
        <%= vcard_div klass, company.business_address.call(value) %>
      <% end %>
    </div>
  <% end %>
  <% unless company.business_telephone_number.blank? -%>
    <div>
      <strong>Phone:</strong>
      <span class="tel">
        <%=h company.business_telephone_number %>
      </span>
    </div>
  <% end %>
</div>

Your refactoring





Format Copy from initial code

or Cancel