Redmine::FieldFormat.as_select(custom_field.class.customized_class.name)
end
+ # Yields the given block for each custom field value of object that should be
+ # displayed, with the custom field and the formatted value as arguments
+ def render_custom_field_values(object, &block)
+ object.visible_custom_field_values.each do |custom_value|
+ formatted = show_value(custom_value)
+ if formatted.present?
+ yield custom_value.custom_field, formatted
+ end
+ end
+ end
+
# Renders the custom_values in api views
def render_api_custom_values(custom_values, api)
api.array :custom_fields do
<li><span class="label"><%=l(:label_subproject_plural)%>:</span>
<%= @subprojects.collect{|p| link_to p, project_path(p)}.join(", ").html_safe %></li>
<% end %>
- <% @project.visible_custom_field_values.each do |custom_value| %>
- <% if !custom_value.value.blank? %>
- <li><span class="label"><%=h custom_value.custom_field.name %>:</span> <%=h show_value(custom_value) %></li>
- <% end %>
+ <% render_custom_field_values(@project) do |custom_field, formatted| %>
+ <li><span class="label"><%= custom_field.name %>:</span> <%= formatted %></li>
<% end %>
</ul>
<p><%=h version.description %></p>
<% if version.custom_field_values.any? %>
<ul>
- <% version.custom_field_values.each do |custom_value| %>
- <% if custom_value.value.present? %>
- <li><%=h custom_value.custom_field.name %>: <%=h show_value(custom_value) %></li>
- <% end %>
+ <% render_custom_field_values(version) do |custom_field, formatted| %>
+ <li><span class="label"><%= custom_field.name %>:</span> <%= formatted %></li>
<% end %>
</ul>
<% end %>
assert_select 'li', :text => /Development status/, :count => 0
end
+ def test_show_should_not_display_blank_custom_fields_with_multiple_values
+ f1 = ProjectCustomField.generate! :field_format => 'list', :possible_values => %w(Foo Bar), :multiple => true
+ f2 = ProjectCustomField.generate! :field_format => 'list', :possible_values => %w(Baz Qux), :multiple => true
+ project = Project.generate!(:custom_field_values => {f2.id.to_s => %w(Qux)})
+
+ get :show, :id => project.id
+ assert_response :success
+
+ assert_select 'li', :text => /#{f1.name}/, :count => 0
+ assert_select 'li', :text => /#{f2.name}/
+ end
+
def test_show_should_not_fail_when_custom_values_are_nil
project = Project.find_by_identifier('ecookbook')
project.custom_values.first.update_attribute(:value, nil)