chatwork 0.5.0 → 0.6.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 (58) hide show
  1. checksums.yaml +5 -5
  2. data/.env.example +4 -0
  3. data/.gitignore +1 -0
  4. data/.gitmodules +3 -0
  5. data/.rubocop.yml +10 -0
  6. data/.travis.yml +26 -0
  7. data/.yardopts +2 -0
  8. data/CHANGELOG.md +33 -1
  9. data/Gemfile +13 -1
  10. data/README.md +15 -2
  11. data/Rakefile +2 -2
  12. data/bin/console +10 -0
  13. data/chatwork.gemspec +20 -9
  14. data/lib/chatwork.rb +32 -36
  15. data/lib/chatwork/base_client.rb +8 -11
  16. data/lib/chatwork/chatwork_error.rb +6 -16
  17. data/lib/chatwork/client.rb +2 -2
  18. data/lib/chatwork/contacts.rb +24 -8
  19. data/lib/chatwork/entity_methods.rb +36 -0
  20. data/lib/chatwork/file.rb +63 -0
  21. data/lib/chatwork/incoming_request.rb +71 -0
  22. data/lib/chatwork/me.rb +33 -8
  23. data/lib/chatwork/member.rb +55 -4
  24. data/lib/chatwork/message.rb +147 -6
  25. data/lib/chatwork/my_status.rb +25 -0
  26. data/lib/chatwork/my_task.rb +36 -8
  27. data/lib/chatwork/oauth_client.rb +3 -3
  28. data/lib/chatwork/room.rb +119 -6
  29. data/lib/chatwork/task.rb +96 -4
  30. data/lib/chatwork/token.rb +2 -2
  31. data/lib/chatwork/version.rb +1 -1
  32. data/spec/lib/chatwork/chatwork_error_spec.rb +10 -8
  33. data/spec/lib/chatwork/client_spec.rb +14 -14
  34. data/spec/lib/chatwork/contacts_spec.rb +11 -0
  35. data/spec/lib/chatwork/entity_methods_spec.rb +21 -0
  36. data/spec/lib/chatwork/file_spec.rb +37 -0
  37. data/spec/lib/chatwork/incoming_request_spec.rb +35 -0
  38. data/spec/lib/chatwork/me_spec.rb +39 -0
  39. data/spec/lib/chatwork/member_spec.rb +40 -9
  40. data/spec/lib/chatwork/message_spec.rb +102 -0
  41. data/spec/lib/chatwork/my_status_spec.rb +13 -0
  42. data/spec/lib/chatwork/my_task_spec.rb +19 -0
  43. data/spec/lib/chatwork/oauth_client_spec.rb +7 -7
  44. data/spec/lib/chatwork/room_spec.rb +102 -0
  45. data/spec/lib/chatwork/task_spec.rb +77 -0
  46. data/spec/lib/chatwork/token_spec.rb +26 -7
  47. data/spec/lib/chatwork_spec.rb +26 -19
  48. data/spec/lib/support/utils/raml_parser_spec.rb +96 -0
  49. data/spec/spec_helper.rb +32 -6
  50. data/spec/support/contexts/api_context.rb +43 -0
  51. data/spec/support/examples/a_chatwork_api.rb +12 -0
  52. data/spec/support/matchers/match_example.rb +16 -0
  53. data/spec/support/utils/raml_parser.rb +86 -0
  54. metadata +214 -10
  55. data/lib/chatwork/entity.rb +0 -29
  56. data/lib/chatwork/operations.rb +0 -48
  57. data/spec/shared_oauth_stubs.rb +0 -49
  58. data/spec/shared_stubs.rb +0 -39
