1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Small clean up in Naming and TTranslation tests.

This commit is contained in:
José Valim 2009-12-23 12:28:02 +01:00
parent 44cd9e0e71
commit e31077c9aa
6 changed files with 48 additions and 47 deletions

View file

@ -2,11 +2,11 @@ require 'active_support/inflector'
module ActiveModel
class Name < String
attr_reader :singular, :plural, :element, :collection, :partial_path, :human
attr_reader :singular, :plural, :element, :collection, :partial_path
alias_method :cache_key, :collection
def initialize(klass, name)
super(name)
def initialize(klass)
super(klass.name)
@klass = klass
@singular = ActiveSupport::Inflector.underscore(self).tr('/', '_').freeze
@plural = ActiveSupport::Inflector.pluralize(@singular).freeze
@ -15,13 +15,31 @@ module ActiveModel
@collection = ActiveSupport::Inflector.tableize(self).freeze
@partial_path = "#{@collection}/#{@element}".freeze
end
# Transform the model name into a more humane format, using I18n. By default,
# it will underscore then humanize the class name (BlogPost.model_name.human #=> "Blog post").
# Specify +options+ with additional translating options.
def human(options={})
return @human unless @klass.respond_to?(:lookup_ancestors) &&
@klass.respond_to?(:i18n_scope)
defaults = @klass.lookup_ancestors.map do |klass|
klass.model_name.underscore.to_sym
end
defaults << options.delete(:default) if options[:default]
defaults << @human
options.reverse_merge! :scope => [@klass.i18n_scope, :models], :count => 1, :default => defaults
I18n.translate(defaults.shift, options)
end
end
module Naming
# Returns an ActiveModel::Name object for module. It can be
# used to retrieve all kinds of naming-related information.
def model_name
@_model_name ||= ActiveModel::Name.new(self, name)
@_model_name ||= ActiveModel::Name.new(self)
end
end
end

View file

@ -37,28 +37,8 @@ module ActiveModel
# Model.human_name is deprecated. Use Model.model_name.human instead.
def human_name(*args)
ActiveSupport::Deprecation.warn("human_name has been deprecated, please use model_name.human instead", caller[0,1])
ActiveSupport::Deprecation.warn("human_name has been deprecated, please use model_name.human instead", caller[0,5])
model_name.human(*args)
end
end
class Name < String
# Transform the model name into a more humane format, using I18n. By default,
# it will underscore then humanize the class name (BlogPost.human_name #=> "Blog post").
# Specify +options+ with additional translating options.
def human(options={})
return @human unless @klass.respond_to?(:lookup_ancestors) &&
@klass.respond_to?(:i18n_scope)
defaults = @klass.lookup_ancestors.map do |klass|
klass.model_name.underscore.to_sym
end
defaults << options.delete(:default) if options[:default]
defaults << @human
options.reverse_merge! :scope => [@klass.i18n_scope, :models], :count => 1, :default => defaults
I18n.translate(defaults.shift, options)
end
end
end

View file

@ -1,8 +1,9 @@
require 'cases/helper'
require 'models/track_back'
class NamingTest < ActiveModel::TestCase
def setup
@model_name = ActiveModel::Name.new(self, 'Post::TrackBack')
@model_name = ActiveModel::Name.new(Post::TrackBack)
end
def test_singular

View file

@ -1,11 +1,5 @@
require 'cases/helper'
class SuperUser
extend ActiveModel::Translation
end
class User < SuperUser
end
require 'models/person'
class ActiveModelI18nTests < ActiveModel::TestCase
@ -14,38 +8,38 @@ class ActiveModelI18nTests < ActiveModel::TestCase
end
def test_translated_model_attributes
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:super_user => {:name => 'super_user name attribute'} } }
assert_equal 'super_user name attribute', SuperUser.human_attribute_name('name')
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:person => {:name => 'person name attribute'} } }
assert_equal 'person name attribute', Person.human_attribute_name('name')
end
def test_translated_model_attributes_with_symbols
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:super_user => {:name => 'super_user name attribute'} } }
assert_equal 'super_user name attribute', SuperUser.human_attribute_name(:name)
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:person => {:name => 'person name attribute'} } }
assert_equal 'person name attribute', Person.human_attribute_name(:name)
end
def test_translated_model_attributes_with_ancestor
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:user => {:name => 'user name attribute'} } }
assert_equal 'user name attribute', User.human_attribute_name('name')
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:child => {:name => 'child name attribute'} } }
assert_equal 'child name attribute', Child.human_attribute_name('name')
end
def test_translated_model_attributes_with_ancestors_fallback
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:super_user => {:name => 'super_user name attribute'} } }
assert_equal 'super_user name attribute', User.human_attribute_name('name')
I18n.backend.store_translations 'en', :activemodel => {:attributes => {:person => {:name => 'person name attribute'} } }
assert_equal 'person name attribute', Child.human_attribute_name('name')
end
def test_translated_model_names
I18n.backend.store_translations 'en', :activemodel => {:models => {:super_user => 'super_user model'} }
assert_equal 'super_user model', SuperUser.model_name.human
I18n.backend.store_translations 'en', :activemodel => {:models => {:person => 'person model'} }
assert_equal 'person model', Person.model_name.human
end
def test_translated_model_names_with_sti
I18n.backend.store_translations 'en', :activemodel => {:models => {:user => 'user model'} }
assert_equal 'user model', User.model_name.human
I18n.backend.store_translations 'en', :activemodel => {:models => {:child => 'child model'} }
assert_equal 'child model', Child.model_name.human
end
def test_translated_model_names_with_ancestors_fallback
I18n.backend.store_translations 'en', :activemodel => {:models => {:super_user => 'super_user model'} }
assert_equal 'super_user model', User.model_name.human
I18n.backend.store_translations 'en', :activemodel => {:models => {:person => 'person model'} }
assert_equal 'person model', Child.model_name.human
end
end

View file

@ -1,5 +1,9 @@
class Person
include ActiveModel::Validations
extend ActiveModel::Translation
attr_accessor :title, :karma
end
class Child < Person
end

View file

@ -0,0 +1,4 @@
class Post
class TrackBack
end
end