Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #11511: inflector_acronym_config_patch.2.diff

File inflector_acronym_config_patch.2.diff, 6.2 kB (added by garru, 3 months ago)
  • activesupport/test/inflector_test.rb

    old new  
    4444    CamelToUnderscore.each do |camel, underscore| 
    4545      assert_equal(camel, Inflector.camelize(underscore)) 
    4646    end 
     47     
     48    # Adding acronyms to make underscore to camelize reversible 
     49    Inflector.inflections.acronym('HTML') 
     50    Inflector.inflections.acronym('BSD') 
     51    CamelToUnderscoreWithoutReverse.each do |camel, underscore| 
     52      assert_equal(camel, Inflector.camelize(underscore)) 
     53    end 
     54    Inflector.inflections.clear('camelizes') 
    4755  end 
    4856 
    4957  def test_underscore 
     
    154162    end 
    155163  end 
    156164   
    157   %w{plurals singulars uncountables}.each do |inflection_type| 
     165  %w{plurals singulars uncountables camelizes}.each do |inflection_type| 
    158166    class_eval " 
    159167      def test_clear_#{inflection_type} 
    160168        cached_values = Inflector.inflections.#{inflection_type} 
     
    166174  end 
    167175   
    168176  def test_clear_all 
    169     cached_values = Inflector.inflections.plurals, Inflector.inflections.singulars, Inflector.inflections.uncountables 
     177    cached_values = Inflector.inflections.plurals, Inflector.inflections.singulars, Inflector.inflections.uncountables, Inflector.inflections.camelizes 
    170178    Inflector.inflections.clear :all 
    171179    assert Inflector.inflections.plurals.empty? 
    172180    assert Inflector.inflections.singulars.empty? 
    173181    assert Inflector.inflections.uncountables.empty? 
     182    assert Inflector.inflections.camelizes.empty? 
    174183    Inflector.inflections.instance_variable_set :@plurals, cached_values[0] 
    175184    Inflector.inflections.instance_variable_set :@singulars, cached_values[1] 
    176185    Inflector.inflections.instance_variable_set :@uncountables, cached_values[2] 
     186    Inflector.inflections.instance_variable_set :@camelizes, cached_values[3] 
    177187  end 
    178188   
    179189  def test_clear_with_default 
    180     cached_values = Inflector.inflections.plurals, Inflector.inflections.singulars, Inflector.inflections.uncountables 
     190    cached_values = Inflector.inflections.plurals, Inflector.inflections.singulars, Inflector.inflections.uncountables, Inflector.inflections.camelizes 
    181191    Inflector.inflections.clear 
    182192    assert Inflector.inflections.plurals.empty? 
    183193    assert Inflector.inflections.singulars.empty? 
    184194    assert Inflector.inflections.uncountables.empty? 
     195    assert Inflector.inflections.uncountables.empty? 
    185196    Inflector.inflections.instance_variable_set :@plurals, cached_values[0] 
    186197    Inflector.inflections.instance_variable_set :@singulars, cached_values[1] 
    187198    Inflector.inflections.instance_variable_set :@uncountables, cached_values[2] 
     199    Inflector.inflections.instance_variable_set :@camelizes, cached_values[3] 
    188200  end 
    189201 
    190202  Irregularities.each do |irregularity| 
     
    202214    Inflector.inflections do |inflect| 
    203215      define_method("test_clear_inflections_with_#{scope.kind_of?(Array) ? "no_arguments" : scope}") do 
    204216        # save all the inflections 
    205         singulars, plurals, uncountables = inflect.singulars, inflect.plurals, inflect.uncountables 
     217        singulars, plurals, uncountables, camelizes = inflect.singulars, inflect.plurals, inflect.uncountables, inflect.camelizes 
    206218 
    207219        # clear all the inflections 
    208220        inflect.clear(*scope) 
     
    210222        assert_equal [], inflect.singulars 
    211223        assert_equal [], inflect.plurals 
    212224        assert_equal [], inflect.uncountables 
     225        assert_equal [], inflect.camelizes 
    213226 
    214227        # restore all the inflections 
    215228        singulars.reverse.each { |singular| inflect.singular(*singular) } 
  • activesupport/lib/active_support/inflector.rb

    old new  
    2222  class Inflections 
    2323    include Singleton 
    2424 
    25     attr_reader :plurals, :singulars, :uncountables 
     25    attr_reader :plurals, :singulars, :uncountables, :camelizes 
    2626 
    2727    def initialize 
    28       @plurals, @singulars, @uncountables = [], [], [] 
     28      @plurals, @singulars, @uncountables , @camelizes = [], [], [], [] 
    2929    end 
    3030 
    3131    # Specifies a new pluralization rule and its replacement. The rule can either be a string or a regular expression. 
     
    3939    def singular(rule, replacement) 
    4040      @singulars.insert(0, [rule, replacement]) 
    4141    end 
    42  
     42     
     43    # Specifies a new camelization rule and its replacement.  The rule can either be a string or a regular expression. 
     44    def camelize(rule, replacement) 
     45      @camelizes.insert(0, [rule, replacement]) 
     46    end 
     47     
     48    # Specifies a new camelization rule and its replacement for an acronym.  The acronym must be a string 
     49    # Examples: 
     50    #   acronym 'pdf' 
     51    #   acronym 'HTML' 
     52    def acronym(acronym) 
     53      acronym.downcase! 
     54      rule = Regexp.new("(^|_)#{acronym}") 
     55      camelize(rule, acronym.upcase!) 
     56    end 
     57     
    4358    # Specifies a new irregular that applies to both pluralization and singularization at the same time. This can only be used 
    4459    # for strings, not regular expressions. You simply pass the irregular in singular and plural form. 
    4560    # 
     
    7792    def clear(scope = :all) 
    7893      case scope 
    7994        when :all 
    80           @plurals, @singulars, @uncountables = [], [], [] 
     95          @plurals, @singulars, @uncountables , @camelizes = [], [], [], [] 
    8196        else 
    8297          instance_variable_set "@#{scope}", [] 
    8398      end 
     
    145160  #   "active_record/errors".camelize #=> "ActiveRecord::Errors" 
    146161  #   "active_record/errors".camelize(:lower) #=> "activeRecord::Errors" 
    147162  def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true) 
     163    result = lower_case_and_underscored_word.to_s.dup 
     164    inflections.camelizes.each { |(rule, replacement)| result.gsub!(rule, replacement) } 
    148165    if first_letter_in_uppercase 
    149       lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } 
     166      result.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } 
    150167    else 
    151       lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1] 
     168      result.first + camelize(result)[1..-1] 
    152169    end 
    153170  end 
    154171