lib/ext/string.rb in fathom-0.3.7 vs lib/ext/string.rb in fathom-0.5.0

- old
+ new

@@ -1,27 +1,106 @@ -# From ActiveSupport -class String +module Inflector + extend self + + def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true) + if first_letter_in_uppercase + lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } + else + lower_case_and_underscored_word.to_s[0].chr.downcase + camelize(lower_case_and_underscored_word)[1..-1] + end + end + + def underscore(camel_cased_word) + word = camel_cased_word.to_s.dup + word.gsub!(/::/, '/') + word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2') + word.gsub!(/([a-z\d])([A-Z])/,'\1_\2') + word.tr!("-", "_") + word.downcase! + word + end + + def dasherize(underscored_word) + underscored_word.gsub(/_/, '-') + end + + def demodulize(class_name_in_module) + class_name_in_module.to_s.gsub(/^.*::/, '') + end + + def foreign_key(class_name, separate_class_name_and_id_with_underscore = true) + underscore(demodulize(class_name)) + (separate_class_name_and_id_with_underscore ? "_id" : "id") + end + if Module.method(:const_get).arity == 1 - def constantize - names = self.split('::') + def constantize(camel_cased_word) + names = camel_cased_word.split('::') names.shift if names.empty? || names.first.empty? constant = Object names.each do |name| constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name) end constant end else - def constantize #:nodoc: - names = self.split('::') + def constantize(camel_cased_word) #:nodoc: + names = camel_cased_word.split('::') names.shift if names.empty? || names.first.empty? constant = Object names.each do |name| constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name) end constant end end + + def ordinalize(number) + if (11..13).include?(number.to_i % 100) + "#{number}th" + else + case number.to_i % 10 + when 1; "#{number}st" + when 2; "#{number}nd" + when 3; "#{number}rd" + else "#{number}th" + end + end + end +end + +class String + def constantize + Inflector.constantize(self) + end -end \ No newline at end of file + def camelize(first_letter_in_uppercase = true) + Inflector.camelize(self, first_letter_in_uppercase) + end + + def underscore + Inflector.underscore(self) + end + + def dasherize + Inflector.dasherize(self) + end + + def demodulize + Inflector.demodulize(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 + + def ordinalize + Inflector.ordinalize(self) + end + + def wrap(col=80) + # http://blog.macromates.com/2006/wrapping-text-with-regular-expressions/ + gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/, "\\1\\3\n") + end + +end