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 fc5d8e3..c93ebd0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,26 @@ -# ---> Elixir -/_build -/cover -/deps -/doc -/.fetch -erl_crash.dump -*.ez -*.beam -/config/*.secret.exs -.elixir_ls/ +# The directory Mix will write compiled artifacts to. +/_build/ +# If you run "mix test --cover", coverage assets end up here. +/cover/ + +# The directory Mix downloads your dependencies sources to. +/deps/ + +# 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 + +# Also ignore archive artifacts (built via "mix archive.build"). +*.ez + +# Ignore package tarball (built via "mix hex.build"). +elixir_rss-*.tar + +# Temporary files, for example, from tests. +/tmp/ diff --git a/README.md b/README.md index 541a290..89b5bae 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,21 @@ -# elixir-rss +# ElixirRss + +RSS reader written in Elixir + +## Installation + +If [available in Hex](https://hex.pm/docs/publish), the package can be installed +by adding `elixir_rss` to your list of dependencies in `mix.exs`: + +```elixir +def deps do + [ + {:elixir_rss, "~> 0.1.0"} + ] +end +``` + +Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc) +and published on [HexDocs](https://hexdocs.pm). Once published, the docs can +be found at . -RSS reader written in elixir \ No newline at end of file diff --git a/lib/elixir_rss.ex b/lib/elixir_rss.ex new file mode 100644 index 0000000..d1f8968 --- /dev/null +++ b/lib/elixir_rss.ex @@ -0,0 +1,18 @@ +defmodule ElixirRss do + @moduledoc """ + Documentation for `ElixirRss`. + """ + + @doc """ + Hello world. + + ## Examples + + iex> ElixirRss.hello() + :world + + """ + def hello do + :world + end +end diff --git a/lib/fetch_rss.ex b/lib/fetch_rss.ex new file mode 100644 index 0000000..a0a4b26 --- /dev/null +++ b/lib/fetch_rss.ex @@ -0,0 +1,14 @@ +defmodule ElixirRss.Fetch do + def fetch(url) do + url + |> HTTPoison.get() + |> handle_response() + end + + defp handle_response({:ok, %{status_code: 200, body: body}}) do + {:ok, body} + end + defp handle_response({_, %{status_code: _, body: body}}) do + {:error, body} + end +end diff --git a/mix.exs b/mix.exs new file mode 100644 index 0000000..d23abed --- /dev/null +++ b/mix.exs @@ -0,0 +1,27 @@ +defmodule ElixirRss.MixProject do + use Mix.Project + + def project do + [ + app: :elixir_rss, + version: "0.1.0", + elixir: "~> 1.17", + start_permanent: Mix.env() == :prod, + deps: deps() + ] + end + + # Run "mix help compile.app" to learn about applications. + def application do + [ + extra_applications: [:logger] + ] + end + + # Run "mix help deps" to learn about dependencies. + defp deps do + [ + {:httpoison, "~> 2.2.0"} + ] + end +end diff --git a/mix.lock b/mix.lock new file mode 100644 index 0000000..3b78efe --- /dev/null +++ b/mix.lock @@ -0,0 +1,11 @@ +%{ + "certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"}, + "hackney": {:hex, :hackney, "1.20.1", "8d97aec62ddddd757d128bfd1df6c5861093419f8f7a4223823537bad5d064e2", [:rebar3], [{:certifi, "~> 2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fe9094e5f1a2a2c0a7d10918fee36bfec0ec2a979994cff8cfe8058cd9af38e3"}, + "httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"}, + "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, + "mimerl": {:hex, :mimerl, "1.3.0", "d0cd9fc04b9061f82490f6581e0128379830e78535e017f7780f37fea7545726", [:rebar3], [], "hexpm", "a1e15a50d1887217de95f0b9b0793e32853f7c258a5cd227650889b38839fe9d"}, + "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, + "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, +} diff --git a/test/elixir_rss_test.exs b/test/elixir_rss_test.exs new file mode 100644 index 0000000..4e8c10b --- /dev/null +++ b/test/elixir_rss_test.exs @@ -0,0 +1,8 @@ +defmodule ElixirRssTest do + use ExUnit.Case + doctest ElixirRss + + test "greets the world" do + assert ElixirRss.hello() == :world + end +end diff --git a/test/fetch_rss_test.exs b/test/fetch_rss_test.exs new file mode 100644 index 0000000..056f814 --- /dev/null +++ b/test/fetch_rss_test.exs @@ -0,0 +1,8 @@ +defmodule ElixirRss.FetchTest do + use ExUnit.Case + doctest ElixirRss.Fetch + + test "fetch url" do + assert ElixirRss.Fetch.fetch("https://shillerben.com") |> elem(0) == :ok + end +end diff --git a/test/test_helper.exs b/test/test_helper.exs new file mode 100644 index 0000000..869559e --- /dev/null +++ b/test/test_helper.exs @@ -0,0 +1 @@ +ExUnit.start()