chatwork 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -1
  3. data/README.md +113 -38
  4. data/lib/chatwork.rb +35 -3
  5. data/lib/chatwork/base_client.rb +9 -4
  6. data/lib/chatwork/client.rb +43 -8
  7. data/lib/chatwork/client/contacts_methods.rb +29 -0
  8. data/lib/chatwork/client/file_methods.rb +67 -0
  9. data/lib/chatwork/client/incoming_request_methods.rb +77 -0
  10. data/lib/chatwork/client/invitation_link_methods.rb +110 -0
  11. data/lib/chatwork/client/me_methods.rb +38 -0
  12. data/lib/chatwork/client/member_methods.rb +64 -0
  13. data/lib/chatwork/client/message_methods.rb +178 -0
  14. data/lib/chatwork/client/my_status_methods.rb +25 -0
  15. data/lib/chatwork/client/my_task_methods.rb +41 -0
  16. data/lib/chatwork/client/room_methods.rb +156 -0
  17. data/lib/chatwork/client/task_methods.rb +109 -0
  18. data/lib/chatwork/contacts.rb +6 -4
  19. data/lib/chatwork/converter.rb +18 -0
  20. data/lib/chatwork/file.rb +12 -6
  21. data/lib/chatwork/incoming_request.rb +18 -8
  22. data/lib/chatwork/invitation_link.rb +24 -20
  23. data/lib/chatwork/me.rb +6 -4
  24. data/lib/chatwork/member.rb +18 -12
  25. data/lib/chatwork/message.rb +42 -16
  26. data/lib/chatwork/my_status.rb +6 -4
  27. data/lib/chatwork/my_task.rb +6 -4
  28. data/lib/chatwork/oauth_client.rb +10 -2
  29. data/lib/chatwork/oauth_client/token_methods.rb +25 -0
  30. data/lib/chatwork/room.rb +37 -20
  31. data/lib/chatwork/task.rb +18 -14
  32. data/lib/chatwork/token.rb +1 -7
  33. data/lib/chatwork/version.rb +1 -1
  34. data/spec/lib/chatwork/client/contacts_methods_spec.rb +11 -0
  35. data/spec/lib/chatwork/client/file_methods_spec.rb +37 -0
  36. data/spec/lib/chatwork/client/incoming_request_methods_spec.rb +35 -0
  37. data/spec/lib/chatwork/client/invitation_link_methods_spec.rb +71 -0
  38. data/spec/lib/chatwork/client/me_methods_spec.rb +21 -0
  39. data/spec/lib/chatwork/client/member_methods_spec.rb +47 -0
  40. data/spec/lib/chatwork/client/message_methods_spec.rb +102 -0
  41. data/spec/lib/chatwork/client/my_status_methods_spec.rb +11 -0
  42. data/spec/lib/chatwork/client/my_task_methods_spec.rb +20 -0
  43. data/spec/lib/chatwork/client/room_methods_spec.rb +111 -0
  44. data/spec/lib/chatwork/client/task_methods_spec.rb +80 -0
  45. data/spec/lib/chatwork/client_spec.rb +8 -1
  46. data/spec/lib/chatwork/contacts_spec.rb +2 -2
  47. data/spec/lib/chatwork/{entity_methods_spec.rb → converter_spec.rb} +2 -2
  48. data/spec/lib/chatwork/file_spec.rb +2 -2
  49. data/spec/lib/chatwork/incoming_request_spec.rb +3 -3
  50. data/spec/lib/chatwork/invitation_link_spec.rb +4 -2
  51. data/spec/lib/chatwork/me_spec.rb +3 -21
  52. data/spec/lib/chatwork/member_spec.rb +2 -1
  53. data/spec/lib/chatwork/message_spec.rb +7 -7
  54. data/spec/lib/chatwork/my_status_spec.rb +1 -1
  55. data/spec/lib/chatwork/my_task_spec.rb +1 -0
  56. data/spec/lib/chatwork/{token_spec.rb → oauth_client/token_methods_spec.rb} +4 -7
  57. data/spec/lib/chatwork/oauth_client_spec.rb +7 -1
  58. data/spec/lib/chatwork/room_spec.rb +5 -2
  59. data/spec/lib/chatwork/task_spec.rb +3 -0
  60. data/spec/support/contexts/api_context.rb +4 -3
  61. data/spec/support/examples/a_chatwork_api.rb +22 -5
  62. data/spec/support/utils/raml_parser.rb +2 -3
  63. metadata +42 -8
  64. data/lib/chatwork/entity_methods.rb +0 -36
