Initial commit
This commit is contained in:
33
lib/ex_data_gov_u_a/package/meta/base.ex
Normal file
33
lib/ex_data_gov_u_a/package/meta/base.ex
Normal 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
|
||||
30
lib/ex_data_gov_u_a/package/meta/parser.ex
Normal file
30
lib/ex_data_gov_u_a/package/meta/parser.ex
Normal 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
|
||||
Reference in New Issue
Block a user