Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProperCase

An Elixir library that converts keys in maps between snake_case and camel_case.

Useful as a plug in Phoenix for converting incoming params from JavaScript's camelCase to Elixir's snake_case

Converts all keys in maps to snake case ProperCase.to_snake_case/1

Converts all keys in maps to camel case ProperCase.to_camel_case/1

Converts a string to snake case ProperCase.snake_case/1

Converts a string to camel case ProperCase.camel_case/1

Usage

Example: ProperCase.to_snake_case

# Before:
%{"user" => %{
    "firstName" => "Han",
    "lastName" => "Solo",
    "alliesInCombat" => [
      %{"name" => "Luke", "weaponOfChoice" => "lightsaber"},
      %{"name" => "Chewie", "weaponOfChoice" => "bowcaster"},
      %{"name" => "Leia", "weaponOfChoice" => "blaster"}
    ] 
  }
} 

# After:
%{"user" => %{
    "first_name" => "Han",
    "last_name" => "Solo",
    "allies_in_combat" => [
      %{"name" => "Luke", "weapon_of_choice" => "lightsaber"},
      %{"name" => "Chewie", "weapon_of_choice" => "bowcaster"},
      %{"name" => "Leia", "weapon_of_choice" => "blaster"}
    ]
  }
}

Using as a plug in Phoenix

ProperCase is extremely useful as a part of your connection pipeline, converting incoming params from JavaScript's camelCase to Elixir's snake_case

Plug it into your router.ex connection pipeline like so:

  pipeline :api do
    plug :accepts, ["json"]
    plug ProperCase.Plug.SnakeCaseParams
  end

camelCase before encoding json in Phoenix

Set phoenix's json encoder in config/config.exs, this way ProperCase will camelCase your data before encoding to JSON:

  :phoenix, :format_encoders, json: ProperCase.JSONEncoder.CamelCase

Custom data transform before encoding with Phoenix

To ensure that outgoing params are converted to camelCase, define a custom JSON encoder that runs a transform before encoding to json.

def MyApp.CustomJSONEncoder do
  use ProperCase.JSONEncoder, transform: &ProperCase.to_camel_case/1
end

config.exs

  :phoenix, :format_encoders, json: MyApp.CustomJSONEncoder

Installation

If available in Hex, the package can be installed as:

  1. Add proper_case to your list of dependencies in mix.exs:

    def deps do [{:proper_case, "~> 1.0.0"}] end

  2. Ensure proper_case is started before your application:

    def application do [applications: [:proper_case]] end

Contributors

About

Converts keys of maps to `snake_case`, useful as a plug to format params in the Phoenix connection pipeline

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages