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 } ], inflecto: [ 'inflecto', proc { ::Inflecto } ] }.freeze
Class Method Summary collapse
-
.camelize(input) ⇒ Object
Transform string to camel case.
-
.classify(input) ⇒ Object
Transform a file path to a constant name.
-
.constantize(input) ⇒ Object
Get a constant value by its name.
-
.demodulize(input) ⇒ Object
Remove namespaces from a constant name.
-
.detect_backend ⇒ Object
private
Set up first available backend.
-
.inflector ⇒ Object
private
Inflector accessor.
-
.pluralize(input) ⇒ Object
Get a plural form of a word.
-
.realize_backend(path, backend_factory) ⇒ Object
private
Try to activate a backend.
-
.select_backend(name = nil) ⇒ Object
Set preferred backend.
-
.singularize(input) ⇒ Object
Get a singlular form of a word.
-
.underscore(input) ⇒ Object
Transform string to snake case.
Class Method Details
.camelize(input) ⇒ Object
Transform string to camel case
63 64 65 |
# File 'lib/dry/core/inflector.rb', line 63 def self.camelize(input) inflector.camelize(input) end |
.classify(input) ⇒ Object
Transform a file path to a constant name
129 130 131 |
# File 'lib/dry/core/inflector.rb', line 129 def self.classify(input) inflector.classify(input) end |
.constantize(input) ⇒ Object
Get a constant value by its name
118 119 120 |
# File 'lib/dry/core/inflector.rb', line 118 def self.constantize(input) inflector.constantize(input) end |
.demodulize(input) ⇒ Object
Remove namespaces from a constant name
107 108 109 |
# File 'lib/dry/core/inflector.rb', line 107 def self.demodulize(input) inflector.demodulize(input) end |
.detect_backend ⇒ 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.
Set up first available backend
31 32 33 34 35 36 37 |
# File 'lib/dry/core/inflector.rb', line 31 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 |
.inflector ⇒ 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.
Inflector accessor. Lazily initializes a backend
52 53 54 |
# File 'lib/dry/core/inflector.rb', line 52 def self.inflector defined?(@inflector) ? @inflector : select_backend end |
.pluralize(input) ⇒ Object
Get a plural form of a word
96 97 98 |
# File 'lib/dry/core/inflector.rb', line 96 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
20 21 22 23 24 25 26 |
# File 'lib/dry/core/inflector.rb', line 20 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
42 43 44 45 46 47 |
# File 'lib/dry/core/inflector.rb', line 42 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
85 86 87 |
# File 'lib/dry/core/inflector.rb', line 85 def self.singularize(input) inflector.singularize(input) end |
.underscore(input) ⇒ Object
Transform string to snake case
74 75 76 |
# File 'lib/dry/core/inflector.rb', line 74 def self.underscore(input) inflector.underscore(input) end |