Class: String

Inherits:
Object
  • Object
show all
Defined in:
lib/jrubyfx/utils.rb,
lib/jrubyfx/utils/string_utils.rb

Overview

Standard ruby String class extensions

Instance Method Summary collapse

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