Class: String
- Inherits:
-
Object
- Object
- String
- Defined in:
- lib/jrubyfx/utils.rb,
lib/jrubyfx/utils/string_utils.rb
Overview
Standard ruby String class extensions
Instance Method Summary collapse
-
#constantize_by(splitter = "::") ⇒ Object
steal handy methods from activesupport Tries to find a constant with the name specified in the argument string.
-
#snake_case(ignore_prefix_namespace = false) ⇒ Object
call-seq: snake_case(ignore_prefix_namespace=false) => string.
Instance Method Details
#constantize_by(splitter = "::") ⇒ Object
steal handy methods from activesupport Tries to find a constant with the name specified in the argument string.
‘Module’.constantize # => Module ‘Test::Unit’.constantize # => Test::Unit
The name is assumed to be the one of a top-level constant, no matter whether it starts with “::” or not. No lexical context is taken into account:
C = ‘outside’ module M C = ‘inside’ C # => ‘inside’ ‘C’.constantize # => ‘outside’, same as ::C end
NameError is raised when the name is not in CamelCase or the constant is unknown.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/jrubyfx/utils/string_utils.rb', line 22 def constantize_by(splitter="::") camel_cased_word = self names = camel_cased_word.split(splitter) names.shift if names.empty? || names.first.empty? names.inject(Object) do |constant, name| if constant == Object constant.const_get(name) else candidate = constant.const_get(name) next candidate if constant.const_defined?(name, false) next candidate unless Object.const_defined?(name) # Go down the ancestors to check it it's owned # directly before we reach Object or the end of ancestors. constant = constant.ancestors.inject do |const, ancestor| break const if ancestor == Object break ancestor if ancestor.const_defined?(name, false) const end # owner is in Object, so raise constant.const_get(name, false) end end end |
#snake_case(ignore_prefix_namespace = false) ⇒ Object
call-seq:
snake_case(ignore_prefix_namespace=false) => string
Converts a CamelCaseString to a snake_case_string
"JavaFX".snake_case #=> "java_fx"
If ignore_prefix_namespace is specified it will strip any preceding modules/classes off front of string before snake casing:
Foo::BigBar #=> "big_bar"
By default it will separate modules with a “/”:
Foo::BigBar #=> "foo/big_bar"
57 58 59 60 61 62 63 64 65 |
# File 'lib/jrubyfx/utils.rb', line 57 def snake_case(ignore_prefix_namespace=false) base = ignore_prefix_namespace ? self.gsub(/.*::/, '') : self.gsub(/::/, '/') base. gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). tr("-", "_"). downcase end |