# frozen_string_literal: true require "json" require "cgi" require "time" require_relative "create_title.rb" class SocialcastMessage DEFAULT_CATEGORY = "Socialcast Import" DEFAULT_TAG = "socialcast-import" TAGS_AND_CATEGORIES = { "somegroupname" => { category: "Apple Stems", tags: %w[waxy tough], }, "someothergroupname" => { category: "Orange Peels", tags: ["oily"], }, } def initialize(message_json) @parsed_json = JSON.parse message_json end def topic topic = {} topic[:id] = @parsed_json["id"] topic[:author_id] = @parsed_json["user"]["id"] topic[:title] = title topic[:raw] = @parsed_json["body"] topic[:created_at] = Time.parse @parsed_json["created_at"] topic[:tags] = tags topic[:category] = category topic end def title CreateTitle.from_body @parsed_json["body"] end def tags tags = [] if group if TAGS_AND_CATEGORIES[group] tags = TAGS_AND_CATEGORIES[group][:tags] else tags << group end end tags << DEFAULT_TAG tags end def category category = DEFAULT_CATEGORY category = TAGS_AND_CATEGORIES[group][:category] if group && TAGS_AND_CATEGORIES[group] category end def group if @parsed_json["group"] && @parsed_json["group"]["groupname"] @parsed_json["group"]["groupname"].downcase end end def url @parsed_json["url"] end def message_type @parsed_json["message_type"] end def replies posts = [] comments = @parsed_json["comments"] comments.each { |comment| posts << post_from_comment(comment) } posts end def post_from_comment(comment) post = {} post[:id] = comment["id"] post[:author_id] = comment["user"]["id"] post[:raw] = comment["text"] post[:created_at] = Time.parse comment["created_at"] post end private def unescape(html) return nil unless html CGI.unescapeHTML html end end