Packages

This package is used for learning purposes on how to use 'mix' and 'hex' for sharing elixir code. Do NOT waste your time here. The License is MIT, but the project uses a private api.

Current section

Files

Jump to
cape lib Arpas REST Esri query.ex
Raw

lib/Arpas/REST/Esri/query.ex

defmodule Arpas.REST.Esri.Query do
alias Arpas.REST.Esri.Permesso
alias Cape.Utilita, as: Ut
alias Cape.Generico, as: Gen
def take_x_features, do: MapSet.new([:token, :sortby, :where, :outfields, :f])
def take_x_info, do: MapSet.new([:token, :f])
def tipo, do: MapSet.new([:feature_info, :feature_table])
defstruct [
:url,
:token,
:info_token,
:sortby,
where: "1=1",
outfields: "*",
f: "json",
feature: "",
user: :no_token,
tipo: :feature_info
]
def make_url(:feature_info, esri_query) do
take = take_x_info()
make_url(esri_query, take)
end
def make_url(:feature_table, esri_query) do
take = take_x_features()
make_url(esri_query, take)
end
def make_url(esri_query, take_what) do
numero = esri_query.feature
esri_map =
esri_query
|> Ut.struct2map_no_nil()
|> Ut.filtra_solo(take_what)
add_feature_num =
case numero do
"" ->
""
altro ->
altro <> "/" <> "query"
end
my_uri = URI.parse(esri_query.url <> add_feature_num)
URI.append_query(my_uri, URI.encode_query(esri_map))
|> URI.to_string()
end
def encode_query(esri_query) do
Ut.encode_query(esri_query)
end
def merge_token(esri_query, tk) do
token = Map.get(tk, "access_token")
esri_query = %{esri_query | token: token}
esri_query
end
def add_token(esri_query, user \\ :no_token) do
case user do
:no_token ->
esri_query
:alai ->
merge_token(esri_query, Permesso.token(user))
:idro ->
merge_token(esri_query, Permesso.token(user))
_user ->
esri_query
end
end
def url_test do
{:ok, contenuto} = File.read(Path.expand("secret_esri_feature.txt"))
contenuto
end
def dammi(query) do
tipo = query.tipo
new_query =
case query.user do
:no_token ->
query
user ->
query
|> add_token(user)
end
url = make_url(tipo, new_query)
{:ok, dato} = Gen.get(url)
dato
end
def info, do: dammi(%Arpas.REST.Esri.Query{url: url_test(), tipo: :feature_info})
def tab1, do: dammi(%Arpas.REST.Esri.Query{url: url_test(), tipo: :feature_table, feature: "0"})
end