dingtalk-robot 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/lib/dingtalk/robot.rb +3 -1
- data/lib/dingtalk/robot/strategies/action_card_strategy.rb +50 -0
- data/lib/dingtalk/robot/strategies/feed_card_strategy.rb +41 -0
- data/lib/dingtalk/robot/strategies/markdown_strategy.rb +1 -1
- data/lib/dingtalk/robot/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88afedaa19a971d5d0be958775341c24a7e9cd2948b0040e3a3b3e9ad93d4049
|
4
|
+
data.tar.gz: 7d664f06b7ffed8e940652affa5cac485923b0648c5667a7e30acd26b7e13a43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 593af027aab117413d124be0ae9123dab63146b755e2457e0c32824ef346c13652754a05b8ab850b56d7d4362d120aca2f128fd698a7cde75be3e23184f70042
|
7
|
+
data.tar.gz: 0cbbee6efcae6624f152fc9bcaee8ee8adf7bbb34d8db0476fdf0b2c8070904b5c172ac58a823eb8971c88a861b8fb263ce88dff4bb32e19111b872e8e50f181
|
data/README.md
CHANGED
@@ -6,6 +6,14 @@ A simple wrapper for [Dingtalk Group Robot](https://open-doc.dingtalk.com/microa
|
|
6
6
|
[![Build Status](https://travis-ci.org/pinewong/dingtalk-robot.svg)](https://travis-ci.org/pinewong/dingtalk-robot)
|
7
7
|
[![Test Coverage](https://codecov.io/github/pinewong/dingtalk-robot/coverage.svg?branch=master)](https://codecov.io/github/pinewong/dingtalk-robot?branch=master)
|
8
8
|
|
9
|
+
## Supported Type
|
10
|
+
|
11
|
+
- [x] Text
|
12
|
+
- [x] Markdown
|
13
|
+
- [x] ActionCard
|
14
|
+
- [x] FeedCard
|
15
|
+
- [ ] Link
|
16
|
+
|
9
17
|
## Installation
|
10
18
|
|
11
19
|
Add this line to your application's Gemfile:
|
data/lib/dingtalk/robot.rb
CHANGED
@@ -6,6 +6,8 @@ require 'dingtalk/robot/configurable'
|
|
6
6
|
require 'dingtalk/robot/errors'
|
7
7
|
require 'dingtalk/robot/strategies/text_strategy'
|
8
8
|
require 'dingtalk/robot/strategies/markdown_strategy'
|
9
|
+
require 'dingtalk/robot/strategies/action_card_strategy'
|
10
|
+
require 'dingtalk/robot/strategies/feed_card_strategy'
|
9
11
|
|
10
12
|
module Dingtalk
|
11
13
|
# DingTalk Group Robot
|
@@ -44,7 +46,7 @@ module Dingtalk
|
|
44
46
|
raise ArgumentError, "Undefined channel template, channel: #{channel}, template_dir: #{config.template_dir}"
|
45
47
|
end
|
46
48
|
types = template_paths.map do |template_path|
|
47
|
-
template_path[%r{#{config.template_dir}/#{channel}.([a-
|
49
|
+
template_path[%r{#{config.template_dir}/#{channel}.([a-z_]+).erb}, 1].to_sym
|
48
50
|
end
|
49
51
|
types.include?(config.message_type) ? config.message_type : types.first
|
50
52
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dingtalk
|
4
|
+
class Robot
|
5
|
+
# Markdown type strategy for sending message
|
6
|
+
class ActionCardStrategy
|
7
|
+
def initialize(webhook_url, message)
|
8
|
+
@webhook_url = webhook_url
|
9
|
+
@message = message
|
10
|
+
end
|
11
|
+
|
12
|
+
# @option options [String] :title
|
13
|
+
# @option options [String] :single_title
|
14
|
+
# @option options [String] :single_url
|
15
|
+
# @option options [Integer] :hide_avatar (0) 0-show, 1-hide
|
16
|
+
def notify(**options)
|
17
|
+
title = options[:title].to_s
|
18
|
+
raise ArgumentError, 'title must be present, strategy: action_card' if title.empty?
|
19
|
+
single_title = options[:single_title].to_s
|
20
|
+
raise ArgumentError, 'single_title must be present, strategy: action_card' if single_title.empty?
|
21
|
+
single_url = options[:single_url].to_s
|
22
|
+
raise ArgumentError, 'single_url must be present, strategy: action_card' if single_url.empty?
|
23
|
+
hide_avatar = options[:hide_avatar].to_i
|
24
|
+
body = generate_body(title, single_title, single_url, hide_avatar)
|
25
|
+
headers = {
|
26
|
+
'Content-Type': 'application/json',
|
27
|
+
Accept: 'application/json'
|
28
|
+
}
|
29
|
+
Net::HTTP.post(URI(webhook_url), body.to_json, headers).body
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
attr_reader :webhook_url, :message
|
35
|
+
|
36
|
+
def generate_body(title, single_title, single_url, hide_avatar)
|
37
|
+
{
|
38
|
+
msgtype: 'actionCard',
|
39
|
+
actionCard: {
|
40
|
+
title: title,
|
41
|
+
text: message,
|
42
|
+
singleTitle: single_title,
|
43
|
+
singleURL: single_url,
|
44
|
+
hideAvatar: hide_avatar
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dingtalk
|
4
|
+
class Robot
|
5
|
+
# Markdown type strategy for sending message
|
6
|
+
class FeedCardStrategy
|
7
|
+
Link = Struct.new(:title, :messageURL, :picURL)
|
8
|
+
|
9
|
+
def initialize(webhook_url, message)
|
10
|
+
@webhook_url = webhook_url
|
11
|
+
@message = message
|
12
|
+
end
|
13
|
+
|
14
|
+
# @option options [Array<Link>, Link] :links
|
15
|
+
def notify(**options)
|
16
|
+
links = Array.wrap(options[:links])
|
17
|
+
all_present = links.all? { |link| link.all?(&:present?) }
|
18
|
+
raise ArgumentError, 'All items of links must be present, strategy: feed_card' unless all_present
|
19
|
+
body = generate_body(links)
|
20
|
+
headers = {
|
21
|
+
'Content-Type': 'application/json',
|
22
|
+
Accept: 'application/json'
|
23
|
+
}
|
24
|
+
Net::HTTP.post(URI(webhook_url), body.to_json, headers).body
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :webhook_url, :message
|
30
|
+
|
31
|
+
def generate_body(links)
|
32
|
+
{
|
33
|
+
msgtype: 'feedCard',
|
34
|
+
feedCard: {
|
35
|
+
links: links
|
36
|
+
}
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dingtalk-robot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pine Wong
|
@@ -58,6 +58,8 @@ files:
|
|
58
58
|
- lib/dingtalk/robot.rb
|
59
59
|
- lib/dingtalk/robot/configurable.rb
|
60
60
|
- lib/dingtalk/robot/errors.rb
|
61
|
+
- lib/dingtalk/robot/strategies/action_card_strategy.rb
|
62
|
+
- lib/dingtalk/robot/strategies/feed_card_strategy.rb
|
61
63
|
- lib/dingtalk/robot/strategies/markdown_strategy.rb
|
62
64
|
- lib/dingtalk/robot/strategies/text_strategy.rb
|
63
65
|
- lib/dingtalk/robot/version.rb
|