ruby-lokalise-api 2.1.1 → 2.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7df41029b7adabd3bac978798ce048ae42a0c5e5d35c576c601c0b9b6995ce57
4
- data.tar.gz: faed59d883ee1f446f72ed64ff0b85f85963d16f808bc20f08f18514938bf44e
3
+ metadata.gz: 9a5f36579a974c5603be3b92103e0aebce9284a26919cbfbe87ce50b4f99669f
4
+ data.tar.gz: a36515189ac1c9242c5e21417ac52bcd27a0b43616d23e0881f41096bd03a778
5
5
  SHA512:
6
- metadata.gz: 9e5f04d28fefa3d892310c7d596ee2cd66fe7606f7f1eec68f854101ebea00fc69e3e6c1ae5ff6c742294a128ea85cb1eca249d7fdd02f30a6cddb10a1777157
7
- data.tar.gz: 2e33876bd69588e81ae657454d4d0dc67aa589c1283e2737b40706da7c16896c78934aad94daac5da256ed185b26b887d73e8dc16af19c00160d475faa50b2db
6
+ metadata.gz: 8d60b0a73b05773d852d4694e725e89e908045b6683f9c5611448f23368e490cdb05bb22a29c663671cf6e8f0294db186a198ac7e7bb2a67d94173ce1b98fd7f
7
+ data.tar.gz: 500835c3d7f8c4a49691958abc3a5bf36a9f15ddbe3694e2ec02174524f21918f145d28f328d7e17f32e0bed866e87626be7e14a3b844984f65599bb01cc07b8
@@ -1,4 +1,9 @@
1
1
  # Changelog
