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