From 0c75309d047a3670aa53051ef64c281d9adc8a62 Mon Sep 17 00:00:00 2001 From: Theo Dowling Date: Tue, 3 Oct 2017 00:55:03 +0200 Subject: [PATCH] Order elixir.md alphabetically --- languages/ELIXIR.md | 367 +++++++++++++++++++++++++------------------- 1 file changed, 207 insertions(+), 160 deletions(-) diff --git a/languages/ELIXIR.md b/languages/ELIXIR.md index 351621b6..63973d1f 100644 --- a/languages/ELIXIR.md +++ b/languages/ELIXIR.md @@ -1,20 +1,142 @@ -## Elixir +## Alphabetical index of projects in Elixir -[**Phoenix**](http://www.phoenixframework.org/)  —  Productive. Reliable. Fast. A productive web framework that does not compromise speed and maintainability. +| | | | | | | | +|--- |--- |--- |--- |--- |--- | ---| +|[A](#a)|[B](#b)|[C](#c)|[D](#d)|[E](#e)|[F](#f)|[G](#g)| +|[H](#h)|[I](#i)|[J](#j)|[K](#k)|[L](#l)|[M](#m)|[N](#n)| +|[P](#p)|[Q](#q)|[R](#r)|[S](#s)|[T](#t)|[U](#u)|[V](#v)| +|[W](#w)|[X](#x)|[Y](#y)|[Z](#z)| | | | +| | | | | | | | -![phoenix](https://raw.githubusercontent.com/phoenixframework/phoenix/master/priv/static/phoenix.png) +
+ +## B + +[**Beaker**](https://github.com/hahuang65/beaker) is a tool that can be used to keep track of metrics for your Elixir project. It aims to provide an easy way to register statistics as well as an easy way to visualize them. + +![](https://raw.githubusercontent.com/hahuang65/beaker/master/beaker_sample.png) --- -[**phoenix-trello**](https://github.com/bigardone/phoenix-trello). Trello tribute done with Elixir, Phoenix Framework, Webpack, React and Redux. -![phoenix-trello](https://camo.githubusercontent.com/9e4bcb76cee6115acc4aa3295cec356ae1d25bef/687474703a2f2f636f64656c6f7665616e64626f617264732e636f6d2f696d616765732f626c6f672f7472656c6c6f5f747269627574655f70745f312f7369676e2d696e2d61386661313964612e6a7067) +## C + +[**Cog**](https://github.com/operable/cog) brings the power of the command line to the place you collaborate with your team all the time -- your chat window. Powerful access control means you can collaborate around even the most sensitive tasks with confidence. A focus on extensibility and adaptability means that you can respond quickly to the unexpected, without your team losing visibility. --- + [**credo**](https://github.com/rrrene/credo)  —  a static code analysis tool for the Elixir language with a focus on teaching and code consistency. ![credo](https://cdn-images-1.medium.com/max/720/0*wJ4w0yXU-HCsyPdt.) --- + +## D + +[**distillery**](https://github.com/bitwalker/distillery)  —  a pure Elixir implementation of release packaging functionality for the Erlang VM (BEAM). +Every alchemist requires good tools, and one of the greatest tools in the alchemist’s disposal is the distillery. The purpose of the distillery is to take something and break it down to it’s component parts, reassembling it into something better, more powerful. That is exactly what this project does — it takes your Mix project and produces an Erlang/OTP release, a distilled form of your raw application’s components; a single package which can be deployed anywhere, independently of an Erlang/Elixir installation. No dependencies, no hassle. + +This is a pure-Elixir, dependency-free implementation of release generation for Elixir projects. It is currently a standalone package, but may be integrated into Mix at some point in the future. + +--- + +## E + +[**ex_admin** ](https://github.com/smpallen99/ex_admin) —  an add on for an application using the Phoenix Framework to create an CRUD administration tool with little or no code. By running a few mix tasks to define which Ecto Models you want to administer, you will have something that works with no additional code. + +![ex_admin](https://camo.githubusercontent.com/b67ecbe1c05460a6b838bec9f33286bec9a5db8a/687474703a2f2f657861646d696e2e696e666f2f646f632f65785f61646d696e5f626c75652e706e67) + +--- + +[**ExVCR**](https://github.com/parroty/exvcr). Record and replay HTTP interactions library for elixir. It's inspired by Ruby's VCR (https://github.com/vcr/vcr), and trying to provide similar functionalities. + +Basics + +- The following HTTP libraries can be applied. + - ibrowse-based libraries. + - HTTPotion + - hackney-based libraries. + - HTTPoison + - support is very limited, and tested only with sync request of HTTPoison yet. + - httpc-based libraries. + - erlang-oauth + - tirexs + - support is very limited, and tested only with :httpc.request/1 and :httpc.request/4 + +- HTTP interactions are recorded as JSON file. + - The JSON file can be recorded automatically (vcr_cassettes) or manually updated (custom_cassettes) + +--- + +## F + +[**Faker**](https://github.com/igas/faker) is a pure Elixir library for generating fake data. + +--- + +[**Floki**](https://github.com/philss/floki) is a simple HTML parser that enables search for nodes using CSS selectors. + +Take this HTML as an example: + +```html + + + +
+