2
+ ## 2.2.0 (19-May-19)
3
+
4
+ * Added support for [`TeamUserGroup` endpoint](https://lokalise.co/api2docs/ruby/#resource-team-user-groups)
5
+ * Enhancements to method chaining
6
+
2
7
  ## 2.1.1 (17-May-19)
3
8
 
4
9
  * Incorporate API updates (new attributes, mostly creation and update timestamps)
data/README.md CHANGED
@@ -26,6 +26,7 @@ Official opinionated Ruby interface for the [Lokalise API](https://lokalise.co/a
26
26
  + [Tasks](#tasks)
27
27
  + [Teams](#teams)
28
28
  + [Team users](#team-users)
29
+ + [Team user groups](#team-user-groups)
29
30
  + [Translations](#translations)
30
31
  + [Translation Providers](#translation-providers)
31
32
  * [Additional Info](#additional-info)
@@ -1073,11 +1074,11 @@ task.destroy
1073
1074
  [Doc](https://lokalise.co/api2docs/ruby/#transition-retrieve-a-team-user-get)
1074
1075
 
1075
1076
  ```ruby
1076
- @client.team_user(team_id, user_id) # Input:
1077
- ## team_id (string, required)
1078
- ## user_id (string, required)
1079
- # Output:
1080
- ## Team user
1077
+ @client.team_user(team_id, user_id) # Input:
1078
+ ## team_id (string, required)
1079
+ ## user_id (string, required)
1080
+ # Output:
1081
+ ## Team user
1081
1082
  ```
1082
1083
 
1083
1084
  #### Update team user
@@ -1120,6 +1121,168 @@ user = @client.team_user('team_id', 'user_id')
1120
1121
  user.destroy
1121
1122
  ```
1122
1123
 
1124
+ ### Team user groups
1125
+
1126
+ [Team user group attributes](https://lokalise.co/api2docs/ruby/#object-team-user-groups)
1127
+
1128
+ #### Fetch team user groups
1129
+
1130
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-list-all-groups-get)
1131
+
1132
+ ```ruby
1133
+ @client.team_user_groups(team_id, params = {}) # Input:
1134
+ ## team_id (string, required)
1135
+ ## params (hash)
1136
+ ### :page and :limit
1137
+ # Output:
1138
+ ## Collection of team user groups
1139
+ ```
1140
+
1141
+ #### Fetch a single group
1142
+
1143
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-retrieve-a-group-get)
1144
+
1145
+ ```ruby
1146
+ @client.team_user_group(team_id, group_id) # Input:
1147
+ ## team_id (string, required)
1148
+ ## group_id (string, required)
1149
+ # Output:
1150
+ ## Group
1151
+ ```
1152
+
1153
+ #### Create group
1154
+
1155
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-create-a-group-post)
1156
+
1157
+ ```ruby
1158
+ @client.create_team_user_group(team_id, params) # Input:
1159
+ ## team_id (string, required)
1160
+ ## params (hash, required):
1161
+ ### :name (string, required)
1162
+ ### :is_reviewer (boolean, required)
1163
+ ### :is_admin (boolean, required)
1164
+ ### :admin_rights (array) - required only if is_admin is true
1165
+ ### :languages (array of hashes) - required if is_admin is false
1166
+ # Output:
1167
+ ## Updated group
1168
+ ```
1169
+
1170
+ #### Update group
1171
+
1172
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-update-a-group-put)
1173
+
1174
+ ```ruby
1175
+ @client.update_team_user_group(team_id, group_id, params) # Input:
1176
+ ## team_id (string, required)
1177
+ ## group_id (string, required)
1178
+ ## params (hash, required):
1179
+ ### :name (string, required)
1180
+ ### :is_reviewer (boolean, required)
1181
+ ### :is_admin (boolean, required)
1182
+ ### :admin_rights (array) - required only if is_admin is true
1183
+ ### :languages (array of hashes) - required if is_admin is false
1184
+ # Output:
1185
+ ## Updated group
1186
+ ```
1187
+
1188
+ Alternatively:
1189
+
1190
+ ```ruby
1191
+ group = @client.team_user_group('team_id', 'group_id')
1192
+ group.update(params)
1193
+ ```
1194
+
1195
+ #### Add projects to group
1196
+
1197
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-add-projects-to-group-put)
1198
+
1199
+ ```ruby
1200
+ @client.add_projects_to_group(team_id, group_id, project_ids) # Input:
1201
+ ## team_id (string, required)
1202
+ ## group_id (string, required)
1203
+ ## project_ids (string or array, required) - project ids that you would like to add to this group
1204
+ ```
1205
+
1206
+ Alternatively:
1207
+
1208
+ ```ruby
1209
+ group = @client.team_user_group('team_id', 'group_id')
1210
+ group.add_projects projects: [project_id1, project_id2]
1211
+ ```
1212
+
1213
+ #### Remove projects from group
1214
+
1215
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-remove-projects-from-group-put)
1216
+
1217
+ ```ruby
1218
+ @client.remove_projects_from_group(team_id, group_id, project_ids) # Input:
1219
+ ## team_id (string, required)
1220
+ ## group_id (string, required)
1221
+ ## project_ids (string or array, required) - project ids that you would like to remove from this group
1222
+ ```
1223
+
1224
+ Alternatively:
1225
+
1226
+ ```ruby
1227
+ group = @client.team_user_group('team_id', 'group_id')
1228
+ group.remove_projects projects: [project_id1, project_id2]
1229
+ ```
1230
+
1231
+ #### Add users (members) to group
1232
+
1233
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-add-members-to-group-put)
1234
+
1235
+ ```ruby
1236
+ @client.add_users_to_group(team_id, group_id, user_ids) # Input:
1237
+ ## team_id (string, required)
1238
+ ## group_id (string, required)
1239
+ ## user_ids (string or array, required) - user ids that you would like to add to this group
1240
+ ```
1241
+
1242
+ Alternatively:
1243
+
1244
+ ```ruby
1245
+ group = @client.team_user_group('team_id', 'group_id')
1246
+ group.add_users users: [user_id1, user_id2]
1247
+ ```
1248
+
1249
+ #### Remove users (members) from group
1250
+
1251
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-remove-members-from-group-put)
1252
+
1253
+ ```ruby
1254
+ @client.remove_users_from_group(team_id, group_id, user_ids) # Input:
1255
+ ## team_id (string, required)
1256
+ ## group_id (string, required)
1257
+ ## user_ids (string or array, required) - user ids that you would like to add to this group
1258
+ ```
1259
+
1260
+ Alternatively:
1261
+
1262
+ ```ruby
1263
+ group = @client.team_user_group('team_id', 'group_id')
1264
+ group.remove_users users: [user_id1, user_id2]
1265
+ ```
1266
+
1267
+ #### Destroy group
1268
+
1269
+ [Doc](https://lokalise.co/api2docs/ruby/#transition-delete-a-group-delete)
1270
+
1271
+ ```ruby
1272
+ @client.destroy_team_user_group(team_id, group_id) # Input:
1273
+ ## team_id (string, required)
1274
+ ## group_id (string, required)
1275
+ # Output:
1276
+ ## Hash with "team_id" and "group_deleted" set to "true"
1277
+ ```
1278
+
1279
+ Alternatively:
1280
+
1281
+ ```ruby
1282
+ group = @client.team_user_group('team_id', 'group_id')
1283
+ group.destroy
1284
+ ```
1285
+
1123
1286
  ### Translations
1124
1287
 
1125
1288
  [Translation attributes](https://lokalise.co/api2docs/ruby/#resource-translations)
@@ -29,6 +29,7 @@ require 'ruby-lokalise-api/resources/team'
29
29
  require 'ruby-lokalise-api/resources/order'
30
30
  require 'ruby-lokalise-api/resources/payment_card'
31
31
  require 'ruby-lokalise-api/resources/translation_provider'
32
+ require 'ruby-lokalise-api/resources/team_user_group'
32
33
 
33
34
  require 'ruby-lokalise-api/collections/base'
34
35
  require 'ruby-lokalise-api/collections/project'
@@ -48,6 +49,7 @@ require 'ruby-lokalise-api/collections/screenshot'
48
49
  require 'ruby-lokalise-api/collections/order'
49
50
  require 'ruby-lokalise-api/collections/payment_card'
50
51
  require 'ruby-lokalise-api/collections/translation_provider'
52
+ require 'ruby-lokalise-api/collections/team_user_group'
51
53
 
52
54
  require 'ruby-lokalise-api/client'
53
55
 
@@ -13,6 +13,7 @@ require 'ruby-lokalise-api/rest/screenshots'
13
13
  require 'ruby-lokalise-api/rest/orders'
14
14
  require 'ruby-lokalise-api/rest/payment_cards'
15
15
  require 'ruby-lokalise-api/rest/translation_providers'
16
+ require 'ruby-lokalise-api/rest/team_user_group'
16
17
 
17
18
  module Lokalise
18
19
  class Client
@@ -84,7 +84,7 @@ module Lokalise
84
84
  # Collection example: `{ "content": {"comments": [ ... ]} }`
85
85
  def produce_collection_for(response)
86
86
  model_class = self.class.name.base_class_name
87
- data_key_plural = data_key_for model_class, true
87
+ data_key_plural = data_key_for model_class, true, true
88
88
 
89
89
  # Fetch collection data and instantiate an individual resource for each object
90
90
  # We also preserve the `client` to be able to chain API methods later
@@ -0,0 +1,13 @@
1
+ module Lokalise
2
+ module Collections
3
+ class TeamUserGroup < Base
4
+ DATA_KEY = 'UserGroup'.freeze
5
+
6
+ class << self
7
+ def endpoint(team_id, *_args)
8
+ path_from teams: [team_id, 'groups']
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -156,6 +156,16 @@
156
156
  "role",
157
157
  "created_at_timestamp"
158
158
  ],
159
+ "team_user_group": [
160
+ "group_id",
161
+ "name",
162
+ "permissions",
163
+ "created_at",
164
+ "created_at_timestamp",
165
+ "team_id",
166
+ "projects",
167
+ "members"
168
+ ],
159
169
  "translation": [
160
170
  "translation_id",
161
171
  "key_id",
@@ -41,7 +41,7 @@ module Lokalise
41
41
 
42
42
  # Get rid of double slashes in the `path`, leading and trailing slash
43
43
  def prepare(path)
44
- path.gsub(%r{\A/}, '').gsub(%r{//}, '/').gsub(%r{/\z}, '')
44
+ path.gsub(%r{\A/}, '').gsub(%r{//}, '/').gsub(%r{/+\z}, '')
45
45
  end
46
46
 
47
47
  def respond_with(response, client)
@@ -35,15 +35,19 @@ module Lokalise
35
35
  super
36
36
  end
37
37
 
38
- # Defines common CRUD instance methods
39
- # Usage: `supports :update, :destroy`
38
+ # Defines CRUD instance methods. In the simplest case it delegates work to the
39
+ # class method. In more complex case it is possible to specify sub-path and the
40
+ # class method name to call.
41
+ # Usage: `supports :update, :destroy, [:complex_method, '/sub/path', :update]`
40
42
  def supports(*methods)
41
- methods.each do |method_name|
43
+ methods.each do |m_data|
44
+ method_name, sub_path, c_method = m_data.is_a?(Array) ? m_data : [m_data, '', m_data]
42
45
  define_method method_name do |params = {}|
43
- self.class.send method_name,
44
- instance_variable_get(:@client),
45
- instance_variable_get(:@path),
46
- params
46
+ path = instance_variable_get(:@path)
47
+ # If there's a sub_path, preserve the initial path to allow further chaining
48
+ params = params.merge(_initial_path: path) if sub_path
49
+ self.class.send c_method, instance_variable_get(:@client),
50
+ path + sub_path, params
47
51
  end
48
52
  end
49
53
  end
@@ -78,17 +82,31 @@ module Lokalise
78
82
  def object_from(response, params)
79
83
  model_class = name.base_class_name
80
84
  data_key_plural = data_key_for model_class, true
85
+ # Preserve the initial path to allow chaining
86
+ response['path'] = params.delete(:_initial_path) if params.key?(:_initial_path)
81
87
 
82
- if response['content'].key? data_key_plural
83
- Module.const_get("Lokalise::Collections::#{model_class}").new response,
84
- params
88
+ if response['content'].key?(data_key_plural)
89
+ produce_collection model_class, response, params
85
90
  else
86
- new response
91
+ produce_resource model_class, response
87
92
  end
88
93
  end
89
- end
90
94
 
91
- private
95
+ def produce_resource(model_class, response)
96
+ data_key_singular = data_key_for model_class
97
+
98
+ if response['content'].key? data_key_singular
99
+ data = response['content'].delete data_key_singular
100
+ response['content'].merge! data
101
+ end
102
+
103
+ new response
104
+ end
105
+
106
+ def produce_collection(model_class, response, params)
107
+ Module.const_get("Lokalise::Collections::#{model_class}").new(response, params)
108
+ end
109
+ end
92
110
 
93
111
  # Generates path for the individual resource based on the path for the collection
94
112
  def infer_path_from(response)
@@ -0,0 +1,20 @@
1
+ module Lokalise
2
+ module Resources
3
+ class TeamUserGroup < Base
4
+ DATA_KEY = 'Group'.freeze
5
+ ID_KEY = 'group'.freeze
6
+ supports :update, :destroy,
7
+ [:add_projects, '/projects/add', :update],
8
+ [:remove_projects, '/projects/remove', :update],
9
+ [:add_users, '/members/add', :update],
10
+ [:remove_users, '/members/remove', :update]
11
+
12
+ class << self
13
+ def endpoint(team_id, team_user_group_id = nil, *actions)
14
+ path_from teams: team_id,
15
+ groups: [team_user_group_id, *actions]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,105 @@
1
+ module Lokalise
2
+ class Client
3
+ # Returns all team user groups for the given team
4
+ #
5
+ # @see https://lokalise.co/api2docs/curl/#transition-list-all-groups-get
6
+ # @return [Lokalise::Collection::TeamUserGroup<Lokalise::Resources::TeamUserGroup>]
7
+ # @param team_id [String]
8
+ # @param params [Hash]
9
+ def team_user_groups(team_id, params = {})
10
+ c_r Lokalise::Collections::TeamUserGroup, :all, team_id, params
11
+ end
12
+
13
+ # Returns team user from the given team
14
+ #
15
+ # @see https://lokalise.co/api2docs/curl/#transition-retrieve-a-group-get
16
+ # @return [Lokalise::Resources::TeamUserGroup]
17
+ # @param team_id [String]
18
+ # @param group_id [String, Integer]
19
+ def team_user_group(team_id, group_id)
20
+ c_r Lokalise::Resources::TeamUserGroup, :find, [team_id, group_id]
21
+ end
22
+
23
+ # Creates team user group
24
+ #
25
+ # @see https://lokalise.co/api2docs/curl/#resource-team-user-groups
26
+ # @return [Lokalise::Resources::TeamUserGroup]
27
+ # @param params [Hash]
28
+ def create_team_user_group(team_id, params)
29
+ c_r Lokalise::Resources::TeamUserGroup, :create, team_id, params
30
+ end
31
+
32
+ # Updates team user group for the given team
33
+ #
34
+ # @see https://lokalise.co/api2docs/curl/#transition-update-a-group-put
35
+ # @return [Lokalise::Resources::TeamUserGroup]
36
+ # @param team_id [String]
37
+ # @param group_id [String, Integer]
38
+ # @param params [Hash]
39
+ def update_team_user_group(team_id, group_id, params)
40
+ c_r Lokalise::Resources::TeamUserGroup, :update, [team_id, group_id], params
41
+ end
42
+
43
+ # Deletes team user group from the given team
44
+ #
45
+ # @see https://lokalise.co/api2docs/curl/#transition-delete-a-group-delete
46
+ # @return [Lokalise::Resources::TeamUserGroup]
47
+ # @param team_id [String]
48
+ # @param group_id [String, Integer]
49
+ def destroy_team_user_group(team_id, group_id)
50
+ c_r Lokalise::Resources::TeamUserGroup, :destroy, [team_id, group_id]
51
+ end
52
+
53
+ # Adds projects to the given group
54
+ #
55
+ # @see https://lokalise.co/api2docs/curl/#transition-add-projects-to-group-put
56
+ # @return [Lokalise::Resources::TeamUserGroup]
57
+ # @param team_id [String]
58
+ # @param group_id [String, Integer]
59
+ # @param project_ids [String, Integer, Array<String>, Array<Integer>]
60
+ def add_projects_to_group(team_id, group_id, project_ids)
61
+ c_r Lokalise::Resources::TeamUserGroup, :update,
62
+ [team_id, group_id, 'projects', 'add'],
63
+ project_ids, :projects
64
+ end
65
+
66
+ # Removes projects from the given group
67
+ #
68
+ # @see https://lokalise.co/api2docs/curl/#transition-remove-projects-from-group-put
69
+ # @return [Lokalise::Resources::TeamUserGroup]
70
+ # @param team_id [String]
71
+ # @param group_id [String, Integer]
72
+ # @param project_ids [String, Integer, Array<String>, Array<Integer>]
73
+ def remove_projects_from_group(team_id, group_id, project_ids)
74
+ c_r Lokalise::Resources::TeamUserGroup, :update,
75
+ [team_id, group_id, 'projects', 'remove'],
76
+ project_ids, :projects
77
+ end
78
+
79
+ # Adds users to the given group
80
+ #
81
+ # @see https://lokalise.co/api2docs/curl/#transition-add-members-to-group-put
82
+ # @return [Lokalise::Resources::TeamUserGroup]
83
+ # @param team_id [String]
84
+ # @param group_id [String, Integer]
85
+ # @param users_ids [String, Integer, Array<String>, Array<Integer>]
86
+ def add_users_to_group(team_id, group_id, users_ids)
87
+ c_r Lokalise::Resources::TeamUserGroup, :update,
88
+ [team_id, group_id, 'members', 'add'],
89
+ users_ids, :users
90
+ end
91
+
92
+ # Removes users from the given group
93
+ #
94
+ # @see https://lokalise.co/api2docs/curl/#transition-remove-members-from-group-put
95
+ # @return [Lokalise::Resources::TeamUserGroup]
96
+ # @param team_id [String]
97
+ # @param group_id [String, Integer]
98
+ # @param users_ids [String, Integer, Array<String>, Array<Integer>]
99
+ def remove_users_from_group(team_id, group_id, users_ids)
100
+ c_r Lokalise::Resources::TeamUserGroup, :update,
101
+ [team_id, group_id, 'members', 'remove'],
102
+ users_ids, :users
103
+ end
104
+ end
105
+ end
@@ -11,8 +11,8 @@ module Lokalise
11
11
  # @return [String]
12
12
  # @param model_class [String]
13
13
  # @param plural [Boolean] Should the returned value be pluralized?
14
- def data_key_for(model_class, plural = false)
15
- data_key = get_key 'DATA_KEY', model_class
14
+ def data_key_for(model_class, plural = false, collection = false)
15
+ data_key = get_key 'DATA_KEY', model_class, collection
16
16
 
17
17
  return data_key unless plural
18
18
 
@@ -43,8 +43,10 @@ module Lokalise
43
43
 
44
44
  private
45
45
 
46
- def get_key(name, model_class)
47
- if Module.const_defined? "Lokalise::Resources::#{model_class}::#{name}"
46
+ def get_key(name, model_class, collection = false)
47
+ if collection && Module.const_defined?("Lokalise::Collections::#{model_class}::#{name}")
48
+ Module.const_get "Lokalise::Collections::#{model_class}::#{name}"
49
+ elsif Module.const_defined? "Lokalise::Resources::#{model_class}::#{name}"
48
50
  Module.const_get "Lokalise::Resources::#{model_class}::#{name}"
49
51
  else
50
52
  model_class
@@ -1,3 +1,3 @@
1
1
  module Lokalise
2
- VERSION = '2.1.1'.freeze
2
+ VERSION = '2.2.0'.freeze
3
3
  end
@@ -0,0 +1,192 @@
1
+ RSpec.describe Lokalise::Client do
2
+ let(:team_id) { 176_692 }
3
+ let(:group_id) { 515 }
4
+ let(:second_group_id) { 690 }
5
+ let(:third_group_id) { 689 }
6
+ let(:project_id) { '605317925c13e4ecb36a79.94825279' }
7
+ let(:another_project_id) { '446952185c01a12b4d0b45.76217122' }
8
+ let(:user_id) { 35_554 }
9
+
10
+ describe '#team_user_groups' do
11
+ it 'should return all team_user_groups' do
12
+ team_user_groups = VCR.use_cassette('team_user_groups') do
13
+ test_client.team_user_groups team_id
14
+ end
15
+
16
+ expect(team_user_groups.collection.count).to eq(2)
17
+ expect(team_user_groups.team_id).to eq(team_id)
18
+ end
19
+
20
+ it 'should support pagination' do
21
+ team_users = VCR.use_cassette('team_user_groups_pagination') do
22
+ test_client.team_user_groups team_id, limit: 1, page: 2
23
+ end
24
+
25
+ expect(team_users.collection.count).to eq(1)
26
+ expect(team_users.total_results).to eq(2)
27
+ expect(team_users.total_pages).to eq(2)
28
+ expect(team_users.results_per_page).to eq(1)
29
+ expect(team_users.current_page).to eq(2)
30
+ end
31
+ end
32
+
33
+ specify '#team_user_group' do
34
+ group = VCR.use_cassette('team_user_group') do
35
+ test_client.team_user_group team_id, group_id
36
+ end
37
+
38
+ expect(group.group_id).to eq(group_id)
39
+ expect(group.name).to eq('Demo')
40
+ expect(group.permissions['is_admin']).to eq(true)
41
+ expect(group.created_at).to eq('2019-03-19 19:53:04 (Etc/UTC)')
42
+ expect(group.created_at_timestamp).to eq(1_553_025_184)
43
+ expect(group.team_id).to eq(team_id)
44
+ expect(group.projects.first).to eq('803826145ba90b42d5d860.46800099')
45
+ expect(group.members[1]).to eq(25_753)
46
+ end
47
+
48
+ specify '#create_team_user_group' do
49
+ group = VCR.use_cassette('create_team_user_group') do
50
+ test_client.create_team_user_group team_id, name: 'RSpec group',
51
+ is_reviewer: false,
52
+ is_admin: false,
53
+ languages: {
54
+ reference: [],
55
+ contributable: [640]
56
+ }
57
+ end
58
+
59
+ expect(group.name).to eq('RSpec group')
60
+ expect(group.team_id).to eq(team_id)
61
+ end
62
+
63
+ specify '#update_team_user_group' do
64
+ group = VCR.use_cassette('update_team_user_group') do
65
+ test_client.update_team_user_group team_id, second_group_id,
66
+ name: 'updated rspec', is_admin: true,
67
+ is_reviewer: true
68
+ end
69
+
70
+ expect(group.name).to eq('updated rspec')
71
+ expect(group.team_id).to eq(team_id)
72
+ expect(group.permissions['is_admin']).to eq(true)
73
+ expect(group.permissions['is_reviewer']).to eq(true)
74
+ end
75
+
76
+ specify '#destroy_team_user_group' do
77
+ response = VCR.use_cassette('destroy_team_user_group') do
78
+ test_client.destroy_team_user_group team_id, second_group_id
79
+ end
80
+ expect(response['team_id']).to eq(team_id)
81
+ expect(response['group_deleted']).to eq(true)
82
+ end
83
+
84
+ specify '#add_projects_to_group' do
85
+ group = VCR.use_cassette('add_projects_to_group') do
86
+ test_client.add_projects_to_group team_id, third_group_id, project_id
87
+ end
88
+
89
+ expect(group.team_id).to eq(team_id)
90
+ expect(group.group_id).to eq(third_group_id)
91
+ expect(group.projects).to include(project_id)
92
+ end
93
+
94
+ specify '#remove_projects_from_group' do
95
+ group = VCR.use_cassette('remove_projects_from_group') do
96
+ test_client.remove_projects_from_group team_id, third_group_id, another_project_id
97
+ end
98
+
99
+ expect(group.group_id).to eq(third_group_id)
100
+ expect(group.team_id).to eq(team_id)
101
+ expect(group.projects).to be_empty
102
+ end
103
+
104
+ specify '#add_users_to_group' do
105
+ group = VCR.use_cassette('add_users_to_group') do
106
+ test_client.add_users_to_group team_id, third_group_id, user_id
107
+ end
108
+
109
+ expect(group.team_id).to eq(team_id)
110
+ expect(group.group_id).to eq(third_group_id)
111
+ expect(group.members).to include(user_id)
112
+ end
113
+
114
+ specify '#remove_users_from_group' do
115
+ group = VCR.use_cassette('remove_users_from_group') do
116
+ test_client.remove_users_from_group team_id, third_group_id, user_id
117
+ end
118
+
119
+ expect(group.group_id).to eq(third_group_id)
120
+ expect(group.team_id).to eq(team_id)
121
+ expect(group.members).to be_empty
122
+ end
123
+
124
+ context 'team user group chained methods' do
125
+ it 'should support update and destroy' do
126
+ group = VCR.use_cassette('another_team_user_group') do
127
+ test_client.team_user_group team_id, third_group_id
128
+ end
129
+
130
+ expect(group.group_id).to eq(third_group_id)
131
+
132
+ group = VCR.use_cassette('update_another_team_user_group') do
133
+ group.update name: 'another group updated', is_admin: true, is_reviewer: true
134
+ end
135
+
136
+ expect(group.group_id).to eq(third_group_id)
137
+ expect(group.permissions['is_admin']).to eq(true)
138
+ expect(group.name).to eq('another group updated')
139
+
140
+ response = VCR.use_cassette('destroy_another_team_user_group') do
141
+ group.destroy
142
+ end
143
+
144
+ expect(response['team_id']).to eq(team_id)
145
+ expect(response['group_deleted']).to eq(true)
146
+ end
147
+
148
+ it 'should support project management' do
149
+ group = VCR.use_cassette('team_user_group') do
150
+ test_client.team_user_group team_id, group_id
151
+ end
152
+
153
+ group = VCR.use_cassette('add_project_to_group_chained') do
154
+ group.add_projects(projects: [another_project_id])
155
+ end
156
+
157
+ expect(group.team_id).to eq(team_id)
158
+ expect(group.group_id).to eq(group_id)
159
+ expect(group.projects).to include(another_project_id)
160
+
161
+ group = VCR.use_cassette('remove_project_from_group_chained') do
162
+ group.remove_projects(projects: [another_project_id])
163
+ end
164
+
165
+ expect(group.team_id).to eq(team_id)
166
+ expect(group.group_id).to eq(group_id)
167
+ expect(group.projects).not_to include(another_project_id)
168
+ end
169
+
170
+ it 'should support users management' do
171
+ group = VCR.use_cassette('team_user_group') do
172
+ test_client.team_user_group team_id, group_id
173
+ end
174
+
175
+ group = VCR.use_cassette('add_user_to_group_chained') do
176
+ group.add_users(users: [user_id])
177
+ end
178
+
179
+ expect(group.team_id).to eq(team_id)
180
+ expect(group.group_id).to eq(group_id)
181
+ expect(group.members).to include(user_id)
182
+
183
+ group = VCR.use_cassette('remove_user_from_group_chained') do
184
+ group.remove_users(users: [user_id])
185
+ end
186
+
187
+ expect(group.team_id).to eq(team_id)
188
+ expect(group.group_id).to eq(group_id)
189
+ expect(group.members).not_to include(user_id)
190
+ end
191
+ end
192
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lokalise-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Bodrov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-17 00:00:00.000000000 Z
11
+ date: 2019-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -186,6 +186,7 @@ files:
186
186
  - lib/ruby-lokalise-api/collections/task.rb
187
187
  - lib/ruby-lokalise-api/collections/team.rb
188
188
  - lib/ruby-lokalise-api/collections/team_user.rb
189
+ - lib/ruby-lokalise-api/collections/team_user_group.rb
189
190
  - lib/ruby-lokalise-api/collections/translation.rb
190
191
  - lib/ruby-lokalise-api/collections/translation_provider.rb
191
192
  - lib/ruby-lokalise-api/connection.rb
@@ -208,6 +209,7 @@ files:
208
209
  - lib/ruby-lokalise-api/resources/task.rb
209
210
  - lib/ruby-lokalise-api/resources/team.rb
210
211
  - lib/ruby-lokalise-api/resources/team_user.rb
212
+ - lib/ruby-lokalise-api/resources/team_user_group.rb
211
213
  - lib/ruby-lokalise-api/resources/translation.rb
212
214
  - lib/ruby-lokalise-api/resources/translation_provider.rb
213
215
  - lib/ruby-lokalise-api/rest/comments.rb
@@ -221,6 +223,7 @@ files:
221
223
  - lib/ruby-lokalise-api/rest/screenshots.rb
222
224
  - lib/ruby-lokalise-api/rest/snapshots.rb
223
225
  - lib/ruby-lokalise-api/rest/tasks.rb
226
+ - lib/ruby-lokalise-api/rest/team_user_group.rb
224
227
  - lib/ruby-lokalise-api/rest/team_users.rb
225
228
  - lib/ruby-lokalise-api/rest/teams.rb
226
229
  - lib/ruby-lokalise-api/rest/translation_providers.rb
@@ -242,6 +245,7 @@ files:
242
245
  - spec/lib/ruby-lokalise-api/rest/screenshots_spec.rb
243
246
  - spec/lib/ruby-lokalise-api/rest/snapshots_spec.rb
244
247
  - spec/lib/ruby-lokalise-api/rest/tasks_spec.rb
248
+ - spec/lib/ruby-lokalise-api/rest/team_user_groups_spec.rb
245
249
  - spec/lib/ruby-lokalise-api/rest/team_users_spec.rb
246
250
  - spec/lib/ruby-lokalise-api/rest/teams_spec.rb
247
251
  - spec/lib/ruby-lokalise-api/rest/translation_providers_spec.rb
@@ -289,6 +293,7 @@ test_files:
289
293
  - spec/lib/ruby-lokalise-api/rest/tasks_spec.rb
290
294
  - spec/lib/ruby-lokalise-api/rest/teams_spec.rb
291
295
  - spec/lib/ruby-lokalise-api/rest/team_users_spec.rb
296
+ - spec/lib/ruby-lokalise-api/rest/team_user_groups_spec.rb
292
297
  - spec/lib/ruby-lokalise-api/rest/translations_spec.rb
293
298
  - spec/lib/ruby-lokalise-api/rest/translation_providers_spec.rb
294
299
  - spec/lib/ruby-lokalise-api/utils/snakecase_spec.rb