Current section
Files
Jump to
Current section
Files
lib/modules/news/feed.ex
defmodule Snowhite.Modules.News.Feed do
@moduledoc """
News Feed structure
"""
defstruct [:name, :url, :adapter, :options]
require Logger
alias __MODULE__
@default_adapter Snowhite.Modules.News.Adapters.Rss
@type init_arguments ::
{String.t(), String.t()}
| %{name: String.t(), url: String.t(), adapter: module(), options: map()}
@type t :: %Feed{name: String.t(), url: String.t(), adapter: module(), options: map()}
@doc "Initialize a feed structure"
@spec new(init_arguments()) :: t()
def new({name, url}) do
new(%{name: name, url: url, adapter: @default_adapter, options: %{}})
end
def new(%{name: name, url: url, adapter: adapter, options: options}) do
%Feed{name: name, url: url, adapter: adapter, options: options}
end
def call_adapter(%Feed{name: name, url: url, adapter: adapter, options: options}) do
Logger.info("[#{inspect(adapter)}] [#{name}] Polling #{url}")
news = apply(adapter, :fetch, [url, options])
Logger.info("[#{inspect(adapter)}] [#{name}] got #{length(news)} news")
news
end
end