Module: Dry::Core::Inflector

Defined in:
lib/dry/core/inflector.rb

Overview

Helper module providing thin interface around an inflection backend.

Constant Summary collapse

BACKENDS =

List of supported backends

{
  activesupport: [
    "active_support/inflector",
    proc { ::ActiveSupport::Inflector }
  ],
  dry_inflector: [
    "dry/inflector",
    proc { ::Dry::Inflector.new }
  ],
  inflecto: [
    "inflecto",
    proc { ::Inflecto }
  ]
}.freeze

Class Method Summary collapse

Class Method Details

.camelize(input) ⇒ Object

Transform string to camel case

Examples:

Dry::Core::Inflector.camelize('foo_bar') # => 'FooBar'

Parameters:

  • input string

Returns:

  • Transformed string



72
73
74
# File 'lib/dry/core/inflector.rb', line 72

def self.camelize(input)
  inflector.camelize(input)
end

.classify(input) ⇒ Object

Transform a file path to a constant name

Examples:

Dry::Core::Inflector.classify('foo/bar') # => 'Foo::Bar'

Parameters:

  • input string

Returns:

  • Constant name



138
139
140
# File 'lib/dry/core/inflector.rb', line 138

def self.classify(input)
  inflector.classify(input)
end

.constantize(input) ⇒ Object

Get a constant value by its name

Examples:

Dry::Core::Inflector.constantize('Foo::Bar') # => Foo::Bar

Parameters:

  • input constant name

Returns:

  • Constant value



127
128
129
# File 'lib/dry/core/inflector.rb', line 127

def self.constantize(input)
  inflector.constantize(input)
end

.demodulize(input) ⇒ Object

Remove namespaces from a constant name

Examples:

Dry::Core::Inflector.demodulize('Deeply::Nested::Name') # => 'Name'

Parameters:

  • input string

Returns:

  • Unnested constant name



116
117
118
# File 'lib/dry/core/inflector.rb', line 116

def self.demodulize(input)
  inflector.demodulize(input)
end

.detect_backendObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Set up first available backend

API:

  • private



37
38
39
40
41
42
43
44
45
# File 'lib/dry/core/inflector.rb', line 37

def self.detect_backend
  BACKENDS.inject(nil) do |backend, (_, (path, factory))|
    backend || realize_backend(path, factory)
  end || raise(
    LoadError,
    "No inflector library could be found: " \
    "please install either the `inflecto` or `activesupport` gem."
  )
end

.inflectorObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Inflector accessor. Lazily initializes a backend

API:

  • private



61
62
63
# File 'lib/dry/core/inflector.rb', line 61

def self.inflector
  defined?(@inflector) ? @inflector : select_backend
end

.pluralize(input) ⇒ Object

Get a plural form of a word

Examples:

Dry::Core::Inflector.pluralize('string') # => 'strings'

Parameters:

  • input string

Returns:

  • Transformed string



105
106
107
# File 'lib/dry/core/inflector.rb', line 105

def self.pluralize(input)
  inflector.pluralize(input)
end

.realize_backend(path, backend_factory) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Try to activate a backend

API:

  • private



26
27
28
29
30
31
32
# File 'lib/dry/core/inflector.rb', line 26

def self.realize_backend(path, backend_factory)
  require path
rescue ::LoadError
  nil
else
  backend_factory.call
end

.select_backend(name = nil) ⇒ Object

Set preferred backend

Parameters:

  • (defaults to: nil)

    backend name (:activesupport or :inflecto)



50
51
52
53
54
55
56
# File 'lib/dry/core/inflector.rb', line 50

def self.select_backend(name = nil)
  if name && !BACKENDS.key?(name)
    raise ::NameError, "Invalid inflector library selection: '#{name}'"
  end

  @inflector = name ? realize_backend(*BACKENDS[name]) : detect_backend
end

.singularize(input) ⇒ Object

Get a singlular form of a word

Examples:

Dry::Core::Inflector.singularize('chars') # => 'char'

Parameters:

  • input string

Returns:

  • Transformed string



94
95
96
# File 'lib/dry/core/inflector.rb', line 94

def self.singularize(input)
  inflector.singularize(input)
end

.underscore(input) ⇒ Object

Transform string to snake case

Examples:

Dry::Core::Inflector.underscore('FooBar') # => 'foo_bar'

Parameters:

  • input string

Returns:

  • Transformed string



83
84
85
# File 'lib/dry/core/inflector.rb', line 83

def self.underscore(input)
  inflector.underscore(input)
end