Module | Inflector |
In: |
vendor/rails/activesupport/lib/active_support/inflector.rb
|
The Inflector transforms words from singular to plural, class names to table names, modularized class names to ones without, and class names to foreign keys.
Adds absolute maps between table names and classes. For example,
add_table_class_relationships 'MyFirstModel' => 'table1', 'MyModelTwo' => 'table2'
When defined, tableize and classify will return these relationships instead of guessed ones. Specifying nil for a table name will remove the absolute map for a given class
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 68 68: def add_table_class_relationships(*defs) 69: @class_to_table_name = Hash::new if @class_to_table_name.nil? 70: 71: # Assume all mappings will be 1-1 72: defs.each do |d| 73: d.each_pair do |class_name,table_name| 74: if table_name 75: @class_to_table_name[class_name] = table_name 76: else 77: @class_to_table_name.delete class_name 78: end 79: end 80: end 81: @class_to_table_name.rehash 82: @table_to_class_name = @class_to_table_name.invert 83: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 28 28: def camelize(lower_case_and_underscored_word) 29: lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase } 30: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 54 54: def class_table_relationship?(class_name) 55: !@class_to_table_name.nil? and @class_to_table_name.member? class_name 56: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 49 49: def classify(table_name) 50: return @table_to_class_name[table_name] if table_class_relationship? table_name 51: camelize(singularize(table_name)) 52: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 90 90: def constantize(camel_cased_word) 91: camel_cased_word.split("::").inject(Object) do |final_type, part| 92: final_type = final_type.const_get(part) 93: end 94: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 40 40: def demodulize(class_name_in_module) 41: class_name_in_module.to_s.gsub(/^.*::/, '') 42: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 85 85: def foreign_key(class_name, separate_class_name_and_id_with_underscore = true) 86: Inflector.underscore(Inflector.demodulize(class_name)) + 87: (separate_class_name_and_id_with_underscore ? "_id" : "id") 88: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 36 36: def humanize(lower_case_and_underscored_word) 37: lower_case_and_underscored_word.to_s.gsub(/_/, " ").capitalize 38: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 6 6: def pluralize(word) 7: result = word.to_s.dup 8: 9: if uncountable_words.include?(result.downcase) 10: result 11: else 12: plural_rules.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } 13: result 14: end 15: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 17 17: def singularize(word) 18: result = word.to_s.dup 19: 20: if uncountable_words.include?(result.downcase) 21: result 22: else 23: singular_rules.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } 24: result 25: end 26: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 58 58: def table_class_relationship?(table_name) 59: !@table_to_class_name.nil? and @table_to_class_name.member? table_name 60: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 44 44: def tableize(class_name) 45: return @class_to_table_name[class_name] if class_table_relationship? class_name 46: pluralize(underscore(class_name)) 47: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 32 32: def underscore(camel_cased_word) 33: camel_cased_word.to_s.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase 34: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 101 101: def plural_rules #:doc: 102: [ 103: [/^(ox)$/i, '\1\2en'], # ox 104: [/([m|l])ouse$/i, '\1ice'], # mouse, louse 105: [/(matr|vert)ix|ex$/i, '\1ices'], # matrix, vertex, index 106: [/(x|ch|ss|sh)$/i, '\1es'], # search, switch, fix, box, process, address 107: [/([^aeiouy]|qu)ies$/i, '\1y'], 108: [/([^aeiouy]|qu)y$/i, '\1ies'], # query, ability, agency 109: [/(hive)$/i, '\1s'], # archive, hive 110: [/(?:([^f])fe|([lr])f)$/i, '\1\2ves'], # half, safe, wife 111: [/sis$/i, 'ses'], # basis, diagnosis 112: [/([ti])um$/i, '\1a'], # datum, medium 113: [/(p)erson$/i, '\1eople'], # person, salesperson 114: [/(m)an$/i, '\1en'], # man, woman, spokesman 115: [/(c)hild$/i, '\1hildren'], # child 116: [/(buffal|tomat)o$/i, '\1\2oes'], # buffalo, tomato 117: [/(bu)s$/i, '\1\2ses'], # bus 118: [/(alias)/i, '\1es'], # alias 119: [/(octop|vir)us$/i, '\1i'], # octopus, virus - virus has no defined plural (according to Latin/dictionary.com), but viri is better than viruses/viruss 120: [/(ax|cri|test)is$/i, '\1es'], # axis, crisis 121: [/s$/i, 's'], # no change (compatibility) 122: [/$/, 's'] 123: ] 124: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 126 126: def singular_rules #:doc: 127: [ 128: [/(matr)ices$/i, '\1ix'], 129: [/(vert)ices$/i, '\1ex'], 130: [/^(ox)en/i, '\1'], 131: [/(alias)es$/i, '\1'], 132: [/([octop|vir])i$/i, '\1us'], 133: [/(cris|ax|test)es$/i, '\1is'], 134: [/(shoe)s$/i, '\1'], 135: [/(o)es$/i, '\1'], 136: [/(bus)es$/i, '\1'], 137: [/([m|l])ice$/i, '\1ouse'], 138: [/(x|ch|ss|sh)es$/i, '\1'], 139: [/(m)ovies$/i, '\1\2ovie'], 140: [/(s)eries$/i, '\1\2eries'], 141: [/([^aeiouy]|qu)ies$/i, '\1y'], 142: [/([lr])ves$/i, '\1f'], 143: [/(tive)s$/i, '\1'], 144: [/(hive)s$/i, '\1'], 145: [/([^f])ves$/i, '\1fe'], 146: [/(^analy)ses$/i, '\1sis'], 147: [/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, '\1\2sis'], 148: [/([ti])a$/i, '\1um'], 149: [/(p)eople$/i, '\1\2erson'], 150: [/(m)en$/i, '\1an'], 151: [/(s)tatus$/i, '\1\2tatus'], 152: [/(c)hildren$/i, '\1\2hild'], 153: [/(n)ews$/i, '\1\2ews'], 154: [/s$/i, ''] 155: ] 156: end