@@ -1,12 +1,14 @@
1
1
  module ChatWork
2
2
  module Room
3
- extend EntityMethods
4
-
5
3
  # Get the list of all chats on your account
6
4
  #
7
5
  # @see http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms
8
6
  # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
9
7
  #
8
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
9
+ # @yieldparam response_body [Array<Hashie::Mash>] response body
10
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
11
+ #
10
12
  # @return [Array<Hashie::Mash>]
11
13
  #
12
14
  # @example response format
@@ -27,8 +29,8 @@ module ChatWork
27
29
  # "last_update_time": 1298905200
28
30
  # }
29
31
  # ]
30
- def self.get
31
- _get("/rooms")
32
+ def self.get(&block)
33
+ ChatWork.client.get_rooms(&block)
32
34
  end
33
35
 
34
36
  # rubocop:disable Metrics/ParameterLists
@@ -50,6 +52,10 @@ module ChatWork
50
52
  # @param link_code [String] link path (default. random string)
51
53
  # @param link_need_acceptance [Boolean] Approval necessity. Whether participation requires administrator approval.
52
54
  #
55
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
56
+ # @yieldparam response_body [Hashie::Mash] response body
57
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
58
+ #
53
59
  # @return [Hashie::Mash]
54
60
  #
55
61
  # @example response format
@@ -57,20 +63,19 @@ module ChatWork
57
63
  # "room_id": 1234
58
64
  # }
59
65
  def self.create(description: nil, icon_preset: nil, members_admin_ids:, members_member_ids: nil, members_readonly_ids: nil, name:,
60
- link: nil, link_code: nil, link_need_acceptance: nil)
61
- params = {
66
+ link: nil, link_code: nil, link_need_acceptance: nil, &block)
67
+ ChatWork.client.create_room(
62
68
  description: description,
63
69
  icon_preset: icon_preset,
64
- members_admin_ids: Array(members_admin_ids).join(","),
70
+ members_admin_ids: members_admin_ids,
71
+ members_member_ids: members_member_ids,
72
+ members_readonly_ids: members_readonly_ids,
65
73
  name: name,
66
- link: boolean_to_integer(link),
67
- link_need_acceptance: boolean_to_integer(link_need_acceptance),
74
+ link: link,
68
75
  link_code: link_code,
69
- }
70
- params[:members_member_ids] = Array(members_member_ids).join(",") if members_member_ids
71
- params[:members_readonly_ids] = Array(members_readonly_ids).join(",") if members_readonly_ids
72
-
73
- _post("/rooms", params)
76
+ link_need_acceptance: link_need_acceptance,
77
+ &block
78
+ )
74
79
  end
75
80
 
76
81
  # rubocop:enable Metrics/ParameterLists
@@ -82,6 +87,10 @@ module ChatWork
82
87
  #
83
88
  # @param room_id [Integer]
84
89
  #
90
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
91
+ # @yieldparam response_body [Hashie::Mash] response body
92
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
93
+ #
85
94
  # @return [Hashie::Mash]
86
95
  #
87
96
  # @example response format
@@ -101,8 +110,8 @@ module ChatWork
101
110
  # "last_update_time": 1298905200,
102
111
  # "description": "room description text"
103
112
  # }
104
- def self.find(room_id:)
105
- _get("/rooms/#{room_id}")
113
+ def self.find(room_id:, &block)
114
+ ChatWork.client.find_room(room_id: room_id, &block)
106
115
  end
107
116
 
108
117
  # Change the title and icon type of the specified chat
@@ -116,14 +125,18 @@ module ChatWork
116
125
  # study, security, star, idea, heart, magcup, beer, music, sports, travel)
117
126
  # @param name [String] Title of the group chat.
118
127
  #
128
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
129
+ # @yieldparam response_body [Hashie::Mash] response body
130
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
131
+ #
119
132
  # @return [Hashie::Mash]
120
133
  #
121
134
  # @example response format
122
135
  # {
123
136
  # "room_id": 1234
124
137
  # }
125
- def self.update(room_id:, description: nil, icon_preset: nil, name: nil)
126
- _put("/rooms/#{room_id}", description: description, icon_preset: icon_preset, name: name)
138
+ def self.update(room_id:, description: nil, icon_preset: nil, name: nil, &block)
139
+ ChatWork.client.update_room(room_id: room_id, description: description, icon_preset: icon_preset, name: name, &block)
127
140
  end
128
141
 
