rocketchat 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 63e5c3e6c2532784d89443021ab60e3cdcd7f6a9
4
- data.tar.gz: bd1d984b6706dad200ca49dde43c56de337bb4b2
3
+ metadata.gz: c1ece9d7db49aaf491be028d4b226e4735ac74a6
4
+ data.tar.gz: 0fb9b1d7cafbe4c2bde83f23fc4f21f4f75c48ef
5
5
  SHA512:
6
- metadata.gz: c7d31791d785e2198e312c003a9260a75e2677b6485d7587915ee9cf7b526a54dd43ea8887a0a8e41816db597bf4bfc67cb4b293cad0de52d23085149c6a086b
7
- data.tar.gz: 1c0168a638feef734657f0d6ee7190c8e10e42f19370902493618f9e314fca21bce52f593cde9c70fb68b97cd1b0ecefbd6aba0ba53b9c0559c9763e66a3db90
6
+ metadata.gz: 6c9db4af0f670500137e109f276c911d67517d7b8677c5999405fe7f7f0f3c5cf77e3659fdf30087085e5db7d9f36f66bfb8d398c18fa7be36ac1a57c0ad4e2f
7
+ data.tar.gz: 9e391cff6561058ebbbe366dcd9e9b8c06dd1e3221cee2673a21568f94a91da45c330950ca36966846163a3ee7360fe5c727d7e52a90022de92f9566d1e33a9b
data/.rubocop.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  Metrics/BlockLength:
2
2
  Exclude:
3
3
  - "**/*_spec.rb"
4
+ - "spec/shared/*.rb"
4
5
 
5
6
  Metrics/LineLength:
6
7
  Max: 120
