Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Small clean up in Naming and TTranslation tests.
  • Loading branch information
josevalim committed Dec 23, 2009
1 parent 44cd9e0 commit e31077c
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 47 deletions.
26 changes: 22 additions & 4 deletions activemodel/lib/active_model/naming.rb
Expand Up @@ -2,11 +2,11 @@

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
Expand All @@ -15,13 +15,31 @@ def initialize(klass, name)
@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
22 changes: 1 addition & 21 deletions activemodel/lib/active_model/translation.rb
Expand Up @@ -37,28 +37,8 @@ def human_attribute_name(attribute, options = {})

# 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
3 changes: 2 additions & 1 deletion activemodel/test/cases/naming_test.rb
@@ -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
Expand Down
36 changes: 15 additions & 21 deletions activemodel/test/cases/translation_test.rb
@@ -1,11 +1,5 @@
require 'cases/helper'

class SuperUser
extend ActiveModel::Translation
end

class User < SuperUser
end
require 'models/person'

class ActiveModelI18nTests < ActiveModel::TestCase

Expand All @@ -14,38 +8,38 @@ def setup
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

4 changes: 4 additions & 0 deletions activemodel/test/models/person.rb
@@ -1,5 +1,9 @@
class Person
include ActiveModel::Validations
extend ActiveModel::Translation

attr_accessor :title, :karma
end

class Child < Person
end
4 changes: 4 additions & 0 deletions activemodel/test/models/track_back.rb
@@ -0,0 +1,4 @@
class Post
class TrackBack
end
end

0 comments on commit e31077c

Please sign in to comment.