Euclid — Tools for Geometers
Euclid is a grab-bag of code that we use and reuse in Elixir projects. Parts of it are inspired by functionality in Ruby and/or ActiveSupport. Other functions or snippets are here because we (unlike some others) believe that giving names to common concepts is a good thing.
The code is free for all to use and reuse, as a whole or piecemeal. Specifically, if you only want a function or two, consider copying the code to your own codebase rather than introducing Euclid as a dependency. You don't need to mention the source either.
Resources
- Repo: https://github.com/geometerio/euclid
- CI: Coming soon!
Installation
Euclid can be installed like a normal Hex package, but for internal development, we recommend this more elaborate method:
# In mix.exs
def deps do
[
local_or_remote(:remote, :euclid, version: "~> 1.0", path: "../euclid")
]
end
defp local_or_remote(:local, package, options) do
{package, options |> Keyword.delete(:organization) |> Keyword.delete(:version)}
end
defp local_or_remote(:remote, package, options) do
{package, options |> Keyword.get(:version), options |> Keyword.delete(:path) |> Keyword.delete(:version)}
end
Development
Getting started
After cloning this repo, run bin/dev/doctor
. If it finds a problem, it will suggest a remedy,
which it will put in the clipboard. If you think the remedy will work well on your computer, paste it into
your terminal. You can also try a different remedy -- doctor
is not omnipotent. Then run doctor
over
and over until it succeeds. (Note: doctor
may not work well on Windows.)
Making changes
If you have write access to this repo, this is how you add features (or fix bugs):
- In the deps section
mix.exs
in your application, change:remote
to:local
. - Edit Euclid code locally.
- Run tests with
bin/dev/test
. - Once you're happy with your changes, perform the traditional dance of commit, fetch and rebase.
- Increment the version (in
VERSION
) following Semantic Versioning. - Commit the version file and push using
bin/dev/shipit
- Coming soon:
CI will run tests, and if tests pass, it will publish a new patch version in Hex. - Publish the new Hex package version:
mix hex.publish package
(includepackage
to avoid publishing the docs, which are still too ugly to publish). - Once the new version is published:
- Change
:local
back to:remote
in your application'smix.exs
- Run
mix deps.update euclid
in your application to get the latest version.
- Change
Please note that while we appreciate bug fixes and documentation patches, we will only add or change features based on our internal needs.
Copyright and license
Copyright © 2020 Geometer, LLC. See also License
Random
geometer: a specialist in geometry
Euclid: the father of geometry