@@ -0,0 +1,36 @@
1
+ module ChatWork
2
+ module EntityMethods
3
+ private
4
+
5
+ def _get(path, params = {}, &block)
6
+ ChatWork.client.get(path, hash_compact(params), &block)
7
+ end
8
+
9
+ def _post(path, params = {}, &block)
10
+ ChatWork.client.post(path, hash_compact(params), &block)
11
+ end
12
+
13
+ def _put(path, params = {}, &block)
14
+ ChatWork.client.put(path, hash_compact(params), &block)
15
+ end
16
+
17
+ def _delete(path, params = {}, &block)
18
+ ChatWork.client.delete(path, hash_compact(params), &block)
19
+ end
20
+
21
+ def hash_compact(hash)
22
+ hash.reject { |_k, v| v.nil? }
23
+ end
24
+
25
+ def boolean_to_integer(value)
26
+ case value
27
+ when true
28
+ 1
29
+ when false
30
+ 0
31
+ else
32
+ value
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,63 @@
1
+ module ChatWork
2
+ module File
3
+ extend EntityMethods
4
+
5
+ # Get the list of files associated with the specified chat
6
+ #
7
+ # @param room_id [Integer]
8
+ # @param account_id [Integer]
9
+ #
10
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-files
11
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
12
+ #
13
+ # @return [Array<Hashie::Mash>]
14
+ #
15
+ # @example response format
16
+ # [
17
+ # {
18
+ # "file_id": 3,
19
+ # "account": {
20
+ # "account_id": 123,
21
+ # "name": "Bob",
22
+ # "avatar_image_url": "https://example.com/ico_avatar.png"
23
+ # },
24
+ # "message_id": "22",
25
+ # "filename": "README.md",
26
+ # "filesize": 2232,
27
+ # "upload_time": 1384414750
28
+ # }
29
+ # ]
30
+ def self.get(room_id:, account_id:)
31
+ _get("/rooms/#{room_id}/files", account_id: account_id)
32
+ end
33
+
34
+ # Get information about the specified file
35
+ #
36
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-files-file_id
37
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
38
+ #
39
+ # @param room_id [Integer]
40
+ # @param file_id [Integer]
41
+ # @param create_download_url [Boolean] whether or not to create a download link.
42
+ # If set to true, download like will be created for 30 seconds
43
+ #
44
+ # @return [Array<Hashie::Mash>]
45
+ #
46
+ # @example response format
47
+ # {
48
+ # "file_id":3,
49
+ # "account": {
50
+ # "account_id":123,
51
+ # "name":"Bob",
52
+ # "avatar_image_url": "https://example.com/ico_avatar.png"
53
+ # },
54
+ # "message_id": "22",
55
+ # "filename": "README.md",
56
+ # "filesize": 2232,
57
+ # "upload_time": 1384414750
58
+ # }
59
+ def self.find(room_id:, file_id:, create_download_url: nil)
60
+ _get("/rooms/#{room_id}/files/#{file_id}", create_download_url: boolean_to_integer(create_download_url))
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,71 @@
1
+ module ChatWork
2
+ module IncomingRequest
3
+ extend EntityMethods
4
+
5
+ # You can get the list of contact approval request you received
6
+ #
7
+ # (*This method returns up to 100 entries. We are planning to implement pagination to support larger number of data retrieval)
8
+ #
9
+ # @see http://developer.chatwork.com/ja/endpoint_incoming_requests.html#GET-incoming_requests
10
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
11
+ #
12
+ # @return [Array<Hashie::Mash>]
13
+ #
14
+ # @example response format
15
+ # [
16
+ # {
17
+ # "request_id": 123,
18
+ # "account_id": 363,
19
+ # "message": "hogehoge",
20
+ # "name": "John Smith",
21
+ # "chatwork_id": "tarochatworkid",
22
+ # "organization_id": 101,
23
+ # "organization_name": "Hello Company",
24
+ # "department": "Marketing",
25
+ # "avatar_image_url": "https://example.com/abc.png"
26
+ # }
27
+ # ]
28
+ def self.get
29
+ _get("/incoming_requests")
30
+ end
31
+
32
+ # You can approve a contact approval request you received
33
+ #
34
+ # @see http://developer.chatwork.com/ja/endpoint_incoming_requests.html#PUT-incoming_requests-request_id
35
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
36
+ #
37
+ # @param request_id [Integer]
38
+ #
39
+ # @return [Hashie::Mash]
40
+ #
41
+ # @example response format
42
+ # {
43
+ # "account_id": 363,
44
+ # "room_id": 1234,
45
+ # "name": "John Smith",
46
+ # "chatwork_id": "tarochatworkid",
47
+ # "organization_id": 101,
48
+ # "organization_name": "Hello Company",
49
+ # "department": "Marketing",
50
+ # "avatar_image_url": "https://example.com/abc.png"
51
+ # }
52
+ def self.update(request_id:)
53
+ _put("/incoming_requests/#{request_id}")
54
+ end
55
+
56
+ # You can decline a contact approval request you received
57
+ #
58
+ # @see http://developer.chatwork.com/ja/endpoint_incoming_requests.html#DELETE-incoming_requests-request_id
59
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
60
+ #
61
+ # @param request_id [Integer]
62
+ def self.destroy(request_id:)
63
+ _delete("/incoming_requests/#{request_id}")
64
+ end
65
+
66
+ class << self
67
+ alias_method :approve, :update
68
+ alias_method :decline, :destroy
69
+ end
70
+ end
71
+ end
@@ -1,13 +1,38 @@
1
1
  module ChatWork
2
- class Me < Entity
3
- install_class_operations :get
2
+ module Me
3
+ extend EntityMethods
4
4
 
