ruby-lokalise-api 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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