Added the meat for String inflection

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@414 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2005-01-15 16:48:12 +00:00
parent d8805988a1
commit a66b321bb0
4 changed files with 249 additions and 0 deletions

View File

@ -0,0 +1,5 @@
require File.dirname(__FILE__) + '/string/inflections'
class String
include ActiveSupport::CoreExtensions::String::Inflections
end

View File

@ -0,0 +1,39 @@
module ActiveSupport
module CoreExtensions
module String
module Inflections
def pluralize
Inflector.pluralize(self)
end
def singularize
Inflector.singularize(self)
end
def camelize
Inflector.camelize(self)
end
def underscore
Inflector.underscore(self)
end
def demodulize
Inflector.demodulize(self)
end
def tableize
Inflector.tableize(self)
end
def classify
Inflector.classify(self)
end
def foreign_key(separate_class_name_and_id_with_underscore = true)
Inflector.foreign_key(self, separate_class_name_and_id_with_underscore)
end
end
end
end
end

View File

@ -0,0 +1,141 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../lib/class_inheritable_attributes'
class ClassInheritableAttributesTest < Test::Unit::TestCase
def setup
@klass = Class.new
end
def test_reader_declaration
assert_nothing_raised do
@klass.class_inheritable_reader :a
assert_respond_to @klass, :a
assert_respond_to @klass.new, :a
end
end
def test_writer_declaration
assert_nothing_raised do
@klass.class_inheritable_writer :a
assert_respond_to @klass, :a=
assert_respond_to @klass.new, :a=
end
end
def test_accessor_declaration
assert_nothing_raised do
@klass.class_inheritable_accessor :a
assert_respond_to @klass, :a
assert_respond_to @klass.new, :a
assert_respond_to @klass, :a=
assert_respond_to @klass.new, :a=
end
end
def test_array_declaration
assert_nothing_raised do
@klass.class_inheritable_array :a
assert_respond_to @klass, :a
assert_respond_to @klass.new, :a
assert_respond_to @klass, :a=
assert_respond_to @klass.new, :a=
end
end
def test_hash_declaration
assert_nothing_raised do
@klass.class_inheritable_hash :a
assert_respond_to @klass, :a
assert_respond_to @klass.new, :a
assert_respond_to @klass, :a=
assert_respond_to @klass.new, :a=
end
end
def test_reader
@klass.class_inheritable_reader :a
assert_nil @klass.a
assert_nil @klass.new.a
@klass.send(:write_inheritable_attribute, :a, 'a')
assert_equal 'a', @klass.a
assert_equal 'a', @klass.new.a
assert_equal @klass.a, @klass.new.a
assert_equal @klass.a.id, @klass.new.a.id
end
def test_writer
@klass.class_inheritable_reader :a
@klass.class_inheritable_writer :a
assert_nil @klass.a
assert_nil @klass.new.a
@klass.a = 'a'
assert_equal 'a', @klass.a
@klass.new.a = 'A'
assert_equal 'A', @klass.a
end
def test_array
@klass.class_inheritable_array :a
assert_nil @klass.a
assert_nil @klass.new.a
@klass.a = %w(a b c)
assert_equal %w(a b c), @klass.a
assert_equal %w(a b c), @klass.new.a
@klass.new.a = %w(A B C)
assert_equal %w(a b c A B C), @klass.a
assert_equal %w(a b c A B C), @klass.new.a
end
def test_hash
@klass.class_inheritable_hash :a
assert_nil @klass.a
assert_nil @klass.new.a
@klass.a = { :a => 'a' }
assert_equal({ :a => 'a' }, @klass.a)
assert_equal({ :a => 'a' }, @klass.new.a)
@klass.new.a = { :b => 'b' }
assert_equal({ :a => 'a', :b => 'b' }, @klass.a)
assert_equal({ :a => 'a', :b => 'b' }, @klass.new.a)
end
def test_inheritance
@klass.class_inheritable_accessor :a
@klass.a = 'a'
@sub = eval("class FlogMe < @klass; end; FlogMe")
@klass.class_inheritable_accessor :b
assert_respond_to @sub, :a
assert_respond_to @sub, :b
assert_equal @klass.a, @sub.a
assert_equal @klass.b, @sub.b
assert_equal 'a', @sub.a
assert_nil @sub.b
@klass.b = 'b'
assert_not_equal @klass.b, @sub.b
assert_equal 'b', @klass.b
assert_nil @sub.b
@sub.a = 'A'
assert_not_equal @klass.a, @sub.a
assert_equal 'a', @klass.a
assert_equal 'A', @sub.a
@sub.b = 'B'
assert_not_equal @klass.b, @sub.b
assert_equal 'b', @klass.b
assert_equal 'B', @sub.b
end
end

View File

@ -0,0 +1,64 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../../lib/core_ext/string'
require File.dirname(__FILE__) + '/../../lib/misc'
silence_warnings do
require File.dirname(__FILE__) + '/../inflector_test'
end
class StringInflectionsTest < Test::Unit::TestCase
def test_pluralize
InflectorTest::SingularToPlural.each do |singular, plural|
assert_equal(plural, singular.pluralize)
end
assert_equal("plurals", "plurals".pluralize)
end
def test_singularize
InflectorTest::SingularToPlural.each do |singular, plural|
assert_equal(singular, plural.singularize)
end
end
def test_camelize
InflectorTest::CamelToUnderscore.each do |camel, underscore|
assert_equal(camel, underscore.camelize)
end
end
def test_underscore
InflectorTest::CamelToUnderscore.each do |camel, underscore|
assert_equal(underscore, camel.underscore)
end
assert_equal "html_tidy", "HTMLTidy".underscore
assert_equal "html_tidy_generator", "HTMLTidyGenerator".underscore
end
def test_demodulize
assert_equal "Account", Inflector.demodulize("MyApplication::Billing::Account")
end
def test_foreign_key
InflectorTest::ClassNameToForeignKeyWithUnderscore.each do |klass, foreign_key|
assert_equal(foreign_key, klass.foreign_key)
end
InflectorTest::ClassNameToForeignKeyWithoutUnderscore.each do |klass, foreign_key|
assert_equal(foreign_key, klass.foreign_key(false))
end
end
def test_tableize
InflectorTest::ClassNameToTableName.each do |class_name, table_name|
assert_equal(table_name, class_name.tableize)
end
end
def test_classify
InflectorTest::ClassNameToTableName.each do |class_name, table_name|
assert_equal(class_name, table_name.classify)
end
end
end