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:
parent
44cd9e0e71
commit
e31077c9aa
6 changed files with 48 additions and 47 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
class Person
|
||||
include ActiveModel::Validations
|
||||
extend ActiveModel::Translation
|
||||
|
||||
attr_accessor :title, :karma
|
||||
end
|
||||
|
||||
class Child < Person
|
||||
end
|
||||
|
|
4
activemodel/test/models/track_back.rb
Normal file
4
activemodel/test/models/track_back.rb
Normal file
|
@ -0,0 +1,4 @@
|
|||
class Post
|
||||
class TrackBack
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue