diff --git a/.formatter.exs b/.formatter.exs new file mode 100644 index 0000000..d2cda26 --- /dev/null +++ b/.formatter.exs @@ -0,0 +1,4 @@ +# Used by "mix format" +[ + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] +] diff --git a/.gitignore b/.gitignore index b9d8296..362adab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +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 +# 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 @@ -16,4 +19,8 @@ erl_crash.dump # Also ignore archive artifacts (built via "mix archive.build"). *.ez -/.elixir_ls +# Ignore package tarball (built via "mix hex.build"). +ecto-soft-delete-*.tar + +# Temporary files, for example, from tests. +/tmp/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 720ac48..5ffc634 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [2.0.1] - 2020-05-08 -- Add logic to `Ecto.SoftDelete.Repo.prepare_query` to respect `where` clauses that explicitly include records where deleted_at is not nil +- Add logic to `Ecto.SoftDelete.Repo.prepare_query` to respect `where` clauses + that explicitly include records where deleted_at is not nil ## [2.0.0] - 2020-05-06 @@ -22,7 +23,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added -- `Ecto.SoftDelete.Repo` for adding soft delete functions to repositories. +- `Ecto.SoftDelete.Repo` for adding soft delete functions to repositories ## [1.0.0] - 2019-02-15 @@ -30,8 +31,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Ecto 3 support -## [0.2.0] +## [0.2.0] - 2018-12-31 ### Fixed - Missing license (MIT) + +## [0.1.0] - 2017-12-20 + +- Initial release diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d4fa75d..46c8cd0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,13 @@ -# Setup for Development +# Contributing -``` +## Setup for Development + +```bash git clone https://github.com/revelrylabs/ecto_soft_delete mix deps.get ``` -# Submitting Changes +## Submitting Changes 1. Fork the repository. 2. Set up the package per the instructions above and ensure `mix test` diff --git a/LICENSE b/LICENSE deleted file mode 100644 index cd5cb30..0000000 --- a/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -Copyright 2018 Revelry Labs LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..08497d1 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,19 @@ +Copyright 2018 Revelry Labs LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 2cb2307..43e9c70 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,43 @@ +# EctoSoftDelete + [![Build Status](https://travis-ci.org/revelrylabs/ecto_soft_delete.svg?branch=master)](https://travis-ci.org/revelrylabs/ecto_soft_delete) -[![Hex.pm](https://img.shields.io/hexpm/dt/ecto_soft_delete.svg)](https://hex.pm/packages/ecto_soft_delete) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Coverage Status](https://opencov.prod.revelry.net/projects/21/badge.svg)](https://opencov.prod.revelry.net/projects/21) - -# EctoSoftDelete +[![Module Version](https://img.shields.io/hexpm/v/ecto_soft_delete.svg)](https://hex.pm/packages/ecto_soft_delete) +[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/ecto_soft_delete/) +[![Total Download](https://img.shields.io/hexpm/dt/ecto_soft_delete.svg)](https://hex.pm/packages/ecto_soft_delete) +[![License](https://img.shields.io/hexpm/l/ecto_soft_delete.svg)](https://github.com/revelrylabs/ecto_soft_delete/blob/master/LICENSE) +[![Last Updated](https://img.shields.io/github/last-commit/revelrylabs/ecto_soft_delete.svg)](https://github.com/revelrylabs/ecto_soft_delete/commits/master) Adds columns, fields, and queries for soft deletion with Ecto. -[Documentation](https://hexdocs.pm/ecto_soft_delete) +## Installation + +The package can be installed by adding `:ecto_soft_delete` to your list of +dependencies in `mix.exs`: + +Add to mix.exs: + +```elixir +defp deps do + [ + {:ecto_soft_delete, "~> 1.0"} + ] +end +``` + +and do: + +``` +mix deps.get +``` ## Usage ### Migrations -In migrations for schemas to support soft deletion, import `Ecto.SoftDelete.Migration`. Next, add `soft_delete_columns()` when creating a table +In migrations for schemas to support soft deletion, import +`Ecto.SoftDelete.Migration`. Next, add `soft_delete_columns()` when creating a +table: ```elixir defmodule MyApp.Repo.Migrations.CreateUser do @@ -33,23 +57,26 @@ end ### Schemas -Import `Ecto.SoftDelete.Schema` into your Schema module, then add `soft_delete_schema()` to your schema +Import `Ecto.SoftDelete.Schema` into your Schema module, then add +`soft_delete_schema()` to your schema: ```elixir - defmodule User do - use Ecto.Schema - import Ecto.SoftDelete.Schema +defmodule User do + use Ecto.Schema + import Ecto.SoftDelete.Schema - schema "users" do - field :email, :string - soft_delete_schema() - end + schema "users" do + field :email, :string + soft_delete_schema() end +end ``` ### Queries -To query for items that have not been deleted, use `with_undeleted(query)` which will filter out deleted items using the `deleted_at` column produced by the previous 2 steps +To query for items that have not been deleted, use `with_undeleted(query)` +which will filter out deleted items using the `deleted_at` column produced by +the previous 2 steps: ```elixir import Ecto.SoftDelete.Query @@ -60,10 +87,12 @@ query = from(u in User, select: u) results = Repo.all(query) ``` -## Repos +### Repos To support deletion in repos, just add `use Ecto.SoftDelete.Repo` to your repo. -After that, the functions `soft_delete!/1`, `soft_delete/1` and `soft_delete_all/1` will be available for you. + +After that, the functions `soft_delete!/1`, `soft_delete/1` and +`soft_delete_all/1` will be available for you. ```elixir # repo.ex @@ -88,31 +117,18 @@ post = Repo.get!(Post, 42) struct = Repo.soft_delete!(post) ``` -## Installation - -Add to mix.exs: - -```elixir -defp deps do - [{:ecto_soft_delete, "~> 1.0"}] -end -``` - -and do - -``` -mix deps.get -``` - -## Configuration +## Contributing -There are currently no configuration options. +Bug reports and pull requests are welcome on GitHub at +https://github.com/revelrylabs/ecto_soft_delete. Check out +[CONTRIBUTING.md](./CONTRIBUTING.md) for more info. -## Usage +Everyone is welcome to participate in the project. We expect contributors to +adhere the Contributor Covenant Code of Conduct (see [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)). -## Contributing +## Copyright and License -Bug reports and pull requests are welcome on GitHub at https://github.com/revelrylabs/ecto_soft_delete. Check out [CONTRIBUTING.md](https://github.com/revelrylabs/ecto_soft_delete/blob/master/CONTRIBUTING.md) for more info. +Copyright (c) 2018 Revelry Labs LLC -Everyone is welcome to participate in the project. We expect contributors to -adhere the Contributor Covenant Code of Conduct (see [CODE_OF_CONDUCT.md](https://github.com/revelrylabs/ecto_soft_delete/blob/master/CODE_OF_CONDUCT.md)). +This library is released under the MIT License. See the [LICENSE.md](./LICENSE.md) file +for further details. diff --git a/lib/ecto/soft_delete_migration.ex b/lib/ecto/soft_delete_migration.ex index 5545012..1aa74a5 100644 --- a/lib/ecto/soft_delete_migration.ex +++ b/lib/ecto/soft_delete_migration.ex @@ -1,12 +1,14 @@ defmodule Ecto.SoftDelete.Migration do @moduledoc """ - Contains functions to add soft delete columns to a table during migrations + Contains functions to add soft delete columns to a table during migrations. """ use Ecto.Migration @doc """ - Adds deleted_at column to a table. This column is used to track if an item is deleted or not and when + Adds deleted_at column to a table. + + This column is used to track if an item is deleted or not and when: defmodule MyApp.Repo.Migrations.CreateUser do use Ecto.Migration diff --git a/lib/ecto/soft_delete_query.ex b/lib/ecto/soft_delete_query.ex index d5bd2f7..ac3e05f 100644 --- a/lib/ecto/soft_delete_query.ex +++ b/lib/ecto/soft_delete_query.ex @@ -1,12 +1,12 @@ defmodule Ecto.SoftDelete.Query do @moduledoc """ - functions for querying data that is (or is not) soft deleted + Functions for querying data that is (or is not) soft deleted. """ import Ecto.Query @doc """ - Returns a query that searches only for undeleted items + Returns a query that searches only for undeleted items. query = from(u in User, select: u) |> with_undeleted diff --git a/lib/ecto/soft_delete_repo.ex b/lib/ecto/soft_delete_repo.ex index 0643fe1..00a4e28 100644 --- a/lib/ecto/soft_delete_repo.ex +++ b/lib/ecto/soft_delete_repo.ex @@ -28,7 +28,9 @@ defmodule Ecto.SoftDelete.Repo do @doc """ Soft deletes a struct. + Updates the `deleted_at` field with the current datetime in UTC. + It returns `{:ok, struct}` if the struct has been successfully soft deleted or `{:error, changeset}` if there was a validation or a known constraint error. diff --git a/lib/ecto/soft_delete_schema.ex b/lib/ecto/soft_delete_schema.ex index c1a73b0..feb0037 100644 --- a/lib/ecto/soft_delete_schema.ex +++ b/lib/ecto/soft_delete_schema.ex @@ -1,10 +1,10 @@ defmodule Ecto.SoftDelete.Schema do @moduledoc """ - Contains schema macros to add soft delete fields to a schema + Contains schema macros to add soft delete fields to a schema. """ @doc """ - Adds the deleted_at column to a schema + Adds the `deleted_at` column to a schema. defmodule User do use Ecto.Schema diff --git a/mix.exs b/mix.exs index a9657a0..4444ced 100644 --- a/mix.exs +++ b/mix.exs @@ -1,10 +1,13 @@ defmodule EctoSoftDelete.Mixfile do use Mix.Project + @source_url "https://github.com/revelrylabs/ecto_soft_delete" + @version "2.0.2" + def project do [ app: :ecto_soft_delete, - version: "2.0.2", + version: @version, elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), build_embedded: Mix.env() == :prod, @@ -17,8 +20,8 @@ defmodule EctoSoftDelete.Mixfile do "coveralls.html": :test ], deps: deps(), + docs: docs(), package: package(), - description: description() ] end @@ -33,20 +36,15 @@ defmodule EctoSoftDelete.Mixfile do [ {:ecto_sql, "~> 3.0"}, {:postgrex, ">= 0.0.0", only: [:test]}, - {:ex_doc, "~> 0.16", only: [:dev, :test]}, + {:ex_doc, ">= 0.0.0", only: [:dev, :test]}, {:credo, "~> 1.0", only: [:dev, :test]}, {:excoveralls, "~> 0.8", only: [:dev, :test]} ] end - defp description do - """ - Soft deletion with Ecto. - """ - end - defp package do [ + description: "Soft deletion with Ecto.", files: ["lib", "mix.exs", "README.md", "LICENSE", "CHANGELOG.md"], maintainers: ["Bryan Joseph", "Luke Ledet"], licenses: ["MIT"], @@ -56,4 +54,20 @@ defmodule EctoSoftDelete.Mixfile do build_tools: ["mix"] ] 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 end diff --git a/mix.lock b/mix.lock index 19f04f5..52c2cbb 100644 --- a/mix.lock +++ b/mix.lock @@ -6,20 +6,22 @@ "db_connection": {:hex, :db_connection, "2.2.1", "caee17725495f5129cb7faebde001dc4406796f12a62b8949f4ac69315080566", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "2b02ece62d9f983fcd40954e443b7d9e6589664380e5546b2b9b523cd0fb59e1"}, "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.13", "0c98163e7d04a15feb62000e1a891489feb29f3d10cb57d4f845c405852bbef8", [:mix], [], "hexpm", "d602c26af3a0af43d2f2645613f65841657ad6efc9f0e361c3b6c06b578214ba"}, "ecto": {:hex, :ecto, "3.3.2", "002aa428c752a8ee4bb65baa9d1041f0514d7435d2e21d58cb6aa69a1076721d", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "c651e3ea0919241da314f518404b84449c8569525c4d4cf0f3d16f1d5d0a560c"}, "ecto_sql": {:hex, :ecto_sql, "3.3.3", "7d8962d39f16181c1df1bbd0f64aa392bd9ce0b9f8ff5ff21d43dca3d624eee7", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4 or ~> 3.3.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3d5b8e14836d930448d79ab6ac325501c3c62caed83c34791d5af77718766795"}, - "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "0db1ee8d1547ab4877c5b5dffc6604ef9454e189928d5ba8967d4a58a801f161"}, + "ex_doc": {:hex, :ex_doc, "0.24.2", "e4c26603830c1a2286dae45f4412a4d1980e1e89dc779fcd0181ed1d5a05c8d9", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "e134e1d9e821b8d9e4244687fb2ace58d479b67b282de5158333b0d57c6fb7da"}, "excoveralls": {:hex, :excoveralls, "0.12.2", "a513defac45c59e310ac42fcf2b8ae96f1f85746410f30b1ff2b710a4b6cd44b", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "151c476331d49b45601ffc45f43cb3a8beb396b02a34e3777fea0ad34ae57d89"}, "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm"}, "hackney": {:hex, :hackney, "1.15.2", "07e33c794f8f8964ee86cebec1a8ed88db5070e52e904b8f12209773c1036085", [:rebar3], [{:certifi, "2.5.1", [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.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.5", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "e0100f8ef7d1124222c11ad362c857d3df7cb5f4204054f9f0f4a728666591fc"}, "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"}, "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fdf843bca858203ae1de16da2ee206f53416bbda5dc8c9e78f43243de4bc3afe"}, "jsx": {:hex, :jsx, "2.8.2", "7acc7d785b5abe8a6e9adbde926a24e481f29956dd8b4df49e3e4e7bcc92a018", [:mix, :rebar3], [], "hexpm"}, - "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "a10c6eb62cca416019663129699769f0c2ccf39428b3bb3c0cb38c718a0c186d"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"}, + "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.15.1", "b5888c880d17d1cc3e598f05cdb5b5a91b7b17ac4eaf5f297cb697663a1094dd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "db68c173234b07ab2a07f645a5acdc117b9f99d69ebf521821d89690ae6c6ec8"}, + "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm"}, "postgrex": {:hex, :postgrex, "0.15.3", "5806baa8a19a68c4d07c7a624ccdb9b57e89cbc573f1b98099e3741214746ae4", [: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", "4737ce62a31747b4c63c12b20c62307e51bb4fcd730ca0c32c280991e0606c90"},