From d5fae58e1d0192eaddfbbfc75000400f68359a7f Mon Sep 17 00:00:00 2001 From: "Kian-Meng, Ang" Date: Thu, 9 Dec 2021 08:29:03 +0800 Subject: [PATCH] Misc doc changes Besides other documentation changes, this commit includes all relevant documents to the generated HTML doc for HexDocs.pm and leverages on latest features of ExDoc. --- .formatter.exs | 3 +- .gitignore | 29 ++++--- .tool-versions | 1 + CHANGELOG.md | 11 ++- LICENSE => LICENSE.md | 2 +- README.md | 47 +++++++---- mix.exs | 55 ++++++------ mix.lock | 189 +++++++----------------------------------- 8 files changed, 122 insertions(+), 215 deletions(-) rename LICENSE => LICENSE.md (98%) diff --git a/.formatter.exs b/.formatter.exs index 2bed17c..d2cda26 100644 --- a/.formatter.exs +++ b/.formatter.exs @@ -1,3 +1,4 @@ +# Used by "mix format" [ - inputs: ["mix.exs", "{config,lib,test}/**/*.{ex,exs}"] + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] ] diff --git a/.gitignore b/.gitignore index 1c3647c..5869ae2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,17 @@ # The directory Mix will write compiled artifacts to. -/_build +/_build/ # If you run "mix test --cover", coverage assets end up here. -cover +/cover/ # The directory Mix downloads your dependencies sources to. -deps +/deps/ -# Where 3rd-party dependencies like ExDoc output generated docs. -doc -docs +# Where third-party dependencies like ExDoc output generated docs. +/doc/ + +# Ignore .fetch files in case you like to edit your project deps locally. +/.fetch # If the VM crashes, it generates a dump, let's ignore it too. erl_crash.dump @@ -17,15 +19,20 @@ erl_crash.dump # Also ignore archive artifacts (built via "mix archive.build"). *.ez -# vim swap files +# Ignore package tarball (built via "mix hex.build"). +triplex-*.tar + +# Temporary files, for example, from tests. +/tmp/ + +# Vim swap files. *.swp -# mac files +# macOS files. .DS_Store -# ctags file +# ctags file. tags -tmp - +# Idea config file. .idea diff --git a/.tool-versions b/.tool-versions index 944495e..5dc4ad6 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1,2 @@ elixir 1.7 +erlang 21.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 434dab2..ffc306c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,17 @@ # Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + ### MyXQL Support - I created a support for myxql package and mariaex package was removed, to use this update you will need to add the myxql package e.g `{:myxql, "~> 0.3.0"}` in your `mix.exs` file. -## 1.3.0 +## v1.3.0 (2019-05-31) ### Bug fixes @@ -59,7 +64,7 @@ end) For more details about these function check the online documentation for `Triplex.create/1,2` and `Triplex.create_schema/1,2,3`. -## 1.3.0-rc.1 +## v1.3.0-rc.1 (2019-03-07) ### Bug fixes @@ -69,7 +74,7 @@ and `Triplex.create_schema/1,2,3`. - docker-compose configuration that allows easy setup for test databases. -## 1.3.0-rc.0 +## v1.3.0-rc.0 (2019-03-03) ### Added diff --git a/LICENSE b/LICENSE.md similarity index 98% rename from LICENSE rename to LICENSE.md index 9ad4278..6bbed47 100644 --- a/LICENSE +++ b/LICENSE.md @@ -1,4 +1,4 @@ -MIT License +# The MIT License Copyright (c) 2017 ateliware diff --git a/README.md b/README.md index e97d1ce..2b0dd50 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ # Triplex [![Build Status](https://travis-ci.org/ateliware/triplex.svg?branch=master)](https://travis-ci.org/ateliware/triplex) -[![Version](http://img.shields.io/hexpm/v/triplex.svg?style=flat)](https://hex.pm/packages/triplex) -[![Downloads](https://img.shields.io/hexpm/dt/triplex.svg)](https://hex.pm/packages/triplex) [![Coverage Status](https://coveralls.io/repos/github/ateliware/triplex/badge.svg?branch=master)](https://coveralls.io/github/ateliware/triplex?branch=master) -[![Code Climate](https://img.shields.io/codeclimate/github/ateliware/triplex.svg)](https://codeclimate.com/github/ateliware/triplex) +[![Module Version](https://img.shields.io/hexpm/v/triplex.svg)](https://hex.pm/packages/triplex) +[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/triplex/) [![Inline docs](http://inch-ci.org/github/ateliware/triplex.svg?branch=master&style=flat)](http://inch-ci.org/github/ateliware/triplex) +[![Total Download](https://img.shields.io/hexpm/dt/triplex.svg)](https://hex.pm/packages/triplex) +[![License](https://img.shields.io/hexpm/l/triplex.svg)](https://github.com/ateliware/triplex/blob/master/LICENSE) +[![Last Updated](https://img.shields.io/github/last-commit/ateliware/triplex.svg)](https://github.com/ateliware/triplex/commits/master) A simple and effective way to build multitenant applications on top of Ecto. @@ -19,19 +21,19 @@ Triplex leverages database data segregation techniques (such as [Postgres schema 1. Add `triplex` to your list of dependencies in `mix.exs`: -```elixir -def deps do - [ - {:triplex, "~> 1.3.0"}, - ] -end -``` + ```elixir + def deps do + [ + {:triplex, "~> 1.3.0"}, + ] + end + ``` 2. Run in your shell: -```bash -mix deps.get -``` + ```bash + mix deps.get + ``` ## Configuration @@ -46,15 +48,21 @@ In MySQL, each tenant will have its own MySQL database. Triplex uses a table called `tenants` in the main Repo to keep track of the different tenants. Generate the migration that will create the table by running: - mix triplex.mysql.install +```bash +mix triplex.mysql.install +``` And then create the table: - mix ecto.migrate +```bash +mix ecto.migrate +``` Otherwise, if you wish to skip this behavior, configure Triplex to use the default `information_schema.schemata` table: - config :triplex, tenant_table: :"information_schema.schemata" +```elixir +config :triplex, tenant_table: :"information_schema.schemata" +``` ## Usage @@ -145,3 +153,10 @@ For more information, check the `Triplex.Plug` documentation for an overview of ## Thanks This lib is inspired by the gem [apartment](https://github.com/influitive/apartment), which does the same thing in Ruby on Rails world. We also give credit (and a lot of thanks) to @Dania02525 for the work on [apartmentex](https://github.com/Dania02525/apartmentex). A lot of the work here is based on what she has done there. And also to @jeffdeville, who forked ([tenantex](https://github.com/jeffdeville/tenantex)) taking a different approach, which gave us additional ideas. + +## Copyright and License + +Copyright (c) 2017 ateliware + +This work is free. You can redistribute it and/or modify it under the +terms of the MIT License. See the [LICENSE.md](./LICENSE.md) file for more details. diff --git a/mix.exs b/mix.exs index cbfb488..57c84cf 100644 --- a/mix.exs +++ b/mix.exs @@ -1,12 +1,14 @@ defmodule Triplex.Mixfile do use Mix.Project + @source_url "https://github.com/ateliware/triplex" + @version "1.3.0" + def project do [ app: :triplex, - version: "1.3.0", + version: @version, elixir: "~> 1.7", - description: "Build multitenant applications on top of Ecto.", package: package(), elixirc_paths: elixirc_paths(Mix.env()), build_embedded: Mix.env() == :prod, @@ -15,15 +17,11 @@ defmodule Triplex.Mixfile do test_coverage: [tool: ExCoveralls], preferred_cli_env: preferred_cli_env(), deps: deps(), - docs: [main: "readme", extras: ["README.md", "CHANGELOG.md"]], + docs: docs(), name: "Triplex", - source_url: "https://github.com/ateliware/triplex" ] end - # Configuration for the OTP application - # - # Type "mix help compile.app" for more information def application do [extra_applications: [:logger]] end @@ -32,30 +30,17 @@ defmodule Triplex.Mixfile do defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] - # Dependencies can be Hex packages: - # - # {:mydep, "~> 0.3.0"} - # - # Or git/path repositories: - # - # {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"} - # - # To depend on another app inside the umbrella: - # - # {:myapp, in_umbrella: true} - # - # Type "mix help deps" for more examples and options defp deps do [ {:credo, "~> 0.8.10", only: [:test, :dev], optional: true, runtime: false}, + {:decimal, ">= 1.6.0"}, {:ecto_sql, "~> 3.4"}, - {:ex_doc, "~> 0.18.0", only: :dev}, + {:ex_doc, ">= 0.0.0", only: :docs, runtime: false}, {:excoveralls, "~> 0.10", only: :test}, - {:inch_ex, ">= 0.0.0", only: :docs}, + {:inch_ex, ">= 0.0.0", only: :docs, runtime: false}, + {:myxql, ">= 0.3.0", optional: true}, {:plug, "~> 1.6", optional: true}, {:postgrex, ">= 0.15.0", optional: true}, - {:myxql, ">= 0.3.0", optional: true}, - {:decimal, ">= 1.6.0"} ] end @@ -76,18 +61,36 @@ defmodule Triplex.Mixfile do end defp package do - # These are the default files included in the package [ name: :triplex, + description: "Build multitenant applications on top of Ecto.", files: ["lib", "mix.exs", "README*", "LICENSE*"], maintainers: ["Kelvin Stinghen"], licenses: ["MIT"], - links: %{"GitHub" => "https://github.com/ateliware/triplex"} + links: %{"GitHub" => @source_url} + ] + end + + defp docs do + [ + extras: [ + "CHANGELOG.md": [title: "Changelog"], + "CONTRIBUTING.md": [title: "Contributing"], + "CODE_OF_CONDUCT.md": [title: "Code of Conduct"], + "LICENSE.md": [title: "License"], + "README.md": [title: "Overview"] + ], + main: "readme", + source_url: @source_url, + source_ref: "v#{@version}", + formatters: ["html"] ] end defp preferred_cli_env do [ + docs: :docs, + "hex.publish": :docs, coveralls: :test, "coveralls.travis": :test, "coveralls.detail": :test, diff --git a/mix.lock b/mix.lock index 96411a9..f121eab 100644 --- a/mix.lock +++ b/mix.lock @@ -1,159 +1,34 @@ %{ - bunt: - {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", - [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, - certifi: - {:hex, :certifi, "2.4.2", "75424ff0f3baaccfd34b1214184b6ef616d89e420b258bb0a5ea7d7bc628f7f0", - [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], - "hexpm", "01d479edba0569a7b7a2c8bf923feeb6dc6a358edc2965ef69aea9ba288bb243"}, - connection: - {:hex, :connection, "1.0.4", - "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", - "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, - credo: - {:hex, :credo, "0.8.10", "261862bb7363247762e1063713bb85df2bbd84af8d8610d1272cd9c1943bba63", - [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm", - "f3fe29f8de6be431c7736a933a3897fe9aa45533b1d1358b3691ac8ec4371e8f"}, - db_connection: - {:hex, :db_connection, "2.2.2", - "3bbca41b199e1598245b716248964926303b5d4609ff065125ce98bcd368939e", [:mix], - [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", - "642af240d8a8affb93b4ba5a6fcd2bbcbdc327e1a524b825d383711536f8070c"}, - decimal: - {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", - [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, - earmark: - {:hex, :earmark, "1.3.1", "73812f447f7a42358d3ba79283cfa3075a7580a3a2ed457616d6517ac3738cb9", - [:mix], [], "hexpm", "000aaeff08919e95e7aea13e4af7b2b9734577b3e6a7c50ee31ee88cab6ec4fb"}, - ecto: - {:hex, :ecto, "3.4.5", "2bcd262f57b2c888b0bd7f7a28c8a48aa11dc1a2c6a858e45dd8f8426d504265", - [:mix], - [ - {:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, - {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, - {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]} - ], "hexpm", "8c6d1d4d524559e9b7a062f0498e2c206122552d63eacff0a6567ffe7a8e8691"}, - ecto_sql: - {:hex, :ecto_sql, "3.4.4", "d28bac2d420f708993baed522054870086fd45016a9d09bb2cd521b9c48d32ea", - [:mix], - [ - {:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, - {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, - {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, - {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, - {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, - {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]} - ], "hexpm", "edb49af715dd72f213b66adfd0f668a43c17ed510b5d9ac7528569b23af57fe8"}, - ex_doc: - {:hex, :ex_doc, "0.18.4", "4406b8891cecf1352f49975c6d554e62e4341ceb41b9338949077b0d4a97b949", - [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm", - "9dbe1ce1d711dc5362e3b3280e92989ad61413ce423bc4e9f76d5fcc51ab8d6b"}, - excoveralls: - {:hex, :excoveralls, "0.10.2", - "fb4abd5b8a1b9d52d35e1162e7e2ea8bfb84b47ae07c38d39aa8ce64be0b0794", [:mix], - [ - {:hackney, "~> 1.13", [hex: :hackney, repo: "hexpm", optional: false]}, - {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]} - ], "hexpm", "20c5ca8d5431a0e0ba4060cd48f2c0d63de5aa51646aed041c47453fb06ce956"}, - hackney: - {:hex, :hackney, "1.14.3", "b5f6f5dcc4f1fba340762738759209e21914516df6be440d85772542d4a5e412", - [:rebar3], - [ - {:certifi, "2.4.2", [hex: :certifi, repo: "hexpm", optional: false]}, - {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, - {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, - {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, - {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]} - ], "hexpm", "ed15491f324aa0e95647dca8ef4340418dac479d1204d57e455d52dcfba3f705"}, - idna: - {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", - [:rebar3], - [ - {:unicode_util_compat, "0.4.1", - [hex: :unicode_util_compat, repo: "hexpm", optional: false]} - ], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"}, - inch_ex: - {:hex, :inch_ex, "1.0.1", "1f0af1a83cec8e56f6fc91738a09c838e858db3d78ef5f2ec040fe4d5a62dabf", - [:mix], - [{:poison, "~> 1.5 or ~> 2.0 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], - "hexpm", "08fd8a9205d3e1aefad9d7cb2a7f6b346e4a3e6ff09e139f6ec978f3a479ba14"}, - jason: - {:hex, :jason, "1.2.1", "12b22825e22f468c02eb3e4b9985f3d0cb8dc40b9bd704730efa11abd2708c44", - [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", - "b659b8571deedf60f79c5a608e15414085fa141344e2716fbd6988a084b5f993"}, - makeup: - {:hex, :makeup, "0.5.5", "9e08dfc45280c5684d771ad58159f718a7b5788596099bdfb0284597d368a882", - [:mix], [{:nimble_parsec, "~> 0.4", [hex: :nimble_parsec, optional: false]}]}, - makeup_elixir: - {:hex, :makeup_elixir, "0.10.0", - "0f09c2ddf352887a956d84f8f7e702111122ca32fbbc84c2f0569b8b65cbf7fa", [:mix], - [{:makeup, "~> 0.5.5", [hex: :makeup, optional: false]}]}, - mariaex: - {:hex, :mariaex, "0.9.1", "83266fec657ea68dd426f4bbc12594be45ee91fe162ebf1bf017ce3cfa098ddd", - [:mix], - [ - {:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, - {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, - {:poison, ">= 0.0.0", [hex: :poison, repo: "hexpm", optional: true]} - ], "hexpm", "b09f7b1a4eccde9829d8eeaab7126e9c7bd652398df6fd2c2334436e92fdec62"}, - metrics: - {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", - [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - mime: - {:hex, :mime, "1.3.0", "5e8d45a39e95c650900d03f897fbf99ae04f60ab1daa4a34c7a20a5151b7a5fe", - [:mix], [], "hexpm", "5e839994289d60326aa86020c4fbd9c6938af188ecddab2579f07b66cd665328"}, - mimerl: - {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", - [:rebar3], [], "hexpm", "7a4c8e1115a2732a67d7624e28cf6c9f30c66711a9e92928e745c255887ba465"}, - myxql: - {:hex, :myxql, "0.3.4", "41163cfc97b899db0fd9ebb6f38a8dc841298a7fa1c1e84a93b9369e2dbb1815", - [:mix], - [ - {:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, - {:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, - {:geo, "~> 3.3", [hex: :geo, repo: "hexpm", optional: true]}, - {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]} - ], "hexpm", "fc8d49ba141a46a174b410e7c86906d4d655ff8a1e1608c31d5d1777d106d1dd"}, - nimble_parsec: - {:hex, :nimble_parsec, "0.4.0", - "ee261bb53214943679422be70f1658fff573c5d0b0a1ecd0f18738944f818efe", [:mix], []}, - parse_trans: - {:hex, :parse_trans, "3.3.0", - "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", - "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, - plug: - {:hex, :plug, "1.7.1", "8516d565fb84a6a8b2ca722e74e2cd25ca0fc9d64f364ec9dbec09d33eb78ccd", - [:mix], - [ - {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, - {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]} - ], "hexpm", "daa5fee4209c12c3c48b05a96cf88c320b627c9575f987554dcdc1fdcdf2c15e"}, - plug_crypto: - {:hex, :plug_crypto, "1.0.0", - "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", - "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, - poison: - {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", - [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, - postgrex: - {:hex, :postgrex, "0.15.5", - "aec40306a622d459b01bff890fa42f1430dac61593b122754144ad9033a2152f", [:mix], - [ - {:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, - {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, - {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, - {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]} - ], "hexpm", "ed90c81e1525f65a2ba2279dbcebf030d6d13328daa2f8088b9661eb9143af7f"}, - ssl_verify_fun: - {:hex, :ssl_verify_fun, "1.1.4", - "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], - [], "hexpm", "603561dc0fd62f4f2ea9b890f4e20e1a0d388746d6e20557cafb1b16950de88c"}, - telemetry: - {:hex, :telemetry, "0.4.2", - "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", - "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, - unicode_util_compat: - {:hex, :unicode_util_compat, "0.4.1", - "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", - "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"} + "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, + "certifi": {:hex, :certifi, "2.4.2", "75424ff0f3baaccfd34b1214184b6ef616d89e420b258bb0a5ea7d7bc628f7f0", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "01d479edba0569a7b7a2c8bf923feeb6dc6a358edc2965ef69aea9ba288bb243"}, + "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm", "4a0850c9be22a43af9920a71ab17c051f5f7d45c209e40269a1938832510e4d9"}, + "credo": {:hex, :credo, "0.8.10", "261862bb7363247762e1063713bb85df2bbd84af8d8610d1272cd9c1943bba63", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm", "f3fe29f8de6be431c7736a933a3897fe9aa45533b1d1358b3691ac8ec4371e8f"}, + "db_connection": {:hex, :db_connection, "2.2.2", "3bbca41b199e1598245b716248964926303b5d4609ff065125ce98bcd368939e", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "642af240d8a8affb93b4ba5a6fcd2bbcbdc327e1a524b825d383711536f8070c"}, + "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, + "earmark": {:hex, :earmark, "1.4.19", "3854a17305c880cc46305af15fb1630568d23a709aba21aaa996ced082fc29d7", [:mix], [{:earmark_parser, ">= 1.4.18", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "d5a8c9f9e37159a8fdd3ea8437fb4e229eaf56d5129b9a011dc4780a4872079d"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.18", "e1b2be73eb08a49fb032a0208bf647380682374a725dfb5b9e510def8397f6f2", [:mix], [], "hexpm", "114a0e85ec3cf9e04b811009e73c206394ffecfcc313e0b346de0d557774ee97"}, + "ecto": {:hex, :ecto, "3.4.5", "2bcd262f57b2c888b0bd7f7a28c8a48aa11dc1a2c6a858e45dd8f8426d504265", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8c6d1d4d524559e9b7a062f0498e2c206122552d63eacff0a6567ffe7a8e8691"}, + "ecto_sql": {:hex, :ecto_sql, "3.4.4", "d28bac2d420f708993baed522054870086fd45016a9d09bb2cd521b9c48d32ea", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "edb49af715dd72f213b66adfd0f668a43c17ed510b5d9ac7528569b23af57fe8"}, + "ex_doc": {:hex, :ex_doc, "0.20.2", "1bd0dfb0304bade58beb77f20f21ee3558cc3c753743ae0ddbb0fd7ba2912331", [:mix], [{:earmark, "~> 1.3", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.10", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "8e24fc8ff9a50b9f557ff020d6c91a03cded7e59ac3e0eec8a27e771430c7d27"}, + "excoveralls": {:hex, :excoveralls, "0.10.2", "fb4abd5b8a1b9d52d35e1162e7e2ea8bfb84b47ae07c38d39aa8ce64be0b0794", [:mix], [{:hackney, "~> 1.13", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "20c5ca8d5431a0e0ba4060cd48f2c0d63de5aa51646aed041c47453fb06ce956"}, + "hackney": {:hex, :hackney, "1.14.3", "b5f6f5dcc4f1fba340762738759209e21914516df6be440d85772542d4a5e412", [:rebar3], [{:certifi, "2.4.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "ed15491f324aa0e95647dca8ef4340418dac479d1204d57e455d52dcfba3f705"}, + "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"}, + "inch_ex": {:hex, :inch_ex, "1.0.1", "1f0af1a83cec8e56f6fc91738a09c838e858db3d78ef5f2ec040fe4d5a62dabf", [:mix], [{:poison, "~> 1.5 or ~> 2.0 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm", "08fd8a9205d3e1aefad9d7cb2a7f6b346e4a3e6ff09e139f6ec978f3a479ba14"}, + "jason": {:hex, :jason, "1.2.1", "12b22825e22f468c02eb3e4b9985f3d0cb8dc40b9bd704730efa11abd2708c44", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b659b8571deedf60f79c5a608e15414085fa141344e2716fbd6988a084b5f993"}, + "makeup": {:hex, :makeup, "0.5.5", "9e08dfc45280c5684d771ad58159f718a7b5788596099bdfb0284597d368a882", [:mix], [{:nimble_parsec, "~> 0.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d7152ff93f2eac07905f510dfa03397134345ba4673a00fbf7119bab98632940"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.10.0", "0f09c2ddf352887a956d84f8f7e702111122ca32fbbc84c2f0569b8b65cbf7fa", [:mix], [{:makeup, "~> 0.5.5", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "4a36dd2d0d5c5f98d95b3f410d7071cd661d5af310472229dd0e92161f168a44"}, + "mariaex": {:hex, :mariaex, "0.9.1", "83266fec657ea68dd426f4bbc12594be45ee91fe162ebf1bf017ce3cfa098ddd", [:mix], [{:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, {:poison, ">= 0.0.0", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "b09f7b1a4eccde9829d8eeaab7126e9c7bd652398df6fd2c2334436e92fdec62"}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, + "mime": {:hex, :mime, "1.3.0", "5e8d45a39e95c650900d03f897fbf99ae04f60ab1daa4a34c7a20a5151b7a5fe", [:mix], [], "hexpm", "5e839994289d60326aa86020c4fbd9c6938af188ecddab2579f07b66cd665328"}, + "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm", "7a4c8e1115a2732a67d7624e28cf6c9f30c66711a9e92928e745c255887ba465"}, + "myxql": {:hex, :myxql, "0.3.4", "41163cfc97b899db0fd9ebb6f38a8dc841298a7fa1c1e84a93b9369e2dbb1815", [:mix], [{:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:geo, "~> 3.3", [hex: :geo, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "fc8d49ba141a46a174b410e7c86906d4d655ff8a1e1608c31d5d1777d106d1dd"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.4.0", "ee261bb53214943679422be70f1658fff573c5d0b0a1ecd0f18738944f818efe", [:mix], [], "hexpm", "ebb595e19456a72786db6dcd370d320350cb624f0b6203fcc7e23161d49b0ffb"}, + "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, + "plug": {:hex, :plug, "1.7.1", "8516d565fb84a6a8b2ca722e74e2cd25ca0fc9d64f364ec9dbec09d33eb78ccd", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}], "hexpm", "daa5fee4209c12c3c48b05a96cf88c320b627c9575f987554dcdc1fdcdf2c15e"}, + "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm", "73c1682f0e414cfb5d9b95c8e8cd6ffcfdae699e3b05e1db744e58b7be857759"}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, + "postgrex": {:hex, :postgrex, "0.15.5", "aec40306a622d459b01bff890fa42f1430dac61593b122754144ad9033a2152f", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "ed90c81e1525f65a2ba2279dbcebf030d6d13328daa2f8088b9661eb9143af7f"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.4", "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], [], "hexpm", "603561dc0fd62f4f2ea9b890f4e20e1a0d388746d6e20557cafb1b16950de88c"}, + "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, + "unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"}, }