module MosEisley::S3PO
Public Class Methods
create_event(e, type = nil)
click to toggle source
# File lib/s3po/s3po.rb, line 52 def self.create_event(e, type = nil) type ||= e[:type] if e[:type] case type when 'message', 'app_mention' return Message.new(e) when :action return Action.new(e) else return GenericEvent.new(e) end end
decode_text(text)
click to toggle source
Return plain text parsing Slack escapes and commands @param text [String] string to decode @return [String] plain text
# File lib/s3po/s3po.rb, line 78 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
escape_command(cmd, label = nil)
click to toggle source
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 98 def self.escape_command(cmd, label = nil) "<#{cmd}" + (label ? "|#{label}" : '') + '>' end
escape_text(text)
click to toggle source
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 67 def self.escape_text(text) esced = String.new(text) esced.gsub!('&', '&') esced.gsub!('<', '<') esced.gsub!('>', '>') return esced end
format_json_value(val)
click to toggle source
Return Ruby object/value to JSON standard format @param val [Object] @return [Object]
# File lib/s3po/s3po.rb, line 36 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
json_with_object(obj, pretty: false, opts: nil)
click to toggle source
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 20 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
parse_json(json)
click to toggle source
# File lib/s3po/s3po.rb, line 9 def self.parse_json(json) return JSON.parse(json, {symbolize_names: true}) rescue => e MosEisley.logger.warn("JSON parse error: #{e}") return nil end