lucky_case
The lucky ruby gem to identify and convert strings from any letter case to another. Plus some extra functions.
I also created a javascript port named lucky-case.
Useful when working with conventions, where class names, method names and file names needs to be converted.
- Converters: Only characters, numbers, dashes and underlines are allowed inside a string.
 - Must not start with dash or number, underlines at the beginning are allowed by default and can be allowed/removed/controlled by parameter (when used for private methods for example)
 
Contents
- Usage
 - Installation
 - Documentation
 - Contributing
 
Usage
You can either use the static LuckyCase class with its method or optionally monkey patch the String class.
Approach 1: Using the static class
require 'lucky_case'
# converters
LuckyCase.snake_case('PascalToSnake')                  # => 'pascal_to_snake'
LuckyCase.upper_snake_case('Train-To-Upper-Snake')     # => 'TRAIN_TO_UPPER_SNAKE'
LuckyCase.pascal_case('snake_to_pascal')               # => 'SnakeToPascal'
LuckyCase.camel_case('dash-to-camel-case')             # => 'dashToCamelCase'
LuckyCase.dash_case('PascalToDashCase')                # => 'pascal-to-dash-case'
LuckyCase.upper_dash_case('PascalToUpperDash')         # => 'PASCAL-TO-UPPER-DASH'
LuckyCase.train_case('snake_to_train_case')            # => 'Snake-To-Train-Case'
LuckyCase.word_case('PascalToWordCase')                # => 'pascal to word case'
LuckyCase.upper_word_case('PascalToUpperWord')         # => 'PASCAL TO UPPER WORD'
LuckyCase.capital_word_case('snake_to_capital_word')   # => 'Snake To Capital Word'
LuckyCase.sentence_case('snake_to_sentence_case')      # => 'Snake to sentence case'
LuckyCase.mixed_case('example_snake_string')           # => 'Example-snake_STRING'
# converter by type
LuckyCase.convert_case('some_snake', :pascal_case)     # => 'SomeSnake'
# transformers
LuckyCase.lower_case('Some_FuckingShit')               # => 'some_fuckingshit'
LuckyCase.upper_case('Some_FuckingShit')               # => 'SOME_FUCKINGSHIT'
LuckyCase.capital('example')                           # => 'Example'
LuckyCase.capitalize('example')                        # => 'Example'
LuckyCase.decapitalize('ExaMple')                      # => 'exaMple'
LuckyCase.swap_case('SomeSwappy_Case-Example')         # => 'sOMEsWAPPY-cASE_eXAMPLE'
LuckyCase.constantize('some_constant')                 # => SomeConstant
LuckyCase.constantize('SOME_CONSTANT')                 # => SomeConstant
LuckyCase.constantize('some/path_example/folder')      # => Some::PathExample::Folder
LuckyCase.deconstantize(SomeConstant)                  # => 'some_constant' // default case_type: :snake_case
LuckyCase.deconstantize(Some::PathExample::Folder, case_type: :camel_case)  # => 'some/pathExample/folder'
# identifiers
LuckyCase.case('this_can_only_be_snake_case')          # => :snake_case
LuckyCase.cases('validformultiple')                    # => [ :snake_case, :camel_case, :dash_case, :word_case ]
# checkers
LuckyCase.snake_case?('valid_snake_case')              # => true
LuckyCase.upper_snake_case?('UPPER_SNAKE')             # => true
LuckyCase.pascal_case?('PascalCase')                   # => true
LuckyCase.camel_case?('camelCase')                     # => true
LuckyCase.dash_case?('dash-case')                      # => true
LuckyCase.upper_dash_case?('DASH-CASE')                # => true
LuckyCase.train_case?('Train-Case')                    # => true
LuckyCase.word_case?('word case')                      # => true
LuckyCase.upper_word_case?('UPPER WORD CASE')          # => true
LuckyCase.capital_word_case?('Capital Word Case')      # => true
LuckyCase.sentence_case?('Sentence case string')       # => true
LuckyCase.mixed_case?('mixed_Case')                    # => true
LuckyCase.upper_case?('UPPER50984')                    # => true
LuckyCase.lower_case?('lower_cheese')                  # => true
LuckyCase.capital?('Some')                             # => true
LuckyCase.capitalized?('some')                         # => false
LuckyCase.decapitalized?('soMe')                       # => true
LuckyCase.not_capital?('Some')                         # => false
LuckyCase.valid_case_type?(:snake_case)                # => true
LuckyCase.valid_case_type?(:apple_case)                # => false
LuckyCase.valid_case_string?('validString')            # => true
LuckyCase.valid_case_string?('1nV4lid$tring')          # => falseApproach 2: Monkey patch the string class
With monkey patching you can access the same methods (except #deconstantize, #valid_case_type?) of LuckyCase directly from strings.
Additionally they provide versions with exclamation mark for direct manipulation.
Because the methods #case and #cases are so general and could lead to conflicts, they are called #letter_case and #letter_cases at strings.
require 'lucky_case/string'
a = 'ExampleString'
a.pascal_case?                          # => true
a.snake_case                            # => 'example_string'
a                                       # => 'ExampleString'
# string variable manipulation
a.snake_case!                           # => 'example_string'
a                                       # => 'example_string'
...
# identifiers
# got a other method name here because 'case' might be to common and cause conflicts
b = 'example'
b.letter_case                           # => :snake_case
b.letter_cases                          # => [ :snake_case, :camel_case, :dash_case, :word_case ]Installation
Add this line to your application's Gemfile:
gem 'lucky_case'And then execute:
$ bundle install
Or install it yourself by:
$ gem install lucky_case
Documentation
Check out the doc at RubyDoc https://www.rubydoc.info/gems/lucky_case
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/magynhard/lucky_case. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.