Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 2
updates:
- package-ecosystem: mix
directory: "/"
schedule:
interval: monthly
time: "17:00"
timezone: Europe/London
ignore:
# ignore all patch updates in dev dependencies ref: github.com/dwyl/technology-stack/issues/126 [alphabetical list]
- dependency-name: "credo"
update-types: ["version-update:semver-patch"]
- dependency-name: "dialyxir"
update-types: ["version-update:semver-patch"]
- dependency-name: "excoveralls"
update-types: ["version-update:semver-patch"]
- dependency-name: "ex_doc"
update-types: ["version-update:semver-patch"]
- dependency-name: "esbuild"
update-types: ["version-update:semver-patch"]
- dependency-name: "floki"
update-types: ["version-update:semver-patch"]
- dependency-name: "phoenix_live_reload"
update-types: ["version-update:semver-patch"]
63 changes: 63 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Elixir CI

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
build:
name: Build and test
runs-on: ubuntu-latest
services:
postgres:
image: postgres:12
ports: ['5432:5432']
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
# https://github.com/actions/checkout
- uses: actions/checkout@v6
# https://github.com/erlef/setup-beam
- name: Set up Elixir
uses: erlef/setup-beam@v1
with:
elixir-version: '1.18.4' # Define the elixir version [required]
otp-version: '28.0.1' # Define the OTP version [required]
- name: Restore dependencies cache
uses: actions/cache@v4
with:
path: deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-
- name: Install dependencies
run: mix deps.get
- name: Run Tests
run: mix coveralls.json
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
MIX_ENV: test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v6

# Continuous Deployment to Fly.io
# https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/
# deploy:
# name: Deploy app
# runs-on: ubuntu-latest
# needs: build
# # https://stackoverflow.com/questions/58139406/only-run-job-on-specific-branch-with-github-actions
# if: github.ref == 'refs/heads/main'
# env:
# FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
# steps:
# - uses: actions/checkout@v2
# - uses: superfly/flyctl-actions@1.1
# with:
# args: "deploy"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
erl_crash.dump
*.ez
.DS_Store
.elixir_ls
11 changes: 0 additions & 11 deletions .travis.yml

This file was deleted.

29 changes: 1 addition & 28 deletions codecov_example/config/config.exs
Original file line number Diff line number Diff line change
@@ -1,30 +1,3 @@
# This file is responsible for configuring your application
# and its dependencies with the aid of the Mix.Config module.
use Mix.Config

# This configuration is loaded before any dependency and is restricted
# to this project. If another project depends on this project, this
# file won't be loaded nor affect the parent project. For this reason,
# if you want to provide default values for your application for
# 3rd-party users, it should be done in your "mix.exs" file.

# You can configure your application as:
#
# config :codecov_example, key: :value
#
# and access this configuration in your application as:
#
# Application.get_env(:codecov_example, :key)
#
# You can also configure a 3rd-party app:
#
# config :logger, level: :info
#

# It is also possible to import configuration files, relative to this
# directory. For example, you can emulate configuration per environment
# by uncommenting the line below and defining dev.exs, test.exs and such.
# Configuration from the imported file will override the ones defined
# here (which is why it is important to import them last).
#
# import_config "#{Mix.env()}.exs"
import Config
12 changes: 0 additions & 12 deletions codecov_example/mix.lock

This file was deleted.

