Skip to content

Commit 50b849c

Browse files
authored
Elixir updates (#212)
## Additions * Add CircleCI * Add/Enforce Credo ## Updates * Updated dependencies * Updated README.md ## Bug fixes * Fix #204 by fixing the case clause * Add default timeouts of 5000ms to queries.
1 parent 9b31d5e commit 50b849c

File tree

12 files changed

+97
-90
lines changed

12 files changed

+97
-90
lines changed

Diff for: .circleci/config.yml

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
version: 2.0
2+
jobs:
3+
build:
4+
docker:
5+
- image: circleci/elixir:1.6.6-otp-21
6+
steps:
7+
- checkout
8+
- restore_cache:
9+
keys:
10+
- v2-dependency-cache-{{ checksum "mix.lock" }}
11+
- run: mix local.hex --force
12+
- run: mix local.rebar --force
13+
- run: mix deps.get
14+
- run: mix deps.compile
15+
- run: mix compile
16+
- run: ./integration/hack_out_incompatible_tests.sh
17+
- run: mix credo --strict
18+
- run: mix coveralls.circle
19+
- save_cache:
20+
key: v2-dependency-cache-{{ checksum "mix.lock" }}
21+
paths:
22+
- _build
23+
- deps

Diff for: .credo.exs

-4
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,6 @@
7272
{Credo.Check.Warning.BoolOperationOnSameValues},
7373
{Credo.Check.Warning.IExPry},
7474
{Credo.Check.Warning.IoInspect, false},
75-
{Credo.Check.Warning.NameRedeclarationByAssignment, false},
76-
{Credo.Check.Warning.NameRedeclarationByCase, false},
77-
{Credo.Check.Warning.NameRedeclarationByDef, false},
78-
{Credo.Check.Warning.NameRedeclarationByFn, false},
7975
{Credo.Check.Warning.OperationOnSameValues, false},
8076
# Disabled because of p.x == p.x in Ecto queries
8177
{Credo.Check.Warning.OperationWithConstantResult},

Diff for: .formatter.exs

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Used by "mix format"
2+
[
3+
inputs: ["mix.exs", "{config,lib,test,bench}/**/*.{ex,exs}"]
4+
]

Diff for: .tool-versions

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
erlang 21.0.1
2+
elixir 1.6.6-otp-21

Diff for: .travis.yml

-25
This file was deleted.

Diff for: README.md

+5-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
[![Build Status](https://travis-ci.org/scouten/sqlite_ecto2.svg?branch=master "Build Status")](https://travis-ci.org/scouten/sqlite_ecto2)
1+
[![CircleCI](https://circleci.com/gh/Sqlite-Ecto/sqlite_ecto2.svg?style=svg)](https://circleci.com/gh/Sqlite-Ecto/sqlite_ecto2)
22
[![Hex.pm](https://img.shields.io/hexpm/v/sqlite_ecto2.svg)](https://hex.pm/packages/sqlite_ecto2)
3-
[![Ebert](https://ebertapp.io/github/scouten/sqlite_ecto2.svg)](https://ebertapp.io/github/scouten/sqlite_ecto2)
4-
[![Coverage Status](https://coveralls.io/repos/github/scouten/sqlite_ecto2/badge.svg?branch=master)](https://coveralls.io/github/scouten/sqlite_ecto2?branch=master)
3+
[![Coverage Status](https://coveralls.io/repos/github/Sqlite-Ecto/sqlite_ecto2/badge.svg?branch=master)](https://coveralls.io/github/Sqlite-Ecto/sqlite_ecto2?branch=master)
54

65
# sqlite_ecto2
76

@@ -10,18 +9,11 @@
109
Read [the tutorial](./docs/tutorial.md) for a detailed example of how to setup and use a SQLite repo with Ecto, or just check-out the CliffsNotes in the sections below if you want to get started quickly.
1110

1211

13-
## SEEKING NEW MAINTAINER
14-
15-
My sincere apologies, but I must step down from maintaining this project. Some life events have conspired to leave me without the time I would need to devote to properly continue the development of this project. If you are interested in giving it the love it needs (especially, following the changes for Ecto 3.0), please file an issue or contact me at <[email protected]> to discuss taking ownership of this module.
16-
17-
I'll review PRs from time to time if they can be merged easily, but I do not have the ability to review or attempt to fix unsolved issues.
18-
19-
2012
## Ecto Version Compatibility
2113

2214
**IMPORTANT:** This release will _only_ work with Ecto 2.2.x. If you need compatibility with older versions of Ecto, please see:
2315

24-
* Ecto 2.1.x -> [`sqlite_ecto2` 2.0.x series](https://github.com/scouten/sqlite_ecto2/tree/v2.0)
16+
* Ecto 2.1.x -> [`sqlite_ecto2` 2.0.x series](https://github.com/Sqlite-Ecto/sqlite_ecto2/tree/v2.0)
2517
* Ecto 1.x -> [`sqlite_ecto` v1.x series](https://github.com/jazzyb/sqlite_ecto)
2618

2719

@@ -62,7 +54,8 @@ Note that the Travis configuration for this repo specifically excludes OTP 19.0
6254

6355
## Dependencies
6456

65-
This library makes use of [sqlitex](https://github.com/mmmries/sqlitex) and [esqlite](https://github.com/mmzeeman/esqlite). Since esqlite uses Erlang NIFs to incorporate SQLite, you will need a valid C compiler to build the library.
57+
This library makes use of [sqlite3](https://github.com/Sqlite-Ecto/sqlitex)
58+
Since esqlite uses Erlang NIFs to incorporate SQLite, you will need a valid C compiler to build the library.
6659

6760
## Example
6861

Diff for: config/dogma.exs

-13
This file was deleted.

Diff for: lib/sqlite_db_connection/protocol.ex

+25-14
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ defmodule Sqlite.DbConnection.Protocol do
1010

1111
@spec connect(Keyword.t) :: {:ok, state}
1212
def connect(opts) do
13-
{db_path, _opts} = Keyword.pop(opts, :database)
13+
db_path = Keyword.fetch!(opts, :database)
14+
db_timeout = Keyword.get(opts, :db_timeout, 5000)
1415

15-
{:ok, db} = Sqlitex.Server.start_link(db_path)
16+
{:ok, db} = Sqlitex.Server.start_link(db_path, db_timeout: db_timeout)
1617
:ok = Sqlitex.Server.exec(db, "PRAGMA foreign_keys = ON")
1718
{:ok, [[foreign_keys: 1]]} = Sqlitex.Server.query(db, "PRAGMA foreign_keys")
1819

@@ -81,7 +82,7 @@ defmodule Sqlite.DbConnection.Protocol do
8182
:transaction -> "BEGIN"
8283
:savepoint -> "SAVEPOINT sqlite_ecto_savepoint"
8384
end
84-
handle_transaction(sql, s)
85+
handle_transaction(sql, [timeout: Keyword.get(opts, :timeout, 5000)], s)
8586
end
8687

8788
@spec handle_commit(Keyword.t, state) ::
@@ -91,7 +92,7 @@ defmodule Sqlite.DbConnection.Protocol do
9192
:transaction -> "COMMIT"
9293
:savepoint -> "RELEASE SAVEPOINT sqlite_ecto_savepoint"
9394
end
94-
handle_transaction(sql, s)
95+
handle_transaction(sql, [timeout: Keyword.get(opts, :timeout, 5000)], s)
9596
end
9697

9798
@spec handle_rollback(Keyword.t, state) ::
@@ -101,7 +102,7 @@ defmodule Sqlite.DbConnection.Protocol do
101102
:transaction -> "ROLLBACK"
102103
:savepoint -> "ROLLBACK TO SAVEPOINT sqlite_ecto_savepoint"
103104
end
104-
handle_transaction(sql, s)
105+
handle_transaction(sql, [timeout: Keyword.get(opts, :timeout, 5000)], s)
105106
end
106107

107108
defp refined_info(prepared_info) do
@@ -125,10 +126,10 @@ defmodule Sqlite.DbConnection.Protocol do
125126
defp maybe_atom_to_lc_string(nil), do: nil
126127
defp maybe_atom_to_lc_string(item), do: item |> to_string |> String.downcase
127128

128-
defp handle_execute(%Query{statement: sql}, params, _sync, _opts, s) do
129+
defp handle_execute(%Query{statement: sql}, params, _sync, opts, s) do
129130
# Note that we rely on Sqlitex.Server to cache the prepared statement,
130131
# so we can simply refer to the original SQL statement here.
131-
case run_stmt(sql, params, s) do
132+
case run_stmt(sql, params, opts, s) do
132133
{:ok, result} ->
133134
{:ok, result, s}
134135
other ->
@@ -145,10 +146,16 @@ defmodule Sqlite.DbConnection.Protocol do
145146
message: to_string(message)}, s}
146147
end
147148

148-
defp run_stmt(query, params, s) do
149-
opts = [decode: :manual, types: true, bind: params]
149+
defp run_stmt(query, params, opts, s) do
150+
query_opts = [
151+
timeout: Keyword.get(opts, :timeout, 5000),
152+
decode: :manual,
153+
types: true,
154+
bind: params
155+
]
156+
150157
command = command_from_sql(query)
151-
case query_rows(s.db, to_string(query), opts) do
158+
case query_rows(s.db, to_string(query), query_opts) do
152159
{:ok, %{rows: raw_rows, columns: raw_column_names}} ->
153160
{rows, num_rows, column_names} = case {raw_rows, raw_column_names} do
154161
{_, []} -> {nil, get_changes_count(s.db, command), nil}
@@ -160,6 +167,8 @@ defmodule Sqlite.DbConnection.Protocol do
160167
command: command}}
161168
{:error, {_sqlite_errcode, _message}} = err ->
162169
sqlite_error(err, s)
170+
{:error, %Sqlite.DbConnection.Error{} = err} ->
171+
{:error, err, s}
163172
{:error, :args_wrong_length} ->
164173
{:error,
165174
%ArgumentError{message: "parameters must match number of placeholders in query"},
@@ -193,8 +202,8 @@ defmodule Sqlite.DbConnection.Protocol do
193202
String.to_atom(List.first(words))
194203
end
195204

196-
defp handle_transaction(stmt, s) do
197-
{:ok, _rows} = query_rows(s.db, stmt, into: :raw_list)
205+
defp handle_transaction(stmt, opts, s) do
206+
{:ok, _rows} = query_rows(s.db, stmt, Keyword.merge(opts, [into: :raw_list]))
198207
command = command_from_sql(stmt)
199208
result = %Sqlite.DbConnection.Result{rows: nil,
200209
num_rows: nil,
@@ -207,8 +216,10 @@ defmodule Sqlite.DbConnection.Protocol do
207216
try do
208217
Sqlitex.Server.query_rows(db, stmt, opts)
209218
catch
210-
:exit, _ ->
211-
{:raise, %Sqlite.DbConnection.Error{message: "Disconnected"}}
219+
:exit, {:timeout, _gen_server_call} ->
220+
{:error, %Sqlite.DbConnection.Error{message: "Timeout"}}
221+
:exit, _ex ->
222+
{:error, %Sqlite.DbConnection.Error{message: "Disconnected"}}
212223
end
213224
end
214225
end

Diff for: lib/sqlite_db_connection/stream.ex

+4
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,8 @@ defimpl Enumerable, for: Sqlite.DbConnection.Stream do
2929
def count(_) do
3030
{:error, __MODULE__}
3131
end
32+
33+
def slice(_) do
34+
{:error, __MODULE__}
35+
end
3236
end

Diff for: lib/sqlite_ecto/connection.ex

+2-2
Original file line numberDiff line numberDiff line change
@@ -565,10 +565,10 @@ if Code.ensure_loaded?(Sqlitex.Server) do
565565

566566
# DDL
567567

568-
alias Ecto.Migration.Table
568+
alias Ecto.Migration.Constraint
569569
alias Ecto.Migration.Index
570570
alias Ecto.Migration.Reference
571-
alias Ecto.Migration.Constraint
571+
alias Ecto.Migration.Table
572572

573573
@drops [:drop, :drop_if_exists]
574574

Diff for: mix.exs

+16-12
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@ defmodule Sqlite.Ecto2.Mixfile do
1313
# testing
1414
build_per_environment: false,
1515
test_paths: test_paths(),
16-
test_coverage: [tool: Coverex.Task, coveralls: true],
16+
test_coverage: [tool: ExCoveralls],
17+
preferred_cli_env: [
18+
coveralls: :test,
19+
"coveralls.detail": :test,
20+
"coveralls.html": :test,
21+
"coveralls.circle": :test
22+
],
1723

1824
# hex
1925
description: description(),
@@ -25,33 +31,31 @@ defmodule Sqlite.Ecto2.Mixfile do
2531

2632
# Configuration for the OTP application
2733
def application do
28-
[applications: [:db_connection, :ecto, :logger, :sqlitex],
34+
[extra_applications: [:logger],
2935
mod: {Sqlite.DbConnection.App, []}]
3036
end
3137

3238
# Dependencies
3339
defp deps do
3440
[{:connection, "~> 1.0.3"},
35-
{:coverex, "~> 1.4.11", only: :test},
36-
{:credo, "~> 0.7", only: [:dev, :test]},
41+
{:credo, "~> 0.10", only: [:dev, :test]},
3742
{:db_connection, "~> 1.1.0"},
38-
{:decimal, "~> 1.2"},
39-
{:dogma, "~> 0.1", only: :dev},
40-
{:esqlite, "~> 0.2.3"},
41-
{:ex_doc, "~> 0.16", only: :dev},
42-
{:ecto, "~> 2.2.2"},
43+
{:decimal, "~> 1.5"},
44+
{:excoveralls, "~> 0.9", only: :test},
45+
{:ex_doc, "~> 0.18", runtime: false, only: :docs},
46+
{:ecto, "~> 2.2"},
4347
{:poison, "~> 2.2 or ~> 3.0", optional: true},
44-
{:postgrex, "~> 0.13.0", optional: true},
48+
{:postgrex, "~> 0.13", optional: true},
4549
{:sbroker, "~> 1.0"},
4650
{:sqlitex, "~> 1.3.2 or ~> 1.4"}]
4751
end
4852

4953
defp description, do: "SQLite3 adapter for Ecto2"
5054

5155
defp package do
52-
[maintainers: ["Eric Scouten", "Jason M Barnes"],
56+
[maintainers: ["Eric Scouten", "Jason M Barnes", "Connor Rigby"],
5357
licenses: ["MIT"],
54-
links: %{"Github" => "https://github.com/scouten/sqlite_ecto2"}]
58+
links: %{"Github" => "https://github.com/Sqlite-Ecto/sqlite_ecto2"}]
5559
end
5660

5761
defp elixirc_paths(:test), do: ["lib", "test/sqlite_db_connection/support"]

Diff for: mix.lock

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
1-
%{"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"},
1+
%{
2+
"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"},
23
"certifi": {:hex, :certifi, "1.0.0", "1c787a85b1855ba354f0b8920392c19aa1d06b0ee1362f9141279620a5be2039", [:rebar3], [], "hexpm"},
34
"connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm"},
45
"coverex": {:hex, :coverex, "1.4.13", "d90833b82bdd6a1ec05a6d971283debc3dd9611957489010e4b1ab0071a9ee6c", [:mix], [{:hackney, "~> 1.5", [hex: :hackney, repo: "hexpm", optional: false]}, {:poison, "~> 1.5 or ~> 2.0 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"},
5-
"credo": {:hex, :credo, "0.8.1", "137efcc99b4bc507c958ba9b5dff70149e971250813cbe7d4537ec7e36997402", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm"},
6+
"credo": {:hex, :credo, "0.10.0", "66234a95effaf9067edb19fc5d0cd5c6b461ad841baac42467afed96c78e5e9e", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"},
67
"db_connection": {:hex, :db_connection, "1.1.2", "2865c2a4bae0714e2213a0ce60a1b12d76a6efba0c51fbda59c9ab8d1accc7a8", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
7-
"decimal": {:hex, :decimal, "1.4.0", "fac965ce71a46aab53d3a6ce45662806bdd708a4a95a65cde8a12eb0124a1333", [:mix], [], "hexpm"},
8-
"dogma": {:hex, :dogma, "0.1.15", "5bceba9054b2b97a4adcb2ab4948ca9245e5258b883946e82d32f785340fd411", [:mix], [{:poison, ">= 2.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"},
9-
"earmark": {:hex, :earmark, "1.2.2", "f718159d6b65068e8daeef709ccddae5f7fdc770707d82e7d126f584cd925b74", [:mix], [], "hexpm"},
8+
"decimal": {:hex, :decimal, "1.5.0", "b0433a36d0e2430e3d50291b1c65f53c37d56f83665b43d79963684865beab68", [:mix], [], "hexpm"},
9+
"dogma": {:hex, :dogma, "0.1.16", "3c1532e2f63ece4813fe900a16704b8e33264da35fdb0d8a1d05090a3022eef9", [:mix], [{:poison, ">= 2.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"},
10+
"earmark": {:hex, :earmark, "1.2.5", "4d21980d5d2862a2e13ec3c49ad9ad783ffc7ca5769cf6ff891a4553fbaae761", [:mix], [], "hexpm"},
1011
"ecto": {:hex, :ecto, "2.2.2", "e9bd6ebc044eaaab1cb369e3465686d8aca830aa5bf545ef2bae000a3d42c54b", [:mix], [{:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: true]}, {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
11-
"esqlite": {:hex, :esqlite, "0.2.3", "1a8b60877fdd3d50a8a84b342db04032c0231cc27ecff4ddd0d934485d4c0cd5", [:rebar3], [], "hexpm"},
12-
"ex_doc": {:hex, :ex_doc, "0.16.3", "cd2a4cfe5d26e37502d3ec776702c72efa1adfa24ed9ce723bb565f4c30bd31a", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm"},
12+
"elixir_make": {:hex, :elixir_make, "0.4.2", "332c649d08c18bc1ecc73b1befc68c647136de4f340b548844efc796405743bf", [:mix], [], "hexpm"},
13+
"esqlite": {:hex, :esqlite, "0.2.4", "3a8a352c190afe2d6b828b252a6fbff65b5cc1124647f38b15bdab3bf6fd4b3e", [:rebar3], [], "hexpm"},
14+
"ex_doc": {:hex, :ex_doc, "0.19.0", "e22b6434373b4870ea77b24df069dbac7002c1f483615e9ebfc0c37497e1c75c", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.7", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"},
15+
"excoveralls": {:hex, :excoveralls, "0.9.1", "14fd20fac51ab98d8e79615814cc9811888d2d7b28e85aa90ff2e30dcf3191d6", [:mix], [{:hackney, ">= 0.12.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"},
1316
"hackney": {:hex, :hackney, "1.7.1", "e238c52c5df3c3b16ce613d3a51c7220a784d734879b1e231c9babd433ac1cb4", [:rebar3], [{:certifi, "1.0.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "4.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.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
1417
"idna": {:hex, :idna, "4.0.0", "10aaa9f79d0b12cf0def53038547855b91144f1bfcc0ec73494f38bb7b9c4961", [:rebar3], [], "hexpm"},
18+
"jason": {:hex, :jason, "1.1.1", "d3ccb840dfb06f2f90a6d335b536dd074db748b3e7f5b11ab61d239506585eb2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
19+
"makeup": {:hex, :makeup, "0.5.1", "966c5c2296da272d42f1de178c1d135e432662eca795d6dc12e5e8787514edf7", [:mix], [{:nimble_parsec, "~> 0.2.2", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"},
20+
"makeup_elixir": {:hex, :makeup_elixir, "0.8.0", "1204a2f5b4f181775a0e456154830524cf2207cf4f9112215c05e0b76e4eca8b", [:mix], [{:makeup, "~> 0.5.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 0.2.2", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"},
1521
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
1622
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"},
23+
"nimble_parsec": {:hex, :nimble_parsec, "0.2.2", "d526b23bdceb04c7ad15b33c57c4526bf5f50aaa70c7c141b4b4624555c68259", [:mix], [], "hexpm"},
1724
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"},
1825
"poolboy": {:hex, :poolboy, "1.5.1", "6b46163901cfd0a1b43d692657ed9d7e599853b3b21b95ae5ae0a777cf9b6ca8", [:rebar], [], "hexpm"},
1926
"postgrex": {:hex, :postgrex, "0.13.3", "c277cfb2a9c5034d445a722494c13359e361d344ef6f25d604c2353185682bfc", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"},
2027
"sbroker": {:hex, :sbroker, "1.0.0", "28ff1b5e58887c5098539f236307b36fe1d3edaa2acff9d6a3d17c2dcafebbd0", [:rebar3], [], "hexpm"},
2128
"sqlitex": {:hex, :sqlitex, "1.3.2", "ec4c78306dcc2c45761b9c1bdf2864ab3f18e077d31c84aa8aed5dc76841c535", [:mix], [{:decimal, "~> 1.1", [hex: :decimal, repo: "hexpm", optional: false]}, {:esqlite, "~> 0.2.3", [hex: :esqlite, repo: "hexpm", optional: false]}], "hexpm"},
22-
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"}}
29+
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
30+
}

0 commit comments

Comments
 (0)