aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-01-15 16:48:12 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-01-15 16:48:12 +0000
commita66b321bb022836709b0a55ba1c4a693beee286a (patch)
treecd68a05bf1d03eca92dbceb8f24e0101ba469d61
parentd8805988a125720a315580050b7195537fb6e77a (diff)
downloadrails-a66b321bb022836709b0a55ba1c4a693beee286a.tar.gz
rails-a66b321bb022836709b0a55ba1c4a693beee286a.tar.bz2
rails-a66b321bb022836709b0a55ba1c4a693beee286a.zip
Added the meat for String inflection
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@414 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--activesupport/lib/core_ext/string.rb5
-rw-r--r--activesupport/lib/core_ext/string/inflections.rb39
-rw-r--r--activesupport/test/class_inheritable_attributes_test.rb141
-rw-r--r--activesupport/test/core_ext/string_ext_test.rb64
4 files changed, 249 insertions, 0 deletions
diff --git a/activesupport/lib/core_ext/string.rb b/activesupport/lib/core_ext/string.rb
new file mode 100644
index 0000000000..b50e44c598
--- /dev/null
+++ b/activesupport/lib/core_ext/string.rb
@@ -0,0 +1,5 @@
+require File.dirname(__FILE__) + '/string/inflections'
+
+class String
+ include ActiveSupport::CoreExtensions::String::Inflections
+end
diff --git a/activesupport/lib/core_ext/string/inflections.rb b/activesupport/lib/core_ext/string/inflections.rb
new file mode 100644
index 0000000000..90fd013861
--- /dev/null
+++ b/activesupport/lib/core_ext/string/inflections.rb
@@ -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
diff --git a/activesupport/test/class_inheritable_attributes_test.rb b/activesupport/test/class_inheritable_attributes_test.rb
new file mode 100644
index 0000000000..5bba208e11
--- /dev/null
+++ b/activesupport/test/class_inheritable_attributes_test.rb
@@ -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
diff --git a/activesupport/test/core_ext/string_ext_test.rb b/activesupport/test/core_ext/string_ext_test.rb
new file mode 100644
index 0000000000..317dbcf711
--- /dev/null
+++ b/activesupport/test/core_ext/string_ext_test.rb
@@ -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