1 change: 1 addition & 0 deletions config/config.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import Config
19 changes: 19 additions & 0 deletions coveralls.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"coverage_options": {
"minimum_coverage": 100
},
"skip_files": [
"test/",
"examples/control/",
"examples/exceptions/",
"examples/functions/",
"examples/macros/",
"examples/nodes/",
"examples/odds/",
"examples/otp-server/",
"examples/spawn/",
"examples/strings/",
"examples/typespecs/",
"examples/use/"
]
}
3 changes: 2 additions & 1 deletion examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
Many (_most?_) of the Examples in this `/examples` dir
are either derived/adapted from or directly "_borrowed_"
from the _fantastic_ book:
Programming Elixir 1.3 by the _brilliant_ Dave Thomas! @pragdave
Programming Elixir 1.3 by the _brilliant_ Dave Thomas!
[@pragdave](https://github.com/pragdave)

![Programming Elixir 1.3. front cover](https://cloud.githubusercontent.com/assets/194400/22402694/d13148de-e5f8-11e6-92cb-14584a353f7e.png)

Expand Down
8 changes: 4 additions & 4 deletions examples/control/fizzbuzz1.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/elixir13 for more book information.
#---
defmodule FizzBuzz do
defmodule FizzBuzz1 do

def upto(n) when n > 0, do: _downto(n, [])

defp _downto(0, result), do: result
defp _downto(current, result) do
next_answer =
next_answer =
cond do
rem(current, 3) == 0 and rem(current, 5) == 0 ->
rem(current, 3) == 0 and rem(current, 5) == 0 ->
"FizzBuzz"
rem(current, 3) == 0 ->
"Fizz"
rem(current, 5) == 0 ->
rem(current, 5) == 0 ->
"Buzz"
true ->
current
Expand Down
6 changes: 3 additions & 3 deletions examples/control/fizzbuzz2.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/elixir13 for more book information.
#---
defmodule FizzBuzz do
defmodule FizzBuzz2 do
def upto(n) when n > 0 do
1..n |> Enum.map(&fizzbuzz/1)
end

defp fizzbuzz(n) do
cond do
rem(n, 3) == 0 and rem(n, 5) == 0 ->
rem(n, 3) == 0 and rem(n, 5) == 0 ->
"FizzBuzz"
rem(n, 3) == 0 ->
"Fizz"
rem(n, 5) == 0 ->
rem(n, 5) == 0 ->
"Buzz"
true ->
n
Expand Down
3 changes: 1 addition & 2 deletions examples/control/fizzbuzz3.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/elixir13 for more book information.
#---
defmodule FizzBuzz do
defmodule FizzBuzz3 do
def upto(n) when n > 0, do: 1..n |> Enum.map(&fizzbuzz/1)

defp fizzbuzz(n), do: _fizzword(n, rem(n, 3), rem(n, 5))
Expand All @@ -16,4 +16,3 @@ defmodule FizzBuzz do
defp _fizzword(_n, _, 0), do: "Buzz"
defp _fizzword( n, _, _), do: n
end

9 changes: 4 additions & 5 deletions examples/exceptions/defexception.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
#---
defmodule KinectProtocolError do

defexception message: "Kinect protocol error",
can_retry: false
defexception message: "Kinect protocol error",
can_retry: false

def full_message(me) do
"Kinect failed: #{me.message}, retriable: #{me.can_retry}"
Expand All @@ -29,12 +29,11 @@ defmodule B do

def start do
try do
talk_to_kinect
talk_to_kinect()
rescue
error in [KinectProtocolError] ->
IO.puts KinectProtocolError.full_message(error)
if error.can_retry, do: schedule_retry
if error.can_retry, do: schedule_retry()
end
end
end

8 changes: 4 additions & 4 deletions examples/macros/eg2.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/elixir13 for more book information.
#---
defmodule My do
defmodule MyEg do
defmacro macro(code) do
IO.inspect code
quote do
Expand All @@ -15,8 +15,8 @@ defmodule My do
end
end

defmodule Test do
require My
defmodule MyEgTest do
require MyEg

My.macro(1 + 2)
MyEg.macro(1 + 2)
end
4 changes: 2 additions & 2 deletions examples/macros/hygiene.ex
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ defmodule Scope do
end
end

defmodule Test do
defmodule ScopeTest do
require Scope

local = 123
Scope.update_local("cat")
IO.puts "On return, local = #{local}"
Expand Down
8 changes: 4 additions & 4 deletions examples/macros/myif.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/elixir13 for more book information.
#---
defmodule My do
defmodule MyIf do
defmacro if(condition, clauses) do
do_clause = Keyword.get(clauses, :do, nil)
else_clause = Keyword.get(clauses, :else, nil)
Expand All @@ -21,9 +21,9 @@ end



defmodule Test do
require My
My.if 1==2 do
defmodule MyIfTest do
require MyIf
MyIf.if 1==2 do
IO.puts "1 == 2"
else
IO.puts "1 != 2"
Expand Down
24 changes: 0 additions & 24 deletions examples/macros/operators.ex

This file was deleted.

6 changes: 3 additions & 3 deletions examples/macros/times.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ defmodule Times do
end
end

defmodule Test do
defmodule TimesTest do
require Times
Times.times_n(3)
Times.times_n(4)
end

IO.puts Test.times_3(4) #=> 12
IO.puts Test.times_4(5) #=> 20
IO.puts TimesTest.times_3(4) #=> 12
IO.puts TimesTest.times_4(5) #=> 20
4 changes: 2 additions & 2 deletions examples/nodes/ticker.ex
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ defmodule Ticker do
end
end

defmodule Client do
defmodule TickerClient do

def start do
pid = spawn(__MODULE__, :receiver, [])
Expand All @@ -47,7 +47,7 @@ defmodule Client do
receive do
{ :tick } ->
IO.puts "tock in client"
receiver
receiver()
end
end
end
Loading
Loading