mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
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:
parent
d8805988a1
commit
a66b321bb0
4 changed files with 249 additions and 0 deletions
5
activesupport/lib/core_ext/string.rb
Normal file
5
activesupport/lib/core_ext/string.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
require File.dirname(__FILE__) + '/string/inflections'
|
||||||
|
|
||||||
|
class String
|
||||||
|
include ActiveSupport::CoreExtensions::String::Inflections
|
||||||
|
end
|
39
activesupport/lib/core_ext/string/inflections.rb
Normal file
39
activesupport/lib/core_ext/string/inflections.rb
Normal 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
|
141
activesupport/test/class_inheritable_attributes_test.rb
Normal file
141
activesupport/test/class_inheritable_attributes_test.rb
Normal 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
|
64
activesupport/test/core_ext/string_ext_test.rb
Normal file
64
activesupport/test/core_ext/string_ext_test.rb
Normal 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
|
Loading…
Reference in a new issue