Labels and hints with associations always lookup to association name and not to attribute with _id
This commit is contained in:
parent
5579a23736
commit
0c5f53fe74
|
@ -39,6 +39,11 @@ module SimpleForm
|
||||||
self.class.basename
|
self.class.basename
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Find reflection name when available, otherwise use attribute
|
||||||
|
def reflecion_name_or_attribute
|
||||||
|
@refletion_name_or_attribute ||= (reflection ? reflection.name : attribute)
|
||||||
|
end
|
||||||
|
|
||||||
# Default html options for a component. Passed as a parameter for simple
|
# Default html options for a component. Passed as a parameter for simple
|
||||||
# form component using component name as follows:
|
# form component using component name as follows:
|
||||||
#
|
#
|
||||||
|
@ -85,9 +90,9 @@ module SimpleForm
|
||||||
def translate(default='')
|
def translate(default='')
|
||||||
action = template.params[:action] if template.respond_to?(:params)
|
action = template.params[:action] if template.respond_to?(:params)
|
||||||
lookups = []
|
lookups = []
|
||||||
lookups << :"#{object_name}.#{action}.#{attribute}" if action.present?
|
lookups << :"#{object_name}.#{action}.#{reflecion_name_or_attribute}" if action.present?
|
||||||
lookups << :"#{object_name}.#{attribute}"
|
lookups << :"#{object_name}.#{reflecion_name_or_attribute}"
|
||||||
lookups << :"#{attribute}"
|
lookups << :"#{reflecion_name_or_attribute}"
|
||||||
lookups << default
|
lookups << default
|
||||||
I18n.t(lookups.shift, :scope => :"simple_form.#{basename.to_s.pluralize}", :default => lookups)
|
I18n.t(lookups.shift, :scope => :"simple_form.#{basename.to_s.pluralize}", :default => lookups)
|
||||||
end
|
end
|
||||||
|
|
|
@ -77,7 +77,7 @@ module SimpleForm
|
||||||
# available or just use the attribute itself humanized.
|
# available or just use the attribute itself humanized.
|
||||||
def translate_label
|
def translate_label
|
||||||
default = if object.class.respond_to?(:human_attribute_name)
|
default = if object.class.respond_to?(:human_attribute_name)
|
||||||
object.class.human_attribute_name(attribute.to_s)
|
object.class.human_attribute_name(reflecion_name_or_attribute.to_s)
|
||||||
else
|
else
|
||||||
attribute.to_s.humanize
|
attribute.to_s.humanize
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,9 +2,10 @@ require 'test_helper'
|
||||||
|
|
||||||
class ErrorTest < ActionView::TestCase
|
class ErrorTest < ActionView::TestCase
|
||||||
|
|
||||||
def with_hint_for(object, attribute, type, options={})
|
def with_hint_for(object, attribute, type, options={}, setup_association=false, &block)
|
||||||
simple_form_for object do |f|
|
simple_form_for object do |f|
|
||||||
f.attribute = attribute
|
f.attribute = attribute
|
||||||
|
f.reflection = Association.new(Company, :company, {}) if setup_association
|
||||||
f.input_type = type
|
f.input_type = type
|
||||||
f.options = options
|
f.options = options
|
||||||
|
|
||||||
|
@ -66,6 +67,15 @@ class ErrorTest < ActionView::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'hint should use i18n with lookup for association name' do
|
||||||
|
store_translations(:en, :simple_form => { :hints => {
|
||||||
|
:user => { :company => 'My company!' }
|
||||||
|
} } ) do
|
||||||
|
with_hint_for @user, :company_id, :string, {}, true
|
||||||
|
assert_select 'span.hint', /My company!/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
test 'hint should generate properly when object is not present' do
|
test 'hint should generate properly when object is not present' do
|
||||||
with_hint_for :project, :name, :string, :hint => 'Test without object'
|
with_hint_for :project, :name, :string, :hint => 'Test without object'
|
||||||
assert_select 'span.hint', 'Test without object'
|
assert_select 'span.hint', 'Test without object'
|
||||||
|
|
|
@ -6,9 +6,10 @@ class LabelTest < ActionView::TestCase
|
||||||
SimpleForm::Components::Label.reset_i18n_cache :translate_required_html
|
SimpleForm::Components::Label.reset_i18n_cache :translate_required_html
|
||||||
end
|
end
|
||||||
|
|
||||||
def with_label_for(object, attribute, type, options={})
|
def with_label_for(object, attribute, type, options={}, setup_association=false)
|
||||||
simple_form_for object do |f|
|
simple_form_for object do |f|
|
||||||
f.attribute = attribute
|
f.attribute = attribute
|
||||||
|
f.reflection = Association.new(Company, :company, {}) if setup_association
|
||||||
f.input_type = type
|
f.input_type = type
|
||||||
f.options = options
|
f.options = options
|
||||||
|
|
||||||
|
@ -39,6 +40,11 @@ class LabelTest < ActionView::TestCase
|
||||||
assert_select 'label[for=user_description]', /User Description!/
|
assert_select 'label[for=user_description]', /User Description!/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'label should use human attribute name based on association name' do
|
||||||
|
with_label_for @user, :company, :string, {}, true
|
||||||
|
assert_select 'label', /Company Human Name!/
|
||||||
|
end
|
||||||
|
|
||||||
test 'label should use i18n based on model, action, and attribute to lookup translation' do
|
test 'label should use i18n based on model, action, and attribute to lookup translation' do
|
||||||
store_translations(:en, :simple_form => { :labels => { :user => {
|
store_translations(:en, :simple_form => { :labels => { :user => {
|
||||||
:new => { :description => 'Nova descrição' }
|
:new => { :description => 'Nova descrição' }
|
||||||
|
@ -65,6 +71,15 @@ class LabelTest < ActionView::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'label should use i18n with lookup for association name' do
|
||||||
|
store_translations(:en, :simple_form => { :labels => {
|
||||||
|
:user => { :company => 'My company!' }
|
||||||
|
} } ) do
|
||||||
|
with_label_for @user, :company_id, :string, {}, true
|
||||||
|
assert_select 'label[for=user_company_id]', /My company!/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
test 'label should have css class from type' do
|
test 'label should have css class from type' do
|
||||||
with_label_for @user, :name, :string
|
with_label_for @user, :name, :string
|
||||||
assert_select 'label.string'
|
assert_select 'label.string'
|
||||||
|
|
|
@ -45,9 +45,14 @@ class User < OpenStruct
|
||||||
|
|
||||||
def self.human_attribute_name(attribute)
|
def self.human_attribute_name(attribute)
|
||||||
case attribute
|
case attribute
|
||||||
when 'name' then 'Super User Name!'
|
when 'name'
|
||||||
when 'description' then 'User Description!'
|
'Super User Name!'
|
||||||
else attribute.humanize
|
when 'description'
|
||||||
|
'User Description!'
|
||||||
|
when 'company'
|
||||||
|
'Company Human Name!'
|
||||||
|
else
|
||||||
|
attribute.humanize
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue