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