mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 10:33:43 +08:00
30990006a9
This reduces chances of errors where consumers of strings mutate inputs and reduces memory usage of the app. Test suite passes now, but there may be some stuff left, so we will run a few sites on a branch prior to merging
101 lines
1.9 KiB
Ruby
101 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: ["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
|
|
if group && TAGS_AND_CATEGORIES[group]
|
|
category = TAGS_AND_CATEGORIES[group][:category]
|
|
end
|
|
category
|
|
end
|
|
|
|
def group
|
|
@parsed_json['group']['groupname'].downcase if @parsed_json['group'] && @parsed_json['group']['groupname']
|
|
end
|
|
|
|
def url
|
|
@parsed_json['url']
|
|
end
|
|
|
|
def message_type
|
|
@parsed_json['message_type']
|
|
end
|
|
|
|
def replies
|
|
posts = []
|
|
comments = @parsed_json['comments']
|
|
comments.each do |comment|
|
|
posts << post_from_comment(comment)
|
|
end
|
|
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
|