Class: SimpleRSS::JsonEntryNormalizer

Inherits:
Object
  • Object
show all
Defined in:
lib/simple-rss/json_entry_normalizer.rb

Constant Summary collapse

RFC3339_TIMESTAMP =
/\A\d{4}-\d{2}-\d{2}[tT]
(?:[01]\d|2[0-3]):[0-5]\d:(?:[0-5]\d|60)(?:\.\d+)?
(?:[zZ]|[+-](?:[01]\d|2[0-3]):[0-5]\d)\z/x
FIELDS =
{
  title: "title", content_html: "content_html", content_text: "content_text", summary: "summary"
}.freeze
URL_FIELDS =
%i[url external_url image banner_image].freeze

Instance Method Summary collapse

Constructor Details

#initialize(item, feed, source_url: nil) ⇒ JsonEntryNormalizer

Returns a new instance of JsonEntryNormalizer.



23
24
25
26
27
28
29
30
# File 'lib/simple-rss/json_entry_normalizer.rb', line 23

def initialize(item, feed, source_url: nil)
  @item = item
  @feed = feed
  @source_url = source_url || feed["feed_url"]
  @issues = [] #: Array[Hash[Symbol, untyped]]
  @sources = {} #: Hash[Symbol, untyped]
  @values = { raw: item, issues: @issues, field_sources: @sources } #: Hash[Symbol, untyped]
end

Instance Method Details

#entryObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/simple-rss/json_entry_normalizer.rb', line 33

def entry
  assign(:identifier, @item["id"].to_s, "id")
  FIELDS.each { |field, source| assign(field, @item[source], source) }
  URL_FIELDS.each { |field| assign(field, resolve_url(@item[field.to_s], field, field.to_s), field.to_s) }
  assign(:published_at, read_date("date_published", :published_at), "date_published")
  assign(:updated_at, read_date("date_modified", :updated_at), "date_modified")
  @values[:summary_type] = :text if @item["summary"]
  @values[:content_base_url] = @values[:url] || @source_url
  read_language
  read_categories
  read_authors
  @values[:attachments] = (@item["attachments"] || []).each_with_index.map { |attachment, index| read_attachment(attachment, index) }
  @values[:links] = %i[url external_url].filter_map do |field|
    next unless @values[field]

    { url: @values[field], rel: field == :url ? "alternate" : "related", media_type: nil, source: field.to_s, raw: @item[field.to_s] }
  end
  SimpleRSS::NormalizedEntry.new(@values)
end