129
142
  # Leave/Delete a group chat
@@ -133,8 +146,12 @@ module ChatWork
133
146
  #
134
147
  # @param room_id [Integer]
135
148
  # @param action_type [String] leave from a room or delete a room (leave, delete)
136
- def self.destroy(room_id:, action_type:)
137
- _delete("/rooms/#{room_id}", action_type: action_type)
149
+ #
150
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
151
+ # @yieldparam response_body [Hashie::Mash] response body
152
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
153
+ def self.destroy(room_id:, action_type:, &block)
154
+ ChatWork.client.destroy_room(room_id: room_id, action_type: action_type, &block)
138
155
  end
139
156
  end
140
157
  end
@@ -1,7 +1,5 @@
1
1
  module ChatWork
2
2
  module Task
3
- extend EntityMethods
4
-
5
3
  # Get the list of tasks associated with the specified chat
6
4
  #
7
5
  # (*This method returns up to 100 entries. We are planning to implement pagination to support larger number of data retrieval)
@@ -14,6 +12,10 @@ module ChatWork
14
12
  # @param assigned_by_account_id [Integer] Account ID of the person who assigned task
15
13
  # @param status [String] Task status (open, done)
16
14
  #
15
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
16
+ # @yieldparam response_body [Array<Hashie::Mash>] response body
17
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
18
+ #
17
19
  # @return [Array<Hashie::Mash>]
18
20
  #
19
21
  # @example response format
@@ -36,8 +38,8 @@ module ChatWork
36
38
  # "status": "open"
37
39
  # }
38
40
  # ]
39
- def self.get(room_id:, account_id:, assigned_by_account_id: nil, status: nil)
40
- _get("/rooms/#{room_id}/tasks", account_id: account_id, assigned_by_account_id: assigned_by_account_id, status: status)
41
+ def self.get(room_id:, account_id:, assigned_by_account_id: nil, status: nil, &block)
42
+ ChatWork.client.get_tasks(room_id: room_id, account_id: account_id, assigned_by_account_id: assigned_by_account_id, status: status, &block)
41
43
  end
42
44
 
43
45
  # Add a new task to the chat
@@ -50,20 +52,18 @@ module ChatWork
50
52
  # @param to_ids [Array<Integer>, String] Account ID of the person/people responsible to complete the task
51
53
  # @param limit [Time, Integer] When the task is due
52
54
  #
55
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
56
+ # @yieldparam response_body [Hashie::Mash] response body
57
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
58
+ #
53
59
  # @return [Hashie::Mash]
54
60
  #
55
61
  # @example response format
56
62
  # {
57
63
  # "task_ids": [123,124]
58
64
  # }
59
- def self.create(room_id:, body:, to_ids:, limit: nil)
60
- params = {
61
- body: body,
62
- to_ids: Array(to_ids).join(","),
63
- }
64
- params[:limit] = limit.to_i if limit
65
-
66
- _post("/rooms/#{room_id}/tasks", params)
65
+ def self.create(room_id:, body:, to_ids:, limit: nil, &block)
66
+ ChatWork.client.create_task(room_id: room_id, body: body, to_ids: to_ids, limit: limit, &block)
67
67
  end
68
68
 
69
69
  # Get information about the specified task
@@ -74,6 +74,10 @@ module ChatWork
74
74
  # @param room_id [Integer]
75
75
  # @param task_id [Integer]
76
76
  #
77
+ # @yield [response_body, response_header] if block was given, return response body and response header through block arguments
78
+ # @yieldparam response_body [Hashie::Mash] response body
79
+ # @yieldparam response_header [Hash<String, String>] response header (e.g. X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
80
+ #
77
81
  # @return [Hashie::Mash]
78
82
  #
79
83
  # @example response format
@@ -94,8 +98,8 @@ module ChatWork
94
98
  # "limit_time": 1384354799,
95
99
  # "status": "open"
96
100
  # }
97
- def self.find(room_id:, task_id:)
98
- _get("/rooms/#{room_id}/tasks/#{task_id}")
101
+ def self.find(room_id:, task_id:, &block)
102
+ ChatWork.client.find_task(room_id: room_id, task_id: task_id, &block)
99
103
  end
100
104
  end
101
105
  end
@@ -15,13 +15,7 @@ module ChatWork
15
15
  # "scope" => "users.all:read rooms.all:read_write contacts.all:read_write",
16
16
  # }
17
17
  def self.refresh_access_token(refresh_token, scope = [])
