From a66b321bb022836709b0a55ba1c4a693beee286a Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 15 Jan 2005 16:48:12 +0000 Subject: Added the meat for String inflection git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@414 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activesupport/lib/core_ext/string.rb | 5 + activesupport/lib/core_ext/string/inflections.rb | 39 ++++++ .../test/class_inheritable_attributes_test.rb | 141 +++++++++++++++++++++ activesupport/test/core_ext/string_ext_test.rb | 64 ++++++++++ 4 files changed, 249 insertions(+) create mode 100644 activesupport/lib/core_ext/string.rb create mode 100644 activesupport/lib/core_ext/string/inflections.rb create mode 100644 activesupport/test/class_inheritable_attributes_test.rb create mode 100644 activesupport/test/core_ext/string_ext_test.rb 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 -- cgit v1.2.3