Floki

+ Enables search using CSS selectors + Github page + philss +
+ Hex package + + +``` + +Here are some queries that you can perform (with return examples): + +```elixir +Floki.find(html, "#content") +# => [{"section", [{"id", "content"}], +# => [{"p", [{"class", "headline"}], ["Floki"]}, +# => {"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}]}] + + +Floki.find(html, "p.headline") +# => [{"p", [{"class", "headline"}], ["Floki"]}] + +Floki.find(html, "p.headline") +|> Floki.raw_html +# =>

Floki

+ + +Floki.find(html, "a") +# => [{"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}, +# => {"a", [{"href", "https://hex.pm/packages/floki"}], ["Hex package"]}] + + +Floki.find(html, "a[href^=https]") +# => [{"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}, +# => {"a", [{"href", "https://hex.pm/packages/floki"}], ["Hex package"]}] + + +Floki.find(html, "#content a") +# => [{"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}] + + +Floki.find(html, "[data-model=user]") +# => [{"span", [{"data-model", "user"}], ["philss"]}] + + +Floki.find(html, ".headline, a") +# => [{"p", [{"class", "headline"}], ["Floki"]}, +# => {"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}, +# => {"a", [{"href", "https://hex.pm/packages/floki"}], ["Hex package"]}] +``` + +--- + +## G + [**guardian**](https://github.com/ueberauth/guardian)  —  an authentication framework for use with Elixir applications. Guardian is based on similar ideas to Warden but is re-imagined for modern systems where Elixir manages the authentication requirements. @@ -22,16 +144,50 @@ Guardian remains a functional system. It integrates with Plug, but can be used o The core currency of authentication in Guardian is JSON Web Tokens (JWT). You can use the JWT to authenticate web endpoints, channels, and TCP sockets and it can contain any authenticated assertions that the issuer wants to include. --- -[**Beaker**](https://github.com/hahuang65/beaker) is a tool that can be used to keep track of metrics for your Elixir project. It aims to provide an easy way to register statistics as well as an easy way to visualize them. -![](https://raw.githubusercontent.com/hahuang65/beaker/master/beaker_sample.png) +## H + +[**hound**](https://github.com/HashNuke/hound)  — an  Elixir library for writing integration tests and browser automation. + +ExUnit example: +```elixir +defmodule HoundTest do + use ExUnit.Case + use Hound.Helpers + + hound_session + + test "the truth", meta do + navigate_to("http://example.com/guestbook.html") + + element = find_element(:name, "message") + fill_field(element, "Happy Birthday ~!") + submit_element(element) + + assert page_title() == "Thank you" + end + +end +``` --- + [**httpoison** ](https://github.com/edgurgel/httpoison) —  yet another HTTP client for Elixir powered by hackney. ![httpoison](https://camo.githubusercontent.com/e7895297ccdfb59b971ea721eb617dc0faa9d94d/687474703a2f2f692e696d6775722e636f6d2f5777714e384a4f2e706e67) +## K + --- + +[**kitto** ](https://github.com/kittoframework/kitto) —  a framework to help you create dashboards, written in Elixir/React. + +![kitto](https://camo.githubusercontent.com/fd5296f52cb944cc4bbec6b62f98bd395488bf84/687474703a2f2f692e696d6775722e636f6d2f59675a696258552e706e67) + +--- + +## M + [**maru**](https://github.com/elixir-maru/maru)  — an  Elixir RESTful Framework Example: @@ -119,144 +275,7 @@ end ``` --- -[**hound**](https://github.com/HashNuke/hound)  — an  Elixir library for writing integration tests and browser automation. - -ExUnit example: -```elixir -defmodule HoundTest do - use ExUnit.Case - use Hound.Helpers - - hound_session - - test "the truth", meta do - navigate_to("http://example.com/guestbook.html") - - element = find_element(:name, "message") - fill_field(element, "Happy Birthday ~!") - submit_element(element) - - assert page_title() == "Thank you" - end - -end -``` ---- -[**distillery**](https://github.com/bitwalker/distillery)  —  a pure Elixir implementation of release packaging functionality for the Erlang VM (BEAM). -Every alchemist requires good tools, and one of the greatest tools in the alchemist’s disposal is the distillery. The purpose of the distillery is to take something and break it down to it’s component parts, reassembling it into something better, more powerful. That is exactly what this project does — it takes your Mix project and produces an Erlang/OTP release, a distilled form of your raw application’s components; a single package which can be deployed anywhere, independently of an Erlang/Elixir installation. No dependencies, no hassle. - -This is a pure-Elixir, dependency-free implementation of release generation for Elixir projects. It is currently a standalone package, but may be integrated into Mix at some point in the future. - ---- -[**timex** ](https://github.com/bitwalker/timex) —  a rich, comprehensive Date/Time library for Elixir projects, with full timezone support via the :tzdata package. If you need to manipulate dates, times, datetimes, timestamps, etc., then Timex is for you! It is very easy to use Timex types in place of default Erlang types, as well as Ecto types via the timex_ecto package. - -Here’s a few simple examples: -```elixir -> use Timex -> Timex.today -~D[2016-02-29] - -> datetime = Timex.now -# Timex.now("America/Chicago") -# Duration.now -# - -> {:ok, default_str} = Timex.format(datetime, "{ISO:Extended}") -{:ok, "2016-02-29T12:30:30.120+00:00"} - -> {:ok, relative_str} = Timex.shift(datetime, minutes: -3) |> Timex.format("{relative}", :relative) -{:ok, "3 minutes ago"} - -> strftime_str = Timex.format!(datetime, "%FT%T%:z", :strftime) -"2016-02-29T12:30:30+00:00" - -> Timex.parse(default_str, "{ISO:Extended}") -{:ok, # Timex.parse!(strftime_str, "%FT%T%:z", :strftime) -# - - -
-

