Initial commit

This commit is contained in:
2021-07-12 14:29:27 +03:00
parent 6c7cd5aee2
commit b48a9f5c58
28 changed files with 472 additions and 13 deletions

View File

@@ -0,0 +1,33 @@
defmodule ExDataGovUA.Package.Meta.Base do
defstruct [
:profile,
:name,
:contributors,
:created,
:title,
:keywords,
:version,
:licenses,
:homepage,
:id,
:resources,
:description
]
@type t :: %__MODULE__{
profile: String.t(),
name: String.t(),
contributors: List.t(),
created: String.t(),
title: String.t(),
keywords: List.t(),
version: String.t(),
licenses: List.t(),
homepage: String.t(),
id: String.t(),
resources: List.t(),
description: String.t()
}
use ExConstructor
end

View File

@@ -0,0 +1,30 @@
defmodule ExDataGovUA.Package.Meta.Parser do
@default_fetcher Application.get_env(:ex_datagovua, :default_fetcher)
@default_decoder Application.get_env(:ex_datagovua, :default_decoder)
@type result :: %ExDataGovUA.Package.Meta.Base{}
@type id :: String.t()
@type url :: String.t()
@type fetcher :: Atom.t()
@type decoder :: Atom.t()
@doc """
Return meta information URL by data package ID
"""
@spec url(id) :: url
def url(id) do
"https://data.gov.ua/api/3/action/package_show?id=#{id}"
end
@doc """
Return meta information (ExDataGovUA.Package.Meta.Base) by data package ID
"""
@spec parse(id, fetcher, decoder) :: %ExDataGovUA.Package.Meta.Base{}
def parse(id, fetcher \\ @default_fetcher, decoder \\ @default_decoder) do
with {:ok, body} <- fetcher.fetch(:get, url(id)),
{:ok, map} <- decoder.decode(body),
result <- ExDataGovUA.Package.Meta.Base.new(map.result) do
result
end
end
end