18
- params = {
19
- grant_type: "refresh_token",
20
- refresh_token: refresh_token,
21
- }
22
- params[:scope] = scope.join(" ") unless scope.empty?
23
-
24
- ChatWork.oauth_client.post("/token", params)
18
+ ChatWork.oauth_client.refresh_access_token(refresh_token, scope)
25
19
  end
26
20
  end
27
21
  end
@@ -1,3 +1,3 @@
1
1
  module ChatWork
2
- VERSION = "0.7.0".freeze
2
+ VERSION = "0.8.0".freeze
3
3
  end
@@ -0,0 +1,11 @@
1
+ describe ChatWork::Client::ContactsMethods do
2
+ describe "#get_contacts", type: :api do
3
+ subject { client.get_contacts(&block) }
4
+
5
+ before do
6
+ stub_chatwork_request(:get, "/contacts")
7
+ end
8
+
9
+ it_behaves_like :a_chatwork_api, :get, "/contacts"
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ describe ChatWork::Client::FileMethods do
2
+ describe "#get_files", type: :api do
3
+ subject { client.get_files(room_id: room_id, account_id: account_id, &block) }
4
+
5
+ before do
6
+ stub_chatwork_request(:get, "/rooms/#{room_id}/files", "/rooms/{room_id}/files")
7
+ end
8
+
9
+ let(:room_id) { 123 }
10
+ let(:account_id) { 101 }
11
+
12
+ it_behaves_like :a_chatwork_api, :get, "/rooms/{room_id}/files"
13
+ end
14
+
15
+ describe "#find_file", type: :api do
16
+ subject { client.find_file(room_id: room_id, file_id: file_id, create_download_url: create_download_url, &block) }
17
+
18
+ before do
19
+ stub_chatwork_request(:get, "/rooms/#{room_id}/files/#{file_id}", "/rooms/{room_id}/files/{file_id}")
20
+ end
21
+
22
+ let(:room_id) { 123 }
23
+ let(:file_id) { 101 }
24
+
25
+ context "when force is Integer" do
26
+ let(:create_download_url) { 1 }
27
+
28
+ it_behaves_like :a_chatwork_api, :get, "/rooms/{room_id}/files/{file_id}"
29
+ end
30
+
31
+ context "when force is boolean" do
32
+ let(:create_download_url) { true }
33
+
34
+ it_behaves_like :a_chatwork_api, :get, "/rooms/{room_id}/files/{file_id}"
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,35 @@
1
+ describe ChatWork::Client::IncomingRequestMethods do
2
+ describe "#get_incoming_requests", type: :api do
3
+ subject { client.get_incoming_requests(&block) }
4
+
5
+ before do
6
+ stub_chatwork_request(:get, "/incoming_requests")
7
+ end
8
+
9
+ it_behaves_like :a_chatwork_api, :get, "/incoming_requests"
10
+ end
11
+
12
+ describe "#update_incoming_request", type: :api do
13
+ subject { client.update_incoming_request(request_id: request_id, &block) }
14
+
15
+ let(:request_id) { 123 }
16
+
17
+ before do
18
+ stub_chatwork_request(:put, "/incoming_requests/#{request_id}", "/incoming_requests/{request_id}")
19
+ end
20
+
21
+ it_behaves_like :a_chatwork_api, :put, "/incoming_requests/{request_id}"
22
+ end
23
+
24
+ describe "#destroy_incoming_request", type: :api do
25
+ subject { client.destroy_incoming_request(request_id: request_id, &block) }
26
+
27
+ let(:request_id) { 123 }
28
+
29
+ before do
30
+ stub_chatwork_request(:delete, "/incoming_requests/#{request_id}", "/incoming_requests/{request_id}", 204)
31
+ end
32
+
33
+ it_behaves_like :a_chatwork_api, :delete, "/incoming_requests/{request_id}", 204
34
+ end
35
+ end
@@ -0,0 +1,71 @@
1
+ describe ChatWork::Client::InvitationLinkMethods do
2
+ describe "#get_invitation_link", type: :api do
3
+ subject { client.get_invitation_link(room_id: room_id, &block) }
4
+
5
+ let(:room_id) { 123 }
6
+
7
+ before do
8
+ stub_chatwork_request(:get, "/rooms/#{room_id}/link", "/rooms/{room_id}/link")
9
+ end
10
+
11
+ it_behaves_like :a_chatwork_api, :get, "/rooms/{room_id}/link"
12
+ end
13
+
14
+ describe "#create_invitation_link", type: :api do
15
+ subject do
16
+ client.create_invitation_link(
17
+ room_id: room_id,
18
+ code: code,
19
+ description: description,
20
+ need_acceptance: need_acceptance,
21
+ &block
22
+ )
23
+ end
24
+
25
+ let(:room_id) { 123 }
26
+ let(:code) { "unique-link-name" }
27
+ let(:description) { "This is a public room for topic A." }
28
+ let(:need_acceptance) { true }
29
+
30
+ before do
31
+ stub_chatwork_request(:post, "/rooms/#{room_id}/link", "/rooms/{room_id}/link")
32
+ end
33
+
34
+ it_behaves_like :a_chatwork_api, :post, "/rooms/{room_id}/link"
35
+ end
36
+
37
+ describe "#update_invitation_link", type: :api do
38
+ subject do
39
+ client.update_invitation_link(
40
+ room_id: room_id,
41
+ code: code,
42
+ description: description,
43
+ need_acceptance: need_acceptance,
44
+ &block
45
+ )
46
+ end
47
+
48
+ let(:room_id) { 123 }
49
+ let(:code) { "another_link_name" }
50
+ let(:description) { "Public room for everybody" }
51
+ let(:need_acceptance) { false }
52
+
53
+ before do
54
+ stub_chatwork_request(:put, "/rooms/#{room_id}/link", "/rooms/{room_id}/link")
55
+ end
56
+
57
+ it_behaves_like :a_chatwork_api, :put, "/rooms/{room_id}/link"
58
+ end
59
+
60
+ describe "#destroy_invitation_link", type: :api do
61
+ subject { client.destroy_invitation_link(room_id: room_id, &block) }
62
+
63
+ let(:room_id) { 123 }
64
+
65
+ before do
66
+ stub_chatwork_request(:delete, "/rooms/#{room_id}/link", "/rooms/{room_id}/link")
67
+ end
68
+
69
+ it_behaves_like :a_chatwork_api, :delete, "/rooms/{room_id}/link"
70
+ end
71
+ end
@@ -0,0 +1,21 @@
1
+ describe ChatWork::Client::MeMethods do
2
+ describe "get_me", type: :api do
3
+ subject { client.get_me(&block) }
4
+
5
+ before do
6
+ stub_chatwork_request(:get, "/me")
7
+ end
8
+
9
+ it_behaves_like :a_chatwork_api, :get, "/me"
10
+
11
+ context "when unauthorized" do
12
+ before do
13
+ stub_chatwork_request(:get, "/me", "/me", 401)
14
+ end
15
+
16
+ let(:block) { nil }
17
+
18
+ it { expect { subject }.to raise_error(ChatWork::APIError, "Invalid API token") }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,47 @@
1
+ describe ChatWork::Client::MemberMethods do
2
+ describe "#get_members", type: :api do
3
+ subject { client.get_members(room_id: room_id, &block) }
4
+
5
+ let(:room_id) { 123 }
6
+
7
+ before do
8
+ stub_chatwork_request(:get, "/rooms/#{room_id}/members", "/rooms/{room_id}/members")
9
+ end
10
+
11
+ it_behaves_like :a_chatwork_api, :get, "/rooms/{room_id}/members"
12
+ end
13
+
14
+ describe "#update_all_members", type: :api do
15
+ subject do
16
+ client.update_all_members(
17
+ room_id: room_id,
18
+ members_admin_ids: members_admin_ids,
19
+ members_member_ids: members_member_ids,
20
+ members_readonly_ids: members_readonly_ids,
21
+ &block
22
+ )
23
+ end
24
+
25
+ let(:room_id) { 123 }
26
+
27
+ before do
28
+ stub_chatwork_request(:put, "/rooms/#{room_id}/members", "/rooms/{room_id}/members")
29
+ end
30
+
31
+ context "with String" do
32
+ let(:members_admin_ids) { "123,542,1001" }
33
+ let(:members_member_ids) { "21,344" }
34
+ let(:members_readonly_ids) { "15,103" }
35
+
36
+ it_behaves_like :a_chatwork_api, :put, "/rooms/{room_id}/members"
37
+ end
38
+
39
+ context "with Array" do
40
+ let(:members_admin_ids) { [123, 542, 1001] }
41
+ let(:members_member_ids) { [21, 344] }
42
+ let(:members_readonly_ids) { [15, 103] }
43
+
44
+ it_behaves_like :a_chatwork_api, :put, "/rooms/{room_id}/members"
45
+ end
46
+ end
47
+ end