discourse/script/import_scripts/socialcast/socialcast_message.rb

98 lines
1.9 KiB
Ruby

# 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