5
- def self.path
6
- "/me"
7
- end
8
-
9
- def path
10
- "/me"
5
+ # Get your account information
6
+ #
7
+ # @see http://developer.chatwork.com/ja/endpoint_me.html#GET-me
8
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
9
+ #
10
+ # @return [Hashie::Mash]
11
+ #
12
+ # @example response format
13
+ # {
14
+ # "account_id": 123,
15
+ # "room_id": 322,
16
+ # "name": "John Smith",
17
+ # "chatwork_id": "tarochatworkid",
18
+ # "organization_id": 101,
19
+ # "organization_name": "Hello Company",
20
+ # "department": "Marketing",
21
+ # "title": "CMO",
22
+ # "url": "http://mycompany.example.com",
23
+ # "introduction": "Self Introduction",
24
+ # "mail": "taro@example.com",
25
+ # "tel_organization": "XXX-XXXX-XXXX",
26
+ # "tel_extension": "YYY-YYYY-YYYY",
27
+ # "tel_mobile": "ZZZ-ZZZZ-ZZZZ",
28
+ # "skype": "myskype_id",
29
+ # "facebook": "myfacebook_id",
30
+ # "twitter": "mytwitter_id",
31
+ # "avatar_image_url": "https://example.com/abc.png",
32
+ # "login_mail": "account@example.com"
33
+ # }
34
+ def self.get
35
+ _get("/me")
11
36
  end
12
37
  end
13
38
  end
@@ -1,9 +1,60 @@
1
1
  module ChatWork
2
- class Member < Entity
3
- install_class_operations :get
2
+ module Member
3
+ extend EntityMethods
4
4
 
5
- def self.path
6
- "/rooms/%d/members"
5
+ # Get the list of all chat members associated with the specified chat
6
+ #
7
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-members
8
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
9
+ #
10
+ # @param room_id [Integer]
11
+ #
12
+ # @return [Array<Hashie::Mash>]
13
+ #
14
+ # @example response format
15
+ # [
16
+ # {
17
+ # "account_id": 123,
18
+ # "role": "member",
19
+ # "name": "John Smith",
20
+ # "chatwork_id": "tarochatworkid",
21
+ # "organization_id": 101,
22
+ # "organization_name": "Hello Company",
23
+ # "department": "Marketing",
24
+ # "avatar_image_url": "https://example.com/abc.png"
25
+ # }
26
+ # ]
27
+ def self.get(room_id:)
28
+ _get("/rooms/#{room_id}/members")
29
+ end
30
+
31
+ # Change associated members of group chat at once
32
+ #
33
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#PUT-rooms-room_id-members
34
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
35
+ #
36
+ # @param room_id [Integer]
37
+ # @param members_admin_ids [Array<Integer>, String] List of user IDs who will be given administrator permission for the group chat.
38
+ # At least one user must be specified as an administrator.
39
+ # @param members_member_ids [Array<Integer>, String] List of user IDs who will be given member permission for the group chat.
40
+ # @param members_readonly_ids [Array<Integer>, String] List of user IDs who will be given read-only permission for the group chat.
41
+ #
42
+ # @return [Hashie::Mash]
43
+ #
44
+ # @example response format
45
+ # {
46
+ # "admin": [123, 542, 1001],
47
+ # "member": [10, 103],
48
+ # "readonly": [6, 11]
49
+ # }
50
+ def self.update_all(room_id:, members_admin_ids:, members_member_ids: nil, members_readonly_ids: nil)
51
+ params = {
52
+ members_admin_ids: Array(members_admin_ids).join(","),
53
+ }
54
+ params[:members_member_ids] = Array(members_member_ids).join(",") if members_member_ids
55
+ params[:members_readonly_ids] = Array(members_readonly_ids).join(",") if members_readonly_ids
56
+
57
+ _put("/rooms/#{room_id}/members", params)
7
58
  end
8
59
  end
9
60
  end
@@ -1,13 +1,154 @@
1
1
  module ChatWork
2
- class Message < Entity
3
- install_class_operations :create, :get
2
+ module Message
3
+ extend EntityMethods
4
4
 
5
- def self.path
6
- "/rooms/%d/messages"
5
+ # Get all messages associated with the specified chat (returns up to 100 entries).
6
+ #
7
+ # If the parameter is not set, it returns the next 100 entries from previous call.
8
+ #
9
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages
10
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
11
+ #
12
+ # @param room_id [Integer]
13
+ # @param force [Boolean, Integer] Flag which forces to get 100 newest entries regardless of previous calls.
14
+ #
15
+ # @return [Array<Hashie::Mash>]
16
+ #
17
+ # @example response format
18
+ # [
19
+ # {
20
+ # "message_id": "5",
21
+ # "account": {
22
+ # "account_id": 123,
23
+ # "name": "Bob",
24
+ # "avatar_image_url": "https://example.com/ico_avatar.png"
25
+ # },
26
+ # "body": "Hello Chatwork!",
27
+ # "send_time": 1384242850,
28
+ # "update_time": 0
29
+ # }
30
+ # ]
31
+ def self.get(room_id:, force: nil)
32
+ _get("/rooms/#{room_id}/messages", force: boolean_to_integer(force))
7
33
  end
