Sha256: daf11773334ad11271c8d1ce65db80710e08207f1a55eee3cab0c4bc64c0b8c4

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

module ExceptionNotificationLarkNotifier
  class Client
    def initialize(options)
      @secret = options[:webhook_secret].to_s.strip
      @http = Http.new(
        uri: options.fetch(:webhook_url),
        options: options[:http] || {}
      )
    end

    def ping(payload)
      payload = {text: payload} unless payload.is_a?(Hash)
      post(payload)
    end

    def post(payload)
      message = build_message(payload)

      unless @secret.empty?
        timestamp = Time.now.to_i
        sign = Signer.generate(timestamp, @secret)
        message[:timestamp] = timestamp
        message[:sign] = sign
      end

      @http.post(json: message)
    end

    private

    def build_message(payload)
      case payload
      in { text: content }
        {msg_type: "text", content: {text: content}}
      in { post: content }
        {msg_type: "post", content: {post: content}}
      in { image: content }
        {msg_type: "image", content: {image_key: content}}
      in { share_chat: content }
        {msg_type: "share_chat", content: {share_chat_id: content}}
      in { interactive: content }
        {msg_type: "interactive", card: content}
      else
        raise ::ArgumentError, "msg_type is required"
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
exception_notification-lark-notifier-1.0.2 lib/exception_notification-lark-notifier/client.rb
exception_notification-lark-notifier-1.0.1 lib/exception_notification-lark-notifier/client.rb
exception_notification-lark-notifier-1.0.0 lib/exception_notification-lark-notifier/client.rb