diff --git a/lib/ams/inflector.rb b/lib/ams/inflector.rb index 2c8fae73..0e91e6c1 100644 --- a/lib/ams/inflector.rb +++ b/lib/ams/inflector.rb @@ -35,7 +35,11 @@ module AMS end def pluralize(word) - word + "s".freeze + if word.end_with?("s") + "#{word}es" + else + "#{word}s" + end end def singularize(word) diff --git a/test/unit/inflector_test.rb b/test/unit/inflector_test.rb new file mode 100644 index 00000000..2d4a99d7 --- /dev/null +++ b/test/unit/inflector_test.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true +require "test_helper" + +module AMS + class Serializer + class InflectorTest < Test + def test_underscore_leaves_alone_word_without_caps_dash_nor_double_dot + assert_equal "active_model/errors", Inflector.underscore("active_model/errors") + end + + def test_underscore_converts_dash_to_underscore + assert_equal "active_model_errors", Inflector.underscore("active_model-errors") + end + + def test_underscore_coerces_non_string_to_string + assert_equal "active_model/errors", Inflector.underscore(:"active_model::errors") + end + + def test_underscore_downcases_upcase_letters + assert_equal "active_model", Inflector.underscore("ACTIVE_MODEL") + end + + def test_underscore_separates_upcase_letters_ending_in_a_number_from_following_upcase_letter_followed_by_downcase_letter_by_an_underscore + assert_equal "api1_api", Inflector.underscore("API1API") + end + + def test_underscore_separates_camel_case_words_by_underscore + assert_equal "active_model", Inflector.underscore("ActiveModel") + end + + def test_underscore_converts_double_dot_to_forward_slash + assert_equal "active_model/errors", Inflector.underscore("ActiveModel::Errors") + end + + def test_underscore_does_not_mutate_the_original_string + original_string = "ActiveModel" + original_string_id = original_string.object_id + assert_equal "active_model", Inflector.underscore(original_string) + assert_equal "ActiveModel", original_string + assert_equal original_string_id, original_string.object_id + end + + def test_pluralize_adds_s_to_word_not_ending_in_s + assert_equal "dogs", Inflector.pluralize("dog") + end + + def test_pluralize_adds_es_to_word_ending_in_s + assert_equal "dresses", Inflector.pluralize("dress") + end + + def test_singularize_removes_es_from_word_ending_in_es + assert_equal "beach", Inflector.singularize("beaches") + end + + def test_singularize_removes_s_from_word_ending_in_s + assert_equal "day", Inflector.singularize("days") + end + + def test_singularize_leaves_alone_word_not_ending_in_s + assert_equal "fish", Inflector.singularize("fish") + end + end + end +end