Floki

- Enables search using CSS selectors - Github page - philss -
- Hex package - - -``` - -Here are some queries that you can perform (with return examples): - -```elixir -Floki.find(html, "#content") -# => [{"section", [{"id", "content"}], -# => [{"p", [{"class", "headline"}], ["Floki"]}, -# => {"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}]}] - - -Floki.find(html, "p.headline") -# => [{"p", [{"class", "headline"}], ["Floki"]}] - -Floki.find(html, "p.headline") -|> Floki.raw_html -# =>

Floki

- - -Floki.find(html, "a") -# => [{"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}, -# => {"a", [{"href", "https://hex.pm/packages/floki"}], ["Hex package"]}] - - -Floki.find(html, "a[href^=https]") -# => [{"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}, -# => {"a", [{"href", "https://hex.pm/packages/floki"}], ["Hex package"]}] - - -Floki.find(html, "#content a") -# => [{"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}] - - -Floki.find(html, "[data-model=user]") -# => [{"span", [{"data-model", "user"}], ["philss"]}] - - -Floki.find(html, ".headline, a") -# => [{"p", [{"class", "headline"}], ["Floki"]}, -# => {"a", [{"href", "http://github.com/philss/floki"}], ["Github page"]}, -# => {"a", [{"href", "https://hex.pm/packages/floki"}], ["Hex package"]}] -``` - ---- [**Maxwell**](https://github.com/zhongwencool/maxwell) is an HTTP client that provides a common interface over `:httpc`, `:ibrowse`, `:hackney`. Usage: @@ -301,29 +320,57 @@ end ``` --- -[**ExVCR**](https://github.com/parroty/exvcr). Record and replay HTTP interactions library for elixir. It's inspired by Ruby's VCR (https://github.com/vcr/vcr), and trying to provide similar functionalities. -Basics +## P -- The following HTTP libraries can be applied. - - ibrowse-based libraries. - - HTTPotion - - hackney-based libraries. - - HTTPoison - - support is very limited, and tested only with sync request of HTTPoison yet. - - httpc-based libraries. - - erlang-oauth - - tirexs - - support is very limited, and tested only with :httpc.request/1 and :httpc.request/4 - -- HTTP interactions are recorded as JSON file. - - The JSON file can be recorded automatically (vcr_cassettes) or manually updated (custom_cassettes) +[**Phoenix**](http://www.phoenixframework.org/)  —  Productive. Reliable. Fast. A productive web framework that does not compromise speed and maintainability. +![phoenix](https://raw.githubusercontent.com/phoenixframework/phoenix/master/priv/static/phoenix.png) --- -[**Cog**](https://github.com/operable/cog) brings the power of the command line to the place you collaborate with your team all the time -- your chat window. Powerful access control means you can collaborate around even the most sensitive tasks with confidence. A focus on extensibility and adaptability means that you can respond quickly to the unexpected, without your team losing visibility. +[**phoenix-trello**](https://github.com/bigardone/phoenix-trello). Trello tribute done with Elixir, Phoenix Framework, Webpack, React and Redux. +![phoenix-trello](https://camo.githubusercontent.com/9e4bcb76cee6115acc4aa3295cec356ae1d25bef/687474703a2f2f636f64656c6f7665616e64626f617264732e636f6d2f696d616765732f626c6f672f7472656c6c6f5f747269627574655f70745f312f7369676e2d696e2d61386661313964612e6a7067) --- + +## Q + [**Quantum**](https://github.com/c-rack/quantum-elixir) - is a Cron-like job scheduler for Elixir. +## T + +[**timex** ](https://github.com/bitwalker/timex) —  a rich, comprehensive Date/Time library for Elixir projects, with full timezone support via the :tzdata package. If you need to manipulate dates, times, datetimes, timestamps, etc., then Timex is for you! It is very easy to use Timex types in place of default Erlang types, as well as Ecto types via the timex_ecto package. + +Here’s a few simple examples: +```elixir +> use Timex +> Timex.today +~D[2016-02-29] + +> datetime = Timex.now +# Timex.now("America/Chicago") +# Duration.now +# + +> {:ok, default_str} = Timex.format(datetime, "{ISO:Extended}") +{:ok, "2016-02-29T12:30:30.120+00:00"} + +> {:ok, relative_str} = Timex.shift(datetime, minutes: -3) |> Timex.format("{relative}", :relative) +{:ok, "3 minutes ago"} + +> strftime_str = Timex.format!(datetime, "%FT%T%:z", :strftime) +"2016-02-29T12:30:30+00:00" + +> Timex.parse(default_str, "{ISO:Extended}") +{:ok, # Timex.parse!(strftime_str, "%FT%T%:z", :strftime) +#