module MosEisley::S3PO
Public Class Methods
# File lib/s3po/s3po.rb, line 50 def self.create_event(e, my_id: nil, type: nil) type ||= e[:type] if e[:type] case type when 'message', 'app_mention' return Message.new(e, my_id) when :action return Action.new(e) else return GenericEvent.new(e) end end
Return plain text parsing Slack escapes and commands @param text [String] string to decode @return [String] plain text
# File lib/s3po/s3po.rb, line 76 def self.decode_text(text) plain = String.new(text) # keep just the labels plain.gsub!(/<([#@]*)[^>|]*\|([^>]*)>/, '<\1\2>') # process commands plain.gsub!(/<!(everyone|channel|here)>/, '<@\1>') plain.gsub!(/<!(.*?)>/, '<\1>') # remove brackets plain.gsub!(/<(.*?)>/, '\1') # unescape plain.gsub!('>', '>') plain.gsub!('<', '<') plain.gsub!('&', '&') return plain end
Enclose Slack command in control characters @param cmd [String] command @param label [String] optional label @return [String] escaped command
# File lib/s3po/s3po.rb, line 104 def self.escape_command(cmd, label = nil) "<#{cmd}" + (label ? "|#{label}" : '') + '>' end
Escape string with basic Slack rules; no command encoding is done as it often requires more information than provided in the text @param text [String] string to escape @return [String] escaped text
# File lib/s3po/s3po.rb, line 65 def self.escape_text(text) esced = String.new(text) esced.gsub!('&', '&') esced.gsub!('<', '<') esced.gsub!('>', '>') return esced end
Return Ruby object/value to JSON standard format @param val [Object] @return [Object]
# File lib/s3po/s3po.rb, line 34 def self.format_json_value(val) s3po = MosEisley::S3PO case val when Array val.map { |v| s3po.format_json_value(v) } when Hash val.reduce({}) { |h, (k, v)| h.merge({k => s3po.format_json_value(v)}) } when String val.encode('UTF-8', {invalid: :replace, undef: :replace}) when Time val.utc.iso8601 else val end end
Convert object into JSON, optionally pretty-format @param obj [Object] any Ruby object @param opts [Hash] any JSON options @return [String] JSON string
# File lib/s3po/s3po.rb, line 18 def self.json_with_object(obj, pretty: false, opts: nil) return '{}' if obj.nil? if pretty opts = { indent: ' ', space: ' ', object_nl: "\n", array_nl: "\n" } end JSON.fast_generate(MosEisley::S3PO.format_json_value(obj), opts) end
# File lib/s3po/s3po.rb, line 7 def self.parse_json(json) return JSON.parse(json, {symbolize_names: true}) rescue => e MosEisley.logger.warn("JSON parse error: #{e}") return nil end
Return text with basic visual formatting symbols removed;
it will remove all symbols regardless of syntax
@param text [String] string to clean up @return [String] cleaned text
# File lib/s3po/s3po.rb, line 96 def self.remove_symbols(text) text.delete('_*~`') end