Planeta
Constants
AVATAR_DIR = "public/avatars"
HOSTNAME_PATTERN = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?$/
HTML_ENTITIES = {"&" => "&", "<" => "<", ">" => ">", """ => "\"", "'" => "'", "…" => "...", "→" => "->", "←" => "<-", "‘" => "'", "’" => "'", "“" => "\"", "”" => "\"", "–" => "-", "—" => "--", " " => " ", "&" => "&", "<" => "<", ">" => ">", "|" => "|", "&#124;" => "|"}
HTML_ESCAPE_MAP = {"&" => "&", "<" => "<", ">" => ">", "\"" => """, "'" => "'"}
MAX_AVATAR_SIZE = 1048576
PRIVATE_IP_PREFIXES = {"10.", "172.16.", "172.17.", "172.18.", "172.19.", "172.20.", "172.21.", "172.22.", "172.23.", "172.24.", "172.25.", "172.26.", "172.27.", "172.28.", "172.29.", "172.30.", "172.31.", "192.168.", "169.254."}
READ_MORE_PATTERNS = [/(?i)\s*sigue leyendo\s*[-–—→]?\s*/, /(?i)\s*read more\s*[-–—→]?\s*/, /(?i)\s*continue reading\s*[-–—→]?\s*/, /(?i)\s*click here to read more\s*/, /<a\s+class=["']more-link["'][^>]*>.*?<\/a>/im, /<a\s+class=["']read-more["'][^>]*>.*?<\/a>/im]
SAFE_URL_PATTERN = /^(https?:\/\/[^\s<]+)$/
VERSION = "0.4.0"
Class methods
cache_dir
Sourcecache_duration
Sourcecache_duration=(duration : Time::Span)
Sourceconfig
Sourceensure_cache_dir
SourceFetch feeds concurrently using Crystal fibers for improved performance
This method processes multiple feed URLs in parallel using Crystal's lightweight concurrency model. Each feed is fetched in its own fiber, allowing for efficient utilization of I/O resources.
@param urls [Array(String)] Array of feed URLs to fetch @return [Array(FeedEntry)] Combined array of all feed entries
init
Sourcelog
SourceParse ATOM feed entries ameba:disable Metrics/CyclomaticComplexity
Parse RSS feed entries