8
34
 
9
- def path
10
- "/rooms/%d/messages"
35
+ # Add new message to the chat
36
+ #
37
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#POST-rooms-room_id-messages
38
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
39
+ #
40
+ # @param room_id [Integer]
41
+ # @param body [String] message body
42
+ #
43
+ # @return [Hashie::Mash]
44
+ #
45
+ # @example response format
46
+ # {
47
+ # "message_id": "1234"
48
+ # }
49
+ def self.create(room_id:, body:)
50
+ _post("/rooms/#{room_id}/messages", body: body)
51
+ end
52
+
53
+ # Mark messages as read
54
+ #
55
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#PUT-rooms-room_id-messages-read
56
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
57
+ #
58
+ # @param room_id [Integer]
59
+ # @param message_id [String]
60
+ #
61
+ # @return [Hashie::Mash]
62
+ #
63
+ # @example response format
64
+ # {
65
+ # "unread_num": 461,
66
+ # "mention_num": 0
67
+ # }
68
+ def self.read(room_id:, message_id: nil)
69
+ _put("/rooms/#{room_id}/messages/read", message_id: message_id)
70
+ end
71
+
72
+ # Mark messages as unread
73
+ #
74
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#PUT-rooms-room_id-messages-unread
75
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
76
+ #
77
+ # @param room_id [Integer]
78
+ # @param message_id [String]
79
+ #
80
+ # @return [Hashie::Mash]
81
+ #
82
+ # @example response format
83
+ # {
84
+ # "unread_num": 3,
85
+ # "mention_num": 0
86
+ # }
87
+ def self.unread(room_id:, message_id:)
88
+ _put("/rooms/#{room_id}/messages/unread", message_id: message_id)
89
+ end
90
+
91
+ # Get information about the specified message
92
+ #
93
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages-message_id
94
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
95
+ #
96
+ # @param room_id [Integer]
97
+ # @param message_id [String]
98
+ #
99
+ # @return [Hashie::Mash]
100
+ #
101
+ # @example response format
102
+ # {
103
+ # "message_id": "5",
104
+ # "account": {
105
+ # "account_id": 123,
106
+ # "name": "Bob",
107
+ # "avatar_image_url": "https://example.com/ico_avatar.png"
108
+ # },
109
+ # "body": "Hello Chatwork!",
110
+ # "send_time": 1384242850,
111
+ # "update_time": 0
112
+ # }
113
+ def self.find(room_id:, message_id:)
114
+ _get("/rooms/#{room_id}/messages/#{message_id}")
115
+ end
116
+
117
+ # Update the specified message
118
+ #
119
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#PUT-rooms-room_id-messages-message_id
120
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
121
+ #
122
+ # @param room_id [Integer]
123
+ # @param message_id [String]
124
+ # @param body [String] message body
125
+ #
126
+ # @return [Hashie::Mash]
127
+ #
128
+ # @example response format
129
+ # {
130
+ # "message_id": "1234"
131
+ # }
132
+ def self.update(room_id:, message_id:, body:)
133
+ _put("/rooms/#{room_id}/messages/#{message_id}", body: body)
134
+ end
135
+
136
+ # Destroy the specified message
137
+ #
138
+ # @see http://developer.chatwork.com/ja/endpoint_rooms.html#PUT-rooms-room_id-messages-message_id
139
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
140
+ #
141
+ # @param room_id [Integer]
142
+ # @param message_id [String]
143
+ #
144
+ # @return [Hashie::Mash]
145
+ #
146
+ # @example response format
147
+ # {
148
+ # "message_id": "1234"
149
+ # }
150
+ def self.destroy(room_id:, message_id:)
151
+ _delete("/rooms/#{room_id}/messages/#{message_id}")
11
152
  end
12
153
  end
13
154
  end
@@ -0,0 +1,25 @@
1
+ module ChatWork
2
+ module MyStatus
3
+ extend EntityMethods
4
+
5
+ # Get the number of: unread messages, unread To messages, and unfinished tasks.
6
+ #
7
+ # @see http://developer.chatwork.com/ja/endpoint_my.html#GET-my-status
8
+ # @see http://download.chatwork.com/ChatWork_API_Documentation.pdf
9
+ #
10
+ # @return [Hashie::Mash]
11
+ #
12
+ # @example response format
13
+ # {
14
+ # "unread_room_num": 2,
15
+ # "mention_room_num": 1,
16
+ # "mytask_room_num": 3,
17
+ # "unread_num": 12,
18
+ # "mention_num": 1,
19
+ # "mytask_num": 8
20
+ # }
21
+ def self.get
22
+ _get("/my/status")
23
+ end
24
+ end
25
+ end