mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Moved a few methods from RecordIdentifier to ActiveModel::Naming
Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
parent
fa8b290496
commit
6807b08099
6 changed files with 101 additions and 78 deletions
|
@ -46,7 +46,7 @@ module ActionController
|
|||
# dom_class(post, :edit) # => "edit_post"
|
||||
# dom_class(Person, :edit) # => "edit_person"
|
||||
def dom_class(record_or_class, prefix = nil)
|
||||
singular = singular_class_name(record_or_class)
|
||||
singular = ActiveModel::Naming.singular(record_or_class)
|
||||
prefix ? "#{prefix}#{JOIN}#{singular}" : singular
|
||||
end
|
||||
|
||||
|
@ -85,34 +85,5 @@ module ActionController
|
|||
def sanitize_dom_id(candidate_id)
|
||||
candidate_id # TODO implement conversion to valid DOM id values
|
||||
end
|
||||
|
||||
# Returns the plural class name of a record or class. Examples:
|
||||
#
|
||||
# plural_class_name(post) # => "posts"
|
||||
# plural_class_name(Highrise::Person) # => "highrise_people"
|
||||
def plural_class_name(record_or_class)
|
||||
model_name_from_record_or_class(record_or_class).plural
|
||||
end
|
||||
|
||||
# Returns the singular class name of a record or class. Examples:
|
||||
#
|
||||
# singular_class_name(post) # => "post"
|
||||
# singular_class_name(Highrise::Person) # => "highrise_person"
|
||||
def singular_class_name(record_or_class)
|
||||
model_name_from_record_or_class(record_or_class).singular
|
||||
end
|
||||
|
||||
# Identifies whether the class name of a record or class is uncountable. Examples:
|
||||
#
|
||||
# uncountable?(Sheep) # => true
|
||||
# uncountable?(Post) => false
|
||||
def uncountable?(record_or_class)
|
||||
plural_class_name(record_or_class) == singular_class_name(record_or_class)
|
||||
end
|
||||
|
||||
private
|
||||
def model_name_from_record_or_class(record_or_class)
|
||||
(record_or_class.is_a?(Class) ? record_or_class : record_or_class.class).model_name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -155,7 +155,7 @@ module ActionDispatch
|
|||
if parent.is_a?(Symbol) || parent.is_a?(String)
|
||||
string << "#{parent}_"
|
||||
else
|
||||
string << ActionController::RecordIdentifier.plural_class_name(parent).singularize
|
||||
string << ActiveModel::Naming.plural(parent).singularize
|
||||
string << "_"
|
||||
end
|
||||
end
|
||||
|
@ -164,10 +164,10 @@ module ActionDispatch
|
|||
if record.is_a?(Symbol) || record.is_a?(String)
|
||||
route << "#{record}_"
|
||||
else
|
||||
route << ActionController::RecordIdentifier.plural_class_name(record)
|
||||
route << ActiveModel::Naming.plural(record)
|
||||
route = route.singularize if inflection == :singular
|
||||
route << "_"
|
||||
route << "index_" if ActionController::RecordIdentifier.uncountable?(record) && inflection == :plural
|
||||
route << "index_" if ActiveModel::Naming.uncountable?(record) && inflection == :plural
|
||||
end
|
||||
|
||||
action_prefix(options) + route + routing_type(options).to_s
|
||||
|
|
|
@ -302,12 +302,12 @@ module ActionView
|
|||
object_name = record_or_name_or_array
|
||||
when Array
|
||||
object = record_or_name_or_array.last
|
||||
object_name = options[:as] || ActionController::RecordIdentifier.singular_class_name(object)
|
||||
object_name = options[:as] || ActiveModel::Naming.singular(object)
|
||||
apply_form_for_options!(record_or_name_or_array, options)
|
||||
args.unshift object
|
||||
else
|
||||
object = record_or_name_or_array
|
||||
object_name = options[:as] || ActionController::RecordIdentifier.singular_class_name(object)
|
||||
object_name = options[:as] || ActiveModel::Naming.singular(object)
|
||||
apply_form_for_options!([object], options)
|
||||
args.unshift object
|
||||
end
|
||||
|
@ -533,7 +533,7 @@ module ActionView
|
|||
object = args.first
|
||||
else
|
||||
object = record_or_name_or_array
|
||||
object_name = ActionController::RecordIdentifier.singular_class_name(object)
|
||||
object_name = ActiveModel::Naming.singular(object)
|
||||
end
|
||||
|
||||
builder = options[:builder] || ActionView::Base.default_form_builder
|
||||
|
@ -1156,11 +1156,11 @@ module ActionView
|
|||
end
|
||||
when Array
|
||||
object = record_or_name_or_array.last
|
||||
name = "#{object_name}#{index}[#{ActionController::RecordIdentifier.singular_class_name(object)}]"
|
||||
name = "#{object_name}#{index}[#{ActiveModel::Naming.singular(object)}]"
|
||||
args.unshift(object)
|
||||
else
|
||||
object = record_or_name_or_array
|
||||
name = "#{object_name}#{index}[#{ActionController::RecordIdentifier.singular_class_name(object)}]"
|
||||
name = "#{object_name}#{index}[#{ActiveModel::Naming.singular(object)}]"
|
||||
args.unshift(object)
|
||||
end
|
||||
|
||||
|
|
|
@ -26,20 +26,6 @@ class Sheep
|
|||
end
|
||||
end
|
||||
|
||||
class Comment::Nested < Comment; end
|
||||
|
||||
class Test::Unit::TestCase
|
||||
protected
|
||||
def comments_url
|
||||
'http://www.example.com/comments'
|
||||
end
|
||||
|
||||
def comment_url(comment)
|
||||
"http://www.example.com/comments/#{comment.id}"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
class RecordIdentifierTest < Test::Unit::TestCase
|
||||
include ActionController::RecordIdentifier
|
||||
|
||||
|
@ -76,30 +62,4 @@ class RecordIdentifierTest < Test::Unit::TestCase
|
|||
def test_dom_class_with_prefix
|
||||
assert_equal "custom_prefix_#{@singular}", dom_class(@record, :custom_prefix)
|
||||
end
|
||||
|
||||
def test_singular_class_name
|
||||
assert_equal @singular, singular_class_name(@record)
|
||||
end
|
||||
|
||||
def test_singular_class_name_for_class
|
||||
assert_equal @singular, singular_class_name(@klass)
|
||||
end
|
||||
|
||||
def test_plural_class_name
|
||||
assert_equal @plural, plural_class_name(@record)
|
||||
end
|
||||
|
||||
def test_plural_class_name_for_class
|
||||
assert_equal @plural, plural_class_name(@klass)
|
||||
end
|
||||
|
||||
def test_uncountable
|
||||
assert_equal true, uncountable?(@uncountable)
|
||||
assert_equal false, uncountable?(@klass)
|
||||
end
|
||||
|
||||
private
|
||||
def method_missing(method, *args)
|
||||
RecordIdentifier.send(method, *args)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -57,6 +57,35 @@ module ActiveModel
|
|||
def model_name
|
||||
@_model_name ||= ActiveModel::Name.new(self)
|
||||
end
|
||||
|
||||
# Returns the plural class name of a record or class. Examples:
|
||||
#
|
||||
# ActiveModel::Naming.plural(post) # => "posts"
|
||||
# ActiveModel::Naming.plural(Highrise::Person) # => "highrise_people"
|
||||
def self.plural(record_or_class)
|
||||
model_name_from_record_or_class(record_or_class).plural
|
||||
end
|
||||
|
||||
# Returns the singular class name of a record or class. Examples:
|
||||
#
|
||||
# ActiveModel::Naming.singular(post) # => "post"
|
||||
# ActiveModel::Naming.singular(Highrise::Person) # => "highrise_person"
|
||||
def self.singular(record_or_class)
|
||||
model_name_from_record_or_class(record_or_class).singular
|
||||
end
|
||||
|
||||
# Identifies whether the class name of a record or class is uncountable. Examples:
|
||||
#
|
||||
# ActiveModel::Naming.uncountable?(Sheep) # => true
|
||||
# ActiveModel::Naming.uncountable?(Post) => false
|
||||
def self.uncountable?(record_or_class)
|
||||
plural(record_or_class) == singular(record_or_class)
|
||||
end
|
||||
|
||||
private
|
||||
def self.model_name_from_record_or_class(record_or_class)
|
||||
(record_or_class.is_a?(Class) ? record_or_class : record_or_class.class).model_name
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
63
activemodel/test/cases/naming_helpers_test.rb
Normal file
63
activemodel/test/cases/naming_helpers_test.rb
Normal file
|
@ -0,0 +1,63 @@
|
|||
require 'cases/helper'
|
||||
|
||||
class Comment
|
||||
extend ActiveModel::Naming
|
||||
include ActiveModel::Conversion
|
||||
|
||||
attr_reader :id
|
||||
def to_key; id ? [id] : nil end
|
||||
def save; @id = 1 end
|
||||
def new_record?; @id.nil? end
|
||||
def name
|
||||
@id.nil? ? 'new comment' : "comment ##{@id}"
|
||||
end
|
||||
end
|
||||
|
||||
class Sheep
|
||||
extend ActiveModel::Naming
|
||||
include ActiveModel::Conversion
|
||||
|
||||
attr_reader :id
|
||||
def to_key; id ? [id] : nil end
|
||||
def save; @id = 1 end
|
||||
def new_record?; @id.nil? end
|
||||
def name
|
||||
@id.nil? ? 'new sheep' : "sheep ##{@id}"
|
||||
end
|
||||
end
|
||||
|
||||
class NamingHelpersTest < Test::Unit::TestCase
|
||||
def setup
|
||||
@klass = Comment
|
||||
@record = @klass.new
|
||||
@singular = 'comment'
|
||||
@plural = 'comments'
|
||||
@uncountable = Sheep
|
||||
end
|
||||
|
||||
def test_singular
|
||||
assert_equal @singular, singular(@record)
|
||||
end
|
||||
|
||||
def test_singular_for_class
|
||||
assert_equal @singular, singular(@klass)
|
||||
end
|
||||
|
||||
def test_plural
|
||||
assert_equal @plural, plural(@record)
|
||||
end
|
||||
|
||||
def test_plural_for_class
|
||||
assert_equal @plural, plural(@klass)
|
||||
end
|
||||
|
||||
def test_uncountable
|
||||
assert_equal true, uncountable?(@uncountable)
|
||||
assert_equal false, uncountable?(@klass)
|
||||
end
|
||||
|
||||
private
|
||||
def method_missing(method, *args)
|
||||
ActiveModel::Naming.send(method, *args)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue