Module: Teems::Models::Parsing

Included in:
Event, Message
Defined in:
lib/teems/models/parsing.rb

Overview

Shared parsing helpers for API response data

Class Method Summary collapse

Class Method Details

.mention_display_name(entries) ⇒ Object



50
51
52
53
# File 'lib/teems/models/parsing.rb', line 50

def mention_display_name(entries)
  name = entries.filter_map { |entry| entry['displayName'] }.join(' ')
  name unless name.empty?
end

.normalize_mentions(data) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/teems/models/parsing.rb', line 41

def normalize_mentions(data)
  return nil unless data

  parsed = data.is_a?(String) ? JSON.parse(data) : data
  parsed if parsed.is_a?(Array)
rescue JSON::ParserError
  nil
end

.parse_files_json(files_json) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/teems/models/parsing.rb', line 24

def parse_files_json(files_json)
  return [] unless files_json

  JSON.parse(files_json)
rescue JSON::ParserError
  []
end

.parse_mentions(mentions_json) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/teems/models/parsing.rb', line 32

def parse_mentions(mentions_json)
  raw = normalize_mentions(mentions_json)
  return [] unless raw

  raw.group_by { |mention| mention['mri'] }
     .except(nil)
     .each_value.filter_map { |entries| mention_display_name(entries) }
end

.parse_time(time_str) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/teems/models/parsing.rb', line 16

def parse_time(time_str)
  return nil unless time_str

  Time.parse(time_str)
rescue ArgumentError
  nil
end

.strip_html(html) ⇒ Object



9
10
11
12
13
14
# File 'lib/teems/models/parsing.rb', line 9

def strip_html(html)
  return nil unless html

  require 'cgi'
  CGI.unescapeHTML(html.gsub(/<[^>]+>/, ' ')).gsub('&nbsp;', ' ').gsub(/\s+/, ' ').strip
end