Class: Dry::Inflector
- Inherits:
-
Object
- Object
- Dry::Inflector
- Defined in:
- lib/dry/inflector.rb,
lib/dry/inflector/rules.rb,
lib/dry/inflector/version.rb,
lib/dry/inflector/acronyms.rb,
lib/dry/inflector/inflections.rb,
lib/dry/inflector/inflections/defaults.rb
Overview
dry-inflector
Defined Under Namespace
Classes: Acronyms, Inflections, Rules
Constant Summary collapse
- VERSION =
"0.1.2"
Instance Method Summary collapse
-
#camelize(input) ⇒ String
Camelize a string.
-
#classify(input) ⇒ String
Classify a string.
-
#constantize(input) ⇒ Class, Module
Find a constant with the name specified in the argument string.
-
#dasherize(input) ⇒ String
Dasherize a string.
-
#demodulize(input) ⇒ String
Demodulize a string.
-
#foreign_key(input) ⇒ String
Creates a foreign key name.
-
#humanize(input) ⇒ String
Humanize a string.
-
#initialize(&blk) {|the| ... } ⇒ Dry::Inflector
constructor
Instantiate the inflector.
-
#ordinalize(number) ⇒ String
Ordinalize a number.
-
#pluralize(input) ⇒ String
Pluralize a string.
-
#singularize(input) ⇒ String
Singularize a string.
-
#tableize(input) ⇒ String
Tableize a string.
-
#uncountable?(input) ⇒ TrueClass, FalseClass
private
Check if the input is an uncountable word.
-
#underscore(input) ⇒ String
Underscore a string.
Constructor Details
#initialize(&blk) {|the| ... } ⇒ Dry::Inflector
Instantiate the inflector
33 34 35 |
# File 'lib/dry/inflector.rb', line 33 def initialize(&blk) @inflections = Inflections.build(&blk) end |
Instance Method Details
#camelize(input) ⇒ String
Camelize a string
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/dry/inflector.rb', line 49 def camelize(input) input = input.to_s.dup input.sub!(/^[a-z\d]*/) { |match| inflections.acronyms.apply_to(match) } input.gsub!(%r{(?:_|(/))([a-z\d]*)}i) do m1 = Regexp.last_match(1) m2 = Regexp.last_match(2) "#{m1}#{inflections.acronyms.apply_to(m2)}" end input.gsub!("/", "::") input end |
#classify(input) ⇒ String
Classify a string
93 94 95 |
# File 'lib/dry/inflector.rb', line 93 def classify(input) camelize(singularize(input.to_s.sub(/.*\./, ""))) end |
#constantize(input) ⇒ Class, Module
Find a constant with the name specified in the argument string
The name is assumed to be the one of a top-level constant, constant scope of caller is ignored
77 78 79 |
# File 'lib/dry/inflector.rb', line 77 def constantize(input) Object.const_get(input) end |
#dasherize(input) ⇒ String
Dasherize a string
109 110 111 |
# File 'lib/dry/inflector.rb', line 109 def dasherize(input) input.to_s.tr("_", "-") end |
#demodulize(input) ⇒ String
Demodulize a string
125 126 127 |
# File 'lib/dry/inflector.rb', line 125 def demodulize(input) input.to_s.split("::").last end |
#foreign_key(input) ⇒ String
Creates a foreign key name
164 165 166 |
# File 'lib/dry/inflector.rb', line 164 def foreign_key(input) "#{underscore(demodulize(input))}_id" end |
#humanize(input) ⇒ String
Humanize a string
142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/dry/inflector.rb', line 142 def humanize(input) input = input.to_s result = inflections.humans.apply_to(input) result.chomp!("_id") result.tr!("_", " ") match = /(?<separator>\W)/.match(result) separator = match ? match[:separator] : DEFAULT_SEPARATOR result.split(separator).map.with_index { |word, index| inflections.acronyms.apply_to(word, index.zero?) }.join(separator) end |
#ordinalize(number) ⇒ String
Ordinalize a number
184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/dry/inflector.rb', line 184 def ordinalize(number) # rubocop:disable Metrics/MethodLength abs_value = number.abs if ORDINALIZE_TH.key?(abs_value % 100) "#{number}th" else case abs_value % 10 when 1 then "#{number}st" when 2 then "#{number}nd" when 3 then "#{number}rd" else "#{number}th" end end end |
#pluralize(input) ⇒ String
Pluralize a string
212 213 214 215 216 |
# File 'lib/dry/inflector.rb', line 212 def pluralize(input) input = input.to_s return input if uncountable?(input) inflections.plurals.apply_to(input) end |
#singularize(input) ⇒ String
Singularize a string
231 232 233 234 235 |
# File 'lib/dry/inflector.rb', line 231 def singularize(input) input = input.to_s return input if uncountable?(input) inflections.singulars.apply_to(input) end |
#tableize(input) ⇒ String
Tableize a string
249 250 251 252 |
# File 'lib/dry/inflector.rb', line 249 def tableize(input) input = input.to_s.gsub(/::/, "_") pluralize(underscore(input)) end |
#uncountable?(input) ⇒ TrueClass, FalseClass
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.
Check if the input is an uncountable word
287 288 289 |
# File 'lib/dry/inflector.rb', line 287 def uncountable?(input) !(input =~ /\A[[:space:]]*\z/).nil? || inflections.uncountables.include?(input.downcase) end |
#underscore(input) ⇒ String
Underscore a string
266 267 268 269 270 271 272 273 274 275 276 277 278 |
# File 'lib/dry/inflector.rb', line 266 def underscore(input) input = input.to_s.gsub("::", "/") input.gsub!(inflections.acronyms.regex) do m1 = Regexp.last_match(1) m2 = Regexp.last_match(2) "#{m1 ? '_' : '' }#{m2.downcase}" end input.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2') input.gsub!(/([a-z\d])([A-Z])/, '\1_\2') input.tr!("-", "_") input.downcase! input end |