data/README.md CHANGED
@@ -35,6 +35,18 @@ This gem supports the following Rocket.Chat APIs (Tested against Rocket.Chat v0.
35
35
  * [/api/v1/logout](#authentication)
36
36
  * /api/v1/me
37
37
 
38
+ #### Channels
39
+ * [/api/v1/channels.create](docs/channels.md#channelscreate)
40
+ * [/api/v1/channels.info](docs/channels.md#channelsinfo)
41
+ * [/api/v1/channels.list](docs/channels.md#channelslist)
42
+ * [/api/v1/channels.rename](docs/channels.md#channelsrename)
43
+
44
+ #### Groups
45
+ * /api/v1/groups.create
46
+ * /api/v1/groups.info
47
+ * [/api/v1/groups.list](docs/groups.md#groupslist)
48
+ * /api/v1/groups.rename
49
+
38
50
  #### Users
39
51
  * [/api/v1/users.create](docs/users.md#userscreate)
40
52
  * [/api/v1/users.delete](docs/users.md#usersdelete)
@@ -1,3 +1,3 @@
1
1
  module RocketChat
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.1.2'.freeze
3
3
  end
@@ -0,0 +1,28 @@
1
+ module RocketChat
2
+ module Messages
3
+ #
4
+ # Rocket.Chat Channel messages
5
+ #
6
+ class Channel < Room
7
+ include ListSupport
8
+
9
+ # channels.list REST API
10
+ # @param [Integer] offset Query offset
11
+ # @param [Integer] count Query count/limit
12
+ # @param [Hash] sort Query field sort hash. eg `{ msgs: 1, name: -1 }`
13
+ # @param [Hash] fields Query fields to return. eg `{ name: 1, ro: 0 }`
14
+ # @param [Hash] query The query. `{ active: true, type: { '$in': ['name', 'general'] } }`
15
+ # @return [Room[]]
16
+ # @raise [HTTPError, StatusError]
17
+ #
18
+ def list(offset: nil, count: nil, sort: nil, fields: nil, query: nil)
19
+ response = session.request_json(
20
+ '/api/v1/channels.list',
21
+ body: build_list_body(offset, count, sort, fields, query)
22
+ )
23
+
24
+ response['channels'].map { |hash| RocketChat::Room.new hash } if response['success']
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ module RocketChat
2
+ module Messages
3
+ #
4
+ # Rocket.Chat Group messages
5
+ #
6
+ class Group < Room
7
+ include ListSupport
8
+
9
+ # groups.list REST API
10
+ # @param [Integer] offset Query offset
11
+ # @param [Integer] count Query count/limit
12
+ # @param [Hash] sort Query field sort hash. eg `{ msgs: 1, name: -1 }`
13
+ # @param [Hash] fields Query fields to return. eg `{ name: 1, ro: 0 }`
14
+ # @return [Room[]]
15
+ # @raise [HTTPError, StatusError]
16
+ #
17
+ def list(offset: nil, count: nil, sort: nil, fields: nil)
18
+ response = session.request_json(
19
+ '/api/v1/groups.list',
20
+ body: build_list_body(offset, count, sort, fields)
21
+ )
22
+
23
+ response['groups'].map { |hash| RocketChat::Room.new hash } if response['success']
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module RocketChat
2
+ module Messages
3
+ #
4
+ # Support methods for *.list calls
5
+ #
6
+ module ListSupport
7
+ private
8
+
9
+ def build_list_body(offset, count, sort, fields, query = nil)
10
+ body = {}
11
+
12
+ body[:offset] = offset.to_i if offset.is_a? Integer
13
+ body[:count] = count.to_i if count.is_a? Integer
14
+ [[:sort, sort], [:fields, fields], [:query, query]].each do |field, val|
15
+ case val
16
+ when Hash
17
+ body[field] = val.to_json
18
+ when String
19
+ body[field] = val
20
+ end
21
+ end
22
+
23
+ body
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,100 @@
1
+ module RocketChat
2
+ module Messages
3
+ #
4
+ # Rocket.Chat Room messages template (groups&channels)
5
+ #
6
+ class Room
7
+ def self.inherited(subclass)
8
+ field = subclass.name.split('::')[-1].downcase
9
+ collection = field + 's'
10
+ subclass.send(:define_singleton_method, :field) { field }
11
+ subclass.send(:define_singleton_method, :collection) { collection }
12
+ end
13
+
14
+ #
15
+ # @param [Session] session Session
16
+ #
17
+ def initialize(session)
18
+ @session = session
19
+ end
20
+
21
+ # Full API path to call
22
+ def self.api_path(method)
23
+ "/api/v1/#{collection}.#{method}"
24
+ end
25
+
26
+ #
27
+ # *.create REST API
28
+ # @param [String] name Room name
29
+ # @param [Hash] options Additional options
30
+ # @return [Room]
31
+ # @raise [HTTPError, StatusError]
32
+ #
33
+ def create(name, options = {})
34
+ response = session.request_json(
35
+ self.class.api_path('create'),
36
+ method: :post,
37
+ body: {
38
+ name: name
39
+ }.merge(room_option_hash(options))
40
+ )
41
+ RocketChat::Room.new response[self.class.field]
42
+ end
43
+
44
+ #
45
+ # *.info REST API
46
+ # @param [String] room_id Rocket.Chat room id
47
+ # @param [String] name Room name (channels since 0.56)
48
+ # @return [Room]
49
+ # @raise [HTTPError, StatusError]
50
+ #
51
+ def info(room_id: nil, name: nil)
52
+ response = session.request_json(
53
+ self.class.api_path('info'),
54
+ body: room_params(room_id, name),
55
+ upstreamed_errors: ['error-room-not-found']
56
+ )
57
+
58
+ RocketChat::Room.new response[self.class.field] if response['success']
59
+ end
60
+
61
+ #
62
+ # *.rename REST API
63
+ # @param [String] room_id Rocket.Chat room id
64
+ # @param [String] new_name New room name
65
+ # @return [Boolean]
66
+ # @raise [HTTPError, StatusError]
67
+ #
68
+ def rename(room_id, new_name)
69
+ session.request_json(
70
+ self.class.api_path('rename'),
71
+ method: :post,
72
+ body: { roomId: room_id, name: new_name }
73
+ )['success']
74
+ end
75
+
76
+ private
77
+
78
+ attr_reader :session
79
+
80
+ def room_params(id, name)
81
+ if id
82
+ { roomId: id }
83
+ elsif name
84
+ { roomName: name }
85
+ end
86
+ end
87
+
88
+ def room_option_hash(options)
89
+ args = [options, :members, :read_only, :custom_fields]
90
+
91
+ options = Util.slice_hash(*args)
92
+ return {} if options.empty?
93
+
94
+ new_hash = {}
95
+ options.each { |key, value| new_hash[Util.camelize(key)] = value }
96
+ new_hash
97
+ end
98
+ end
99
+ end
100
+ end
@@ -4,6 +4,8 @@ module RocketChat
4
4
  # Rocket.Chat User messages
5
5
  #
6
6
  class User
7
+ include ListSupport
8
+
7
9
  #
8
10
  # @param [Session] session Session
9
11
  #
@@ -76,7 +78,7 @@ module RocketChat
76
78
  # @param [Integer] count Query count/limit
77
79
  # @param [Hash] sort Query field sort hash. eg `{ active: 1, email: -1 }`
78
80
  # @param [Hash] fields Query fields to return. eg `{ name: 1, email: 0 }`
79
- # @param [Hash] query The query. `{ active: true, type: { $in: ['user', 'bot'] } }`
81
+ # @param [Hash] query The query. `{ active: true, type: { '$in': ['user', 'bot'] } }`
80
82
  # @return [User[]]
81
83
  # @raise [HTTPError, StatusError]
82
84
  #
@@ -156,18 +158,6 @@ module RocketChat
156
158
  new_hash
157
159
  end
158
160
 
159
- def build_list_body(offset, count, sort, fields, query)
160
- body = {}
161
-
162
- body[:offset] = offset.to_i if offset.is_a? Integer
163
- body[:count] = count.to_i if count.is_a? Integer
164
- body[:sort] = sort.to_json if sort.is_a? Hash
165
- body[:fields] = fields.to_json if fields.is_a? Hash
166
- body[:query] = query.to_json if query.is_a? Hash
167
-
168
- body
169
- end
170
-
171
161
  def user_params(id, username)
172
162
  if id
173
163
  { userId: id }
@@ -0,0 +1,94 @@
1
+ module RocketChat
2
+ #
3
+ # Rocket.Chat Room
4
+ #
5
+ class Room
6
+ # Raw user data
7
+ attr_reader :data
8
+
9
+ TYPES = {
10
+ 'c' => 'public',
11
+ 'p' => 'private',
12
+ 'd' => 'IM'
13
+ }.freeze
14
+
15
+ #
16
+ # @param [Hash] data Raw user data
17
+ #
18
+ def initialize(data)
19
+ @data = Util.stringify_hash_keys data
20
+ end
21
+
22
+ # Channel ID
23
+ def id
24
+ data['_id']
25
+ end
26
+
27
+ # Channel name
28
+ def name
29
+ data['name']
30
+ end
31
+
32
+ # Channel owner
33
+ def owner
34
+ data['u']
35
+ end
36
+
37
+ def created_at
38
+ data['ts']
39
+ end
40
+
41
+ def last_update
42
+ data['_updatedAt']
43
+ end
44
+
45
+ def topic
46
+ data['topic']
47
+ end
48
+
49
+ def description
50
+ data['description']
51
+ end
52
+
53
+ # Channel members
54
+ def members
55
+ data['usernames'] || []
56
+ end
57
+
58
+ # Read-only status
59
+ def read_only
60
+ data['ro']
61
+ end
62
+
63
+ # Message count
64
+ def message_count
65
+ data['msgs']
66
+ end
67
+
68
+ # Last message timestamp
69
+ def last_message
70
+ data['lm']
71
+ end
72
+
73
+ # Channel type
74
+ def type
75
+ TYPES[data['t']] || data['t']
76
+ end
77
+
78
+ # System messages (user left, got invited, room renamed, etc)
79
+ def system_messages
80
+ data['sysMes']
81
+ end
82
+
83
+ def inspect
84
+ format(
85
+ '#<%s:0x%p @id="%s" @name="%s" @type="%s">',
86
+ self.class.name,
87
+ object_id,
88
+ id,
89
+ name,
90
+ type
91
+ )
92
+ end
93
+ end
94
+ end
@@ -40,10 +40,16 @@ module RocketChat
40
40
  User.new request_json('/api/v1/me', method: :get)
41
41
  end
42
42
 
43
- #
44
- # User messages proxy
45
- # @return [Messages::User]
46
- #
43
+ ### Message proxies
44
+
45
+ def channels
46
+ @channels ||= RocketChat::Messages::Channel.new(self)
47
+ end
48
+
49
+ def groups
50
+ @groups ||= RocketChat::Messages::Group.new(self)
51
+ end
52
+
47
53
  def users
48
54
  @users ||= RocketChat::Messages::User.new(self)
49
55
  end
data/lib/rocketchat.rb CHANGED
@@ -6,12 +6,17 @@ require 'rocket_chat/error'
6
6
  require 'rocket_chat/util'
7
7
  require 'rocket_chat/request_helper'
8
8
 
9
+ require 'rocket_chat/messages/list_support'
9
10
  require 'rocket_chat/messages/user'
10
11
  require 'rocket_chat/messages/settings'
12
+ require 'rocket_chat/messages/room'
13
+ require 'rocket_chat/messages/channel'
14
+ require 'rocket_chat/messages/group'
11
15
 
12
16
  require 'rocket_chat/server'
13
17
  require 'rocket_chat/session'
14
18
  require 'rocket_chat/info'
15
19
  require 'rocket_chat/token'
16
20
  require 'rocket_chat/presence_status'
21
+ require 'rocket_chat/room'
17
22
  require 'rocket_chat/user'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocketchat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - int512
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-04-30 00:00:00.000000000 Z
12
+ date: 2017-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -115,10 +115,15 @@ files:
115
115
  - lib/rocket_chat/error.rb
116
116
  - lib/rocket_chat/gem_version.rb
117
117
  - lib/rocket_chat/info.rb
118
+ - lib/rocket_chat/messages/channel.rb
119
+ - lib/rocket_chat/messages/group.rb
120
+ - lib/rocket_chat/messages/list_support.rb
121
+ - lib/rocket_chat/messages/room.rb
118
122
  - lib/rocket_chat/messages/settings.rb
119
123
  - lib/rocket_chat/messages/user.rb
120
124
  - lib/rocket_chat/presence_status.rb
121
125
  - lib/rocket_chat/request_helper.rb
126
+ - lib/rocket_chat/room.rb
122
127
  - lib/rocket_chat/server.rb
123
128
  - lib/rocket_chat/session.rb
124
129
  - lib/rocket_chat/token.rb