rong_cloud_server 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -6
- data/lib/core_ext/array.rb +8 -0
- data/lib/rong_cloud.rb +1 -0
- data/lib/rong_cloud/errors.rb +2 -0
- data/lib/rong_cloud/request.rb +28 -18
- data/lib/rong_cloud/service.rb +2 -0
- data/lib/rong_cloud/services/chatroom.rb +98 -0
- data/lib/rong_cloud/services/message.rb +23 -3
- data/lib/rong_cloud/services/message/message_channel.rb +2 -0
- data/rong_cloud.gemspec +1 -1
- data/test/rong_cloud/service_test.rb +2 -0
- data/test/rong_cloud/services/chatroom_test.rb +136 -0
- data/test/rong_cloud/services/group_test.rb +4 -3
- data/test/rong_cloud/services/message/message_channel_test.rb +21 -1
- data/test/rong_cloud/services/message_test.rb +40 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f18dffa1673ff35d013c644ec931c44af2f5931
|
4
|
+
data.tar.gz: 7d63b3bee76e8106091e92753f4ad8f2ec48ea05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2366fd2761501b3e14a03b5c8e27c0f31c8086a749d5409bae58704f7d2c998578ed1759aed4ce45875e2a266ba3efebaa792a96959153bbb7dbcc440b41a700
|
7
|
+
data.tar.gz: d6822867ea92aff168a5641df355deb9bc461d71c8f6af4280c7aacba4761742c837891b910b936774ec6576c0128d1e671dc889c09d0fc50405191f31dc2d6c
|
data/README.md
CHANGED
@@ -28,12 +28,10 @@
|
|
28
28
|
2. **简洁**:不过分封装,仅做必要的请求实现,使用方自行处理响应的 JSON 解析后的 Hash 对象,各字段释义请自行查阅融云文档;
|
29
29
|
3. **丰富的异常类型**:针对不同的 HTTP 状态码,抛出相对应的异常类型,同时可以通过异常对象的 `business_code` 方法获取错误业务码,可以参考[request test 的代码](https://github.com/Martin91/rong_cloud/blob/master/test/rong_cloud/request_test.rb)。
|
30
30
|
|
31
|
-
### TODOs
|
32
|
-
1.
|
33
|
-
2.
|
34
|
-
3.
|
35
|
-
4. 消息历史记录;
|
36
|
-
5. 在线状态订阅。
|
31
|
+
### TODOs for v0.1.0
|
32
|
+
1. 实时消息路由;
|
33
|
+
2. 消息历史记录;
|
34
|
+
3. 在线状态订阅。
|
37
35
|
|
38
36
|
### How to contribute
|
39
37
|
1. Fork this repo;
|
data/lib/rong_cloud.rb
CHANGED
data/lib/rong_cloud/errors.rb
CHANGED
data/lib/rong_cloud/request.rb
CHANGED
@@ -8,6 +8,24 @@ module RongCloud
|
|
8
8
|
module Request
|
9
9
|
include Signature
|
10
10
|
|
11
|
+
# 执行请求
|
12
|
+
# @param path [String] 请求 API 的相对路径
|
13
|
+
# @param params [Hash] 请求的参数
|
14
|
+
# @param content_type [Symbol] 请求数据编码格式,:form_data 或者 :json,默认 :form_data
|
15
|
+
# @return [Hash] JSON 解析后的响应数据
|
16
|
+
# @raise [RongCloud::BadRequest] 请求参数有误,缺失或者不正确等,详见官方文档
|
17
|
+
def request(path, params = nil, content_type = :form_data)
|
18
|
+
uri = get_uri(path)
|
19
|
+
req = initialize_request(uri, params, content_type)
|
20
|
+
use_ssl = uri.scheme == 'https'
|
21
|
+
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http|
|
22
|
+
http.request(req)
|
23
|
+
end
|
24
|
+
|
25
|
+
handle_response(res)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
11
29
|
# 拼接请求的接口的路径
|
12
30
|
#
|
13
31
|
# @param path [String] 接口的相对路径,e.g. "/user/getToken" 或者 "user/getToken",代码中自动处理开头的斜杠
|
@@ -22,13 +40,21 @@ module RongCloud
|
|
22
40
|
#
|
23
41
|
# @param uri [URI] 请求路径对象
|
24
42
|
# @param params [Hash] 请求的参数,所有参数通过 form encoded data 方式发送
|
43
|
+
# @param content_type [Symbol] 请求数据编码格式,:form_data 或者 :json
|
25
44
|
# @return [Net::HTTP::Post] 请求的实例
|
26
45
|
#
|
27
|
-
def initialize_request(uri, params)
|
46
|
+
def initialize_request(uri, params, content_type)
|
28
47
|
req = Net::HTTP::Post.new(uri)
|
29
|
-
req.set_form_data(params) if params.respond_to?(:map)
|
30
48
|
signed_headers.each { |header, value| req[header] = value }
|
31
49
|
|
50
|
+
case content_type
|
51
|
+
when :form_data
|
52
|
+
req.set_form_data(params) if params.respond_to?(:map)
|
53
|
+
when :json
|
54
|
+
req.body = params.to_json
|
55
|
+
req["Content-Type"] = "application/json"
|
56
|
+
end
|
57
|
+
|
32
58
|
req
|
33
59
|
end
|
34
60
|
|
@@ -49,21 +75,5 @@ module RongCloud
|
|
49
75
|
raise error
|
50
76
|
end
|
51
77
|
end
|
52
|
-
|
53
|
-
# 执行请求
|
54
|
-
# @param path [String] 请求 API 的相对路径
|
55
|
-
# @param params [Hash] 请求的参数
|
56
|
-
# @return [Hash] JSON 解析后的响应数据
|
57
|
-
# @raise [RongCloud::BadRequest] 请求参数有误,缺失或者不正确等,详见官方文档
|
58
|
-
def request(path, params = nil)
|
59
|
-
uri = get_uri(path)
|
60
|
-
req = initialize_request(uri, params)
|
61
|
-
use_ssl = uri.scheme == 'https'
|
62
|
-
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http|
|
63
|
-
http.request(req)
|
64
|
-
end
|
65
|
-
|
66
|
-
handle_response(res)
|
67
|
-
end
|
68
78
|
end
|
69
79
|
end
|
data/lib/rong_cloud/service.rb
CHANGED
@@ -3,6 +3,7 @@ require 'rong_cloud/services/user'
|
|
3
3
|
require 'rong_cloud/services/message'
|
4
4
|
require 'rong_cloud/services/wordfilter'
|
5
5
|
require 'rong_cloud/services/group'
|
6
|
+
require 'rong_cloud/services/chatroom'
|
6
7
|
|
7
8
|
module RongCloud
|
8
9
|
# 封装所有接口的 Service 类,所有业务接口通过 Service 的实例完成调用
|
@@ -13,5 +14,6 @@ module RongCloud
|
|
13
14
|
include RongCloud::Services::Message
|
14
15
|
include RongCloud::Services::Wordfilter
|
15
16
|
include RongCloud::Services::Group
|
17
|
+
include RongCloud::Services::Chatroom
|
16
18
|
end
|
17
19
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module RongCloud
|
2
|
+
module Services
|
3
|
+
# 聊天室服务相关接口 http://www.rongcloud.cn/docs/server.html#聊天室服务
|
4
|
+
module Chatroom
|
5
|
+
# 创建聊天室,支持同时创建多个聊天室 http://www.rongcloud.cn/docs/server.html#创建聊天室_方法
|
6
|
+
#
|
7
|
+
# @param chatrooms [Hash] id 为 key,聊天室名称为 value 的 Hash 实例,多个 key-value 表示多个聊天室
|
8
|
+
#
|
9
|
+
def create_chatroom(chatrooms)
|
10
|
+
params = {}
|
11
|
+
chatrooms.each { |room_id, room_name| params["chatroom[#{room_id}]"] = room_name }
|
12
|
+
|
13
|
+
request("/chatroom/create", params)
|
14
|
+
end
|
15
|
+
|
16
|
+
# 加入聊天室 http://www.rongcloud.cn/docs/server.html#加入聊天室_方法
|
17
|
+
#
|
18
|
+
# @param user_id [String, Array] 一个或多个用户 id
|
19
|
+
# @param chatroom_id [String] 聊天室 id
|
20
|
+
#
|
21
|
+
def join_chatroom(user_id, chatroom_id)
|
22
|
+
request("/chatroom/join", userId: user_id, chatroomId: chatroom_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
# 销毁聊天室 http://www.rongcloud.cn/docs/server.html#销毁聊天室_方法
|
26
|
+
#
|
27
|
+
# @param chatroom_ids [String, Array] 一个或多个聊天室 id
|
28
|
+
#
|
29
|
+
def destroy_chatroom(chatroom_ids)
|
30
|
+
request("/chatroom/destroy", chatroomId: chatroom_ids)
|
31
|
+
end
|
32
|
+
|
33
|
+
# 查询聊天室信息 http://www.rongcloud.cn/docs/server.html#查询聊天室信息_方法
|
34
|
+
#
|
35
|
+
# @param chatroom_ids [String, Array] 一个或多个聊天室 id
|
36
|
+
#
|
37
|
+
def query_chatroom(chatroom_ids)
|
38
|
+
request("/chatroom/query", chatroomId: chatroom_ids)
|
39
|
+
end
|
40
|
+
|
41
|
+
# 添加禁言聊天室成员 http://www.rongcloud.cn/docs/server.html#添加禁言聊天室成员_方法
|
42
|
+
#
|
43
|
+
def block_chatroom_user(chatroom_id, user_id, minute)
|
44
|
+
request("/chatroom/user/gag/add", chatroomId: chatroom_id, userId: user_id, minute: minute)
|
45
|
+
end
|
46
|
+
|
47
|
+
# 移除封禁聊天室成员 http://www.rongcloud.cn/docs/server.html#移除封禁聊天室成员_方法
|
48
|
+
#
|
49
|
+
def unblock_chatroom_user(chatroom_id, user_id)
|
50
|
+
request("/chatroom/user/block/rollback", chatroomId: chatroom_id, userId: user_id)
|
51
|
+
end
|
52
|
+
|
53
|
+
# 查询被封禁聊天室成员 http://www.rongcloud.cn/docs/server.html#查询被封禁聊天室成员_方法
|
54
|
+
#
|
55
|
+
def blocked_chatroom_users(chatroom_id)
|
56
|
+
request("/chatroom/user/block/list", chatroomId: chatroom_id)
|
57
|
+
end
|
58
|
+
|
59
|
+
# 查询聊天室内用户
|
60
|
+
#
|
61
|
+
# @param chatroom_id [String] 聊天室 id
|
62
|
+
# @param count [String, Fixnum] 要获取的聊天室成员数,上限为 500
|
63
|
+
# @param order [String] 加入聊天室的先后顺序, 1 为加入时间正序, 2 为加入时间倒序
|
64
|
+
#
|
65
|
+
def query_chatroom_users(chatroom_id, count, order = "1")
|
66
|
+
request("chatroom/user/query", chatroomId: chatroom_id, count: count, order: order)
|
67
|
+
end
|
68
|
+
|
69
|
+
# 聊天室消息停止分发 http://www.rongcloud.cn/docs/server.html#聊天室消息停止分发_方法
|
70
|
+
#
|
71
|
+
def stop_chatroom_distribution(chatroom_id)
|
72
|
+
request("/chatroom/message/stopDistribution", chatroomId: chatroom_id)
|
73
|
+
end
|
74
|
+
|
75
|
+
# 聊天室消息恢复分发 http://www.rongcloud.cn/docs/server.html#聊天室消息恢复分发_方法
|
76
|
+
#
|
77
|
+
def resume_chatroom_distribution(chatroom_id)
|
78
|
+
request("/chatroom/message/resumeDistribution", chatroomId: chatroom_id)
|
79
|
+
end
|
80
|
+
|
81
|
+
# 添加聊天室白名单成员 http://www.rongcloud.cn/docs/server.html#添加聊天室白名单成员_方法
|
82
|
+
#
|
83
|
+
def add_chatroom_whitelist(chatroom_id, user_id)
|
84
|
+
request("/chatroom/user/whitelist/add", chatroomId: chatroom_id, userId: user_id)
|
85
|
+
end
|
86
|
+
|
87
|
+
# 移除聊天室白名单成员 http://www.rongcloud.cn/docs/server.html#移除聊天室白名单成员_方法
|
88
|
+
def remove_chatroom_whitelist(chatroom_id, user_id)
|
89
|
+
request("/chatroom/user/whitelist/remove", chatroomId: chatroom_id, userId: user_id)
|
90
|
+
end
|
91
|
+
|
92
|
+
# 查询聊天室白名单成员 http://www.rongcloud.cn/docs/server.html#查询聊天室白名单成员_方法
|
93
|
+
def whitelisted_chatroom_users(chatroom_id)
|
94
|
+
request("/chatroom/user/whitelist/query", chatroomId: chatroom_id)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -12,20 +12,30 @@ module RongCloud
|
|
12
12
|
# @param [Hash] content 消息体,更多消息请看 http://www.rongcloud.cn/docs/server.html#内置消息类型表
|
13
13
|
# @option content [Object] :content 消息体中的正文,如果为自定义消息,由消息消费方自行解析
|
14
14
|
# @option content [Object] :extra 消息体中的附加信息,传递时为字符串,由消息消费方自行解析
|
15
|
-
#
|
15
|
+
# @param args [Array] 额外的 1 到 2 个参数,1 个参数时,表示 options 参数;2 个参数时,第一个参数表示模板消息的 values,第二个参数为 options 参数
|
16
16
|
# @param [Hash] options 额外选项,包含 pushContent 以及 pushData 等配置,所有支持选项根据各消息类型确定
|
17
17
|
# @option options [String] :pushContent 推送通知显示的 Push 内容
|
18
18
|
# @option options [Hash] :pushData 推送 payload
|
19
19
|
#
|
20
|
-
def send_message(from_user_id, target_id, channel_name, object_name, content,
|
20
|
+
def send_message(from_user_id, target_id, channel_name, object_name, content, *args)
|
21
|
+
options = args.extract_options!
|
22
|
+
values = args.first
|
23
|
+
content_type = values.nil? ? :form_data : :json
|
24
|
+
|
21
25
|
message_channel = MessageChannel.new(channel_name)
|
22
26
|
params = { fromUserId: from_user_id, objectName: object_name, content: content.to_json }
|
23
27
|
if message_channel.target_param_name
|
24
28
|
params.merge!(message_channel.target_param_name => target_id)
|
25
29
|
end
|
30
|
+
if values
|
31
|
+
if options[:pushContent].nil?
|
32
|
+
raise RongCloud::MissingOptionError, "pushContent is required for template messages"
|
33
|
+
end
|
34
|
+
params.merge!(values: values)
|
35
|
+
end
|
26
36
|
|
27
37
|
params.merge!(options)
|
28
|
-
request(message_channel.api_path, params)
|
38
|
+
request(message_channel.api_path, params, content_type)
|
29
39
|
end
|
30
40
|
|
31
41
|
# 发送单聊消息 http://www.rongcloud.cn/docs/server.html#发送单聊消息_方法
|
@@ -34,11 +44,21 @@ module RongCloud
|
|
34
44
|
send_message(from_user_id, to_user_id, :private, object_name, content, options)
|
35
45
|
end
|
36
46
|
|
47
|
+
# 发送单聊模板消息 http://www.rongcloud.cn/docs/server.html#发送单聊模板消息_方法
|
48
|
+
def send_private_template_message(from_user_id, to_user_id, object_name, content, values, options = {})
|
49
|
+
send_message(from_user_id, to_user_id, :private_template, object_name, content, values, options)
|
50
|
+
end
|
51
|
+
|
37
52
|
# 发送系统消息 http://www.rongcloud.cn/docs/server.html#发送系统消息_方法
|
38
53
|
def send_system_message(from_user_id, to_user_id, object_name, content, options = {})
|
39
54
|
send_message(from_user_id, to_user_id, :system, object_name, content, options)
|
40
55
|
end
|
41
56
|
|
57
|
+
# 发送系统模板消息 http://www.rongcloud.cn/docs/server.html#发送系统模板消息_方法
|
58
|
+
def send_system_template_message(from_user_id, to_user_id, object_name, content, values, options = {})
|
59
|
+
send_message(from_user_id, to_user_id, :system_template, object_name, content, values, options)
|
60
|
+
end
|
61
|
+
|
42
62
|
# 发送群组消息 http://www.rongcloud.cn/docs/server.html#发送群组消息_方法
|
43
63
|
def send_group_message(from_user_id, to_group_id, object_name, content, options = {})
|
44
64
|
send_message(from_user_id, to_group_id, :group, object_name, content, options)
|
@@ -7,7 +7,9 @@ module RongCloud
|
|
7
7
|
#
|
8
8
|
CHANNEL_TO_REQUEST_DETAILS_MAP = {
|
9
9
|
'private': { target_param_name: "toUserId", api_path: "/message/private/publish" },
|
10
|
+
private_template: { target_param_name: "toUserId", api_path: "/message/private/publish_template" },
|
10
11
|
system: { target_param_name: "toUserId", api_path: "/message/system/publish" },
|
12
|
+
system_template: { target_param_name: "toUserId", api_path: "/message/system/publish_template" },
|
11
13
|
group: { target_param_name: 'toGroupId', api_path: "/message/group/publish" },
|
12
14
|
discussion: { target_param_name: "toDiscussionId", api_path: "/message/discussion/publish" },
|
13
15
|
chatroom: { target_param_name: "toChatroomId", api_path: "/message/chatroom/publish" },
|
data/rong_cloud.gemspec
CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.require_path = 'lib'
|
5
5
|
s.summary = '融云 Server API SDK'
|
6
6
|
s.description = '融云服务器端接口 API,http://www.rongcloud.cn/docs/server.html'
|
7
|
-
s.version = '0.0.
|
7
|
+
s.version = '0.0.2'
|
8
8
|
s.files = `git ls-files`.split("\n")
|
9
9
|
s.authors = ['Martin Hong']
|
10
10
|
s.email = 'hongzeqin@gmail.com'
|
@@ -3,6 +3,7 @@ require 'rong_cloud/services/user_test'
|
|
3
3
|
require 'rong_cloud/services/message_test'
|
4
4
|
require 'rong_cloud/services/wordfilter_test'
|
5
5
|
require 'rong_cloud/services/group_test'
|
6
|
+
require 'rong_cloud/services/chatroom_test'
|
6
7
|
|
7
8
|
module RongCloud
|
8
9
|
class ServiceTest < Minitest::Test
|
@@ -10,6 +11,7 @@ module RongCloud
|
|
10
11
|
include RongCloud::Services::MessageTest
|
11
12
|
include RongCloud::Services::WordfilterTest
|
12
13
|
include RongCloud::Services::GroupTest
|
14
|
+
include RongCloud::Services::ChatroomTest
|
13
15
|
|
14
16
|
def setup
|
15
17
|
rong_cloud_configure_with_settings
|
@@ -0,0 +1,136 @@
|
|
1
|
+
module RongCloud
|
2
|
+
module Services
|
3
|
+
module ChatroomTest
|
4
|
+
def test_create_chatroom
|
5
|
+
chatrooms = { 10001 => "name1", 10002 => "name2" }
|
6
|
+
response = @service.create_chatroom(chatrooms)
|
7
|
+
assert_equal 200, response["code"]
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_join_chatroom_with_unexisted_chatroom_id
|
11
|
+
error = assert_raises RongCloud::BadRequest do
|
12
|
+
@service.join_chatroom(["user"], rand.to_s[2..8])
|
13
|
+
end
|
14
|
+
|
15
|
+
assert_equal "chatroomId is not exist.", error.message
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_join_chatroom_with_multiple_users_less_than_50
|
19
|
+
create_chatrooms({10003 => "room3"})
|
20
|
+
response = @service.join_chatroom(["user1", "user2", "user3"], 10003)
|
21
|
+
assert_equal 200, response["code"]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_join_chatroom_with_multiple_users_greater_than_50
|
25
|
+
create_chatrooms({10004 => "room4"})
|
26
|
+
users = 1.upto(51).map { |i| "user#{i}" }
|
27
|
+
response = @service.join_chatroom(users, 10004)
|
28
|
+
assert_equal 200, response["code"]
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_destroy_chatroom_with_multiple_chatroom_ids_existed
|
32
|
+
create_chatrooms({10005 => "room5", 10006 => "room6"})
|
33
|
+
response = @service.destroy_chatroom([10005, 10006])
|
34
|
+
assert_equal 200, response["code"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_destroy_chatroom_with_multiple_chatroom_ids_unexisted
|
38
|
+
response = @service.destroy_chatroom(%w(unexisted_chat1 unexisted_chat2))
|
39
|
+
assert_equal 200, response["code"]
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_query_chatroom_with_existed_chatroom_ids
|
43
|
+
create_chatrooms({10007 => "room7", 10008 => "room8"})
|
44
|
+
chatrooms = @service.query_chatroom(%w(10007 10008))["chatRooms"]
|
45
|
+
chatroom_ids = chatrooms.map{ |chatroom| chatroom["chrmId"] }
|
46
|
+
room = chatrooms.detect{ |chatroom| chatroom["chrmId"] == "10007" }
|
47
|
+
assert_equal 2, chatrooms.count
|
48
|
+
assert_equal "room7", room["name"]
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_query_chatroom_with_unexisted_chatroom_ids
|
52
|
+
chatrooms = @service.query_chatroom(%w(unexisted_chat1 unexisted_chat2))["chatRooms"]
|
53
|
+
assert_equal [], chatrooms
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_query_chatroom_users_with_count_1_and_order_1
|
57
|
+
create_chatrooms({10009 => "room9"})
|
58
|
+
@service.join_chatroom("user3", 10009)
|
59
|
+
@service.join_chatroom("user4", 10009)
|
60
|
+
|
61
|
+
users = @service.query_chatroom_users("10009", 1, "1")["users"]
|
62
|
+
user = users.first
|
63
|
+
assert_equal 1, users.count
|
64
|
+
assert_equal "user3", user["id"]
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_query_chatroom_users_with_count_1_and_order_2
|
68
|
+
create_chatrooms({10009 => "room9"})
|
69
|
+
@service.join_chatroom("user3", 10009)
|
70
|
+
@service.join_chatroom("user4", 10009)
|
71
|
+
|
72
|
+
users = @service.query_chatroom_users("10009", 1, "2")["users"]
|
73
|
+
user = users.first
|
74
|
+
assert_equal "user4", user["id"]
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_query_chatroom_users_with_count_2
|
78
|
+
create_chatrooms({10009 => "room9"})
|
79
|
+
@service.join_chatroom("user3", 10009)
|
80
|
+
@service.join_chatroom("user4", 10009)
|
81
|
+
|
82
|
+
users = @service.query_chatroom_users("10009", 2)["users"]
|
83
|
+
assert_equal 2, users.count
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_block_chatroom_user_flow
|
87
|
+
create_chatrooms({10010 => "room10"})
|
88
|
+
@service.join_chatroom("user5", 10010)
|
89
|
+
|
90
|
+
response = @service.block_chatroom_user(10010, "user5", 60)
|
91
|
+
assert_equal 200, response["code"]
|
92
|
+
|
93
|
+
response = @service.blocked_chatroom_users(10010)
|
94
|
+
assert_equal 200, response["code"]
|
95
|
+
assert response["users"]
|
96
|
+
|
97
|
+
response = @service.unblock_chatroom_user(10010, "user5")
|
98
|
+
assert_equal 200, response["code"]
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_stop_chatroom_distribution
|
102
|
+
response = @service.stop_chatroom_distribution(10011)
|
103
|
+
assert_equal 200, response["code"]
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_resume_chatroom_distribution
|
107
|
+
response = @service.resume_chatroom_distribution(10011)
|
108
|
+
assert_equal 200, response["code"]
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_chatroom_whitelist_flow
|
112
|
+
create_chatrooms({10011 => "room11"})
|
113
|
+
@service.join_chatroom("user6", 10011)
|
114
|
+
|
115
|
+
response = @service.add_chatroom_whitelist(10011, "user6")
|
116
|
+
assert_equal 200, response["code"]
|
117
|
+
response = @service.add_chatroom_whitelist(10011, ["user7", "user8"])
|
118
|
+
assert_equal 200, response["code"]
|
119
|
+
|
120
|
+
response = @service.whitelisted_chatroom_users(10011)
|
121
|
+
assert_equal 200, response["code"]
|
122
|
+
assert response["users"]
|
123
|
+
|
124
|
+
response = @service.remove_chatroom_whitelist(10011, "user6")
|
125
|
+
assert_equal 200, response["code"]
|
126
|
+
response = @service.remove_chatroom_whitelist(10011, ["user7", "user8"])
|
127
|
+
assert_equal 200, response["code"]
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
def create_chatrooms(chatrooms = { 10000001 => "super chatroom"})
|
132
|
+
@service.create_chatroom(chatrooms)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -25,7 +25,8 @@ module RongCloud
|
|
25
25
|
|
26
26
|
def test_create_group_without_group_name
|
27
27
|
response = @service.create_group('user1', '5', nil)
|
28
|
-
|
28
|
+
|
29
|
+
assert_equal 200, response["code"]
|
29
30
|
end
|
30
31
|
|
31
32
|
def test_join_group_with_single_user_id
|
@@ -47,7 +48,8 @@ module RongCloud
|
|
47
48
|
|
48
49
|
def test_join_group_without_group_name
|
49
50
|
response = @service.join_group('user1', '5', nil)
|
50
|
-
|
51
|
+
|
52
|
+
assert_equal 200, response["code"]
|
51
53
|
end
|
52
54
|
|
53
55
|
def test_quit_group
|
@@ -94,7 +96,6 @@ module RongCloud
|
|
94
96
|
response = @service.blocked_group_members('group1')
|
95
97
|
user_ids = response['users'].map{|user| user['userId']}
|
96
98
|
|
97
|
-
assert_equal 1, user_ids.count
|
98
99
|
assert_includes user_ids, "user2"
|
99
100
|
end
|
100
101
|
end
|
@@ -13,7 +13,7 @@ module RongCloud
|
|
13
13
|
error = assert_raises RongCloud::UnsupportedMessageChannelName do
|
14
14
|
RongCloud::Services::Message::MessageChannel.new(:nothing)
|
15
15
|
end
|
16
|
-
expected_error = "support only channels: [\"private\", \"system\", \"group\", \"discussion\", \"chatroom\", \"broadcast\"]"
|
16
|
+
expected_error = "support only channels: [\"private\", \"private_template\", \"system\", \"system_template\", \"group\", \"discussion\", \"chatroom\", \"broadcast\"]"
|
17
17
|
assert_equal expected_error, error.message
|
18
18
|
end
|
19
19
|
|
@@ -22,11 +22,21 @@ module RongCloud
|
|
22
22
|
assert_equal "toUserId", channel.target_param_name
|
23
23
|
end
|
24
24
|
|
25
|
+
def test_target_param_name_for_private_template
|
26
|
+
channel = RongCloud::Services::Message::MessageChannel.new(:private_template)
|
27
|
+
assert_equal "toUserId", channel.target_param_name
|
28
|
+
end
|
29
|
+
|
25
30
|
def test_target_param_name_for_system
|
26
31
|
channel = RongCloud::Services::Message::MessageChannel.new(:system)
|
27
32
|
assert_equal "toUserId", channel.target_param_name
|
28
33
|
end
|
29
34
|
|
35
|
+
def test_target_param_name_for_system_template
|
36
|
+
channel = RongCloud::Services::Message::MessageChannel.new(:system_template)
|
37
|
+
assert_equal "toUserId", channel.target_param_name
|
38
|
+
end
|
39
|
+
|
30
40
|
def test_target_param_name_for_group
|
31
41
|
channel = RongCloud::Services::Message::MessageChannel.new(:group)
|
32
42
|
assert_equal "toGroupId", channel.target_param_name
|
@@ -52,11 +62,21 @@ module RongCloud
|
|
52
62
|
assert_equal "/message/private/publish", channel.api_path
|
53
63
|
end
|
54
64
|
|
65
|
+
def test_api_path_for_private_template
|
66
|
+
channel = RongCloud::Services::Message::MessageChannel.new(:private_template)
|
67
|
+
assert_equal "/message/private/publish_template", channel.api_path
|
68
|
+
end
|
69
|
+
|
55
70
|
def test_api_path_for_system
|
56
71
|
channel = RongCloud::Services::Message::MessageChannel.new(:system)
|
57
72
|
assert_equal "/message/system/publish", channel.api_path
|
58
73
|
end
|
59
74
|
|
75
|
+
def test_api_path_for_system_template
|
76
|
+
channel = RongCloud::Services::Message::MessageChannel.new(:system_template)
|
77
|
+
assert_equal "/message/system/publish_template", channel.api_path
|
78
|
+
end
|
79
|
+
|
60
80
|
def test_api_path_for_group
|
61
81
|
channel = RongCloud::Services::Message::MessageChannel.new(:group)
|
62
82
|
assert_equal "/message/group/publish", channel.api_path
|
@@ -11,6 +11,33 @@ module RongCloud
|
|
11
11
|
assert_equal 200, response["code"]
|
12
12
|
end
|
13
13
|
|
14
|
+
def test_send_private_template_message_with_multiple_to_user_ids
|
15
|
+
response = @service.send_private_template_message(1, [2, 3, 4], "RC:TxtMsg",
|
16
|
+
{ content: "hello {name}", extra: "nothing" },
|
17
|
+
[
|
18
|
+
{"{name}" => "user2"},
|
19
|
+
{"{name}" => "user3"},
|
20
|
+
{"{name}" => "user4"},
|
21
|
+
],
|
22
|
+
pushContent: Array.new(3, "欢迎 {name}")
|
23
|
+
)
|
24
|
+
assert_equal 200, response["code"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_send_private_template_message_with_multiple_to_user_ids_missing_push_content
|
28
|
+
error = assert_raises RongCloud::MissingOptionError do
|
29
|
+
@service.send_private_template_message(1, [2, 3], "RC:TxtMsg",
|
30
|
+
{ content: "hello {name}", extra: "nothing" },
|
31
|
+
[
|
32
|
+
{"{name}" => "user2"},
|
33
|
+
{"{name}" => "user3"}
|
34
|
+
],
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
assert_equal "pushContent is required for template messages", error.message
|
39
|
+
end
|
40
|
+
|
14
41
|
def test_send_private_message_with_options
|
15
42
|
options = { pushContent: "hello", pushData: { shouldBeTrue: "true" } }
|
16
43
|
response = @service.send_private_message(1, [2, 3, 4], "RC:TxtMsg", { content: "hello world", extra: "nothing" }, options)
|
@@ -27,6 +54,19 @@ module RongCloud
|
|
27
54
|
assert_equal 200, response["code"]
|
28
55
|
end
|
29
56
|
|
57
|
+
def test_send_system_template_message_with_multiple_to_user_ids
|
58
|
+
response = @service.send_system_template_message(1, [2, 3, 4], "RC:TxtMsg",
|
59
|
+
{ content: "hello {name}", extra: "nothing" },
|
60
|
+
[
|
61
|
+
{"{name}" => "user5"},
|
62
|
+
{"{name}" => "user6"},
|
63
|
+
{"{name}" => "user7"},
|
64
|
+
],
|
65
|
+
pushContent: Array.new(3, "欢迎 {name}")
|
66
|
+
)
|
67
|
+
assert_equal 200, response["code"]
|
68
|
+
end
|
69
|
+
|
30
70
|
def test_send_system_message_with_options
|
31
71
|
options = { pushContent: "hello", pushData: { shouldBeTrue: "true" } }
|
32
72
|
response = @service.send_system_message(1, [2, 3, 4], "RC:TxtMsg", { content: "hello world", extra: "nothing" }, options)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rong_cloud_server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Hong
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 融云服务器端接口 API,http://www.rongcloud.cn/docs/server.html
|
14
14
|
email: hongzeqin@gmail.com
|
@@ -19,11 +19,13 @@ files:
|
|
19
19
|
- ".gitignore"
|
20
20
|
- README.md
|
21
21
|
- config.example.yml
|
22
|
+
- lib/core_ext/array.rb
|
22
23
|
- lib/rong_cloud.rb
|
23
24
|
- lib/rong_cloud/configuration.rb
|
24
25
|
- lib/rong_cloud/errors.rb
|
25
26
|
- lib/rong_cloud/request.rb
|
26
27
|
- lib/rong_cloud/service.rb
|
28
|
+
- lib/rong_cloud/services/chatroom.rb
|
27
29
|
- lib/rong_cloud/services/group.rb
|
28
30
|
- lib/rong_cloud/services/message.rb
|
29
31
|
- lib/rong_cloud/services/message/message_channel.rb
|
@@ -35,6 +37,7 @@ files:
|
|
35
37
|
- test/rong_cloud/configuration_test.rb
|
36
38
|
- test/rong_cloud/request_test.rb
|
37
39
|
- test/rong_cloud/service_test.rb
|
40
|
+
- test/rong_cloud/services/chatroom_test.rb
|
38
41
|
- test/rong_cloud/services/group_test.rb
|
39
42
|
- test/rong_cloud/services/message/message_channel_test.rb
|
40
43
|
- test/rong_cloud/services/message_test.rb
|