yandex360 0.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/workflows/ci.yml +51 -0
  4. data/.gitignore +4 -1
  5. data/.rspec +5 -0
  6. data/Gemfile +0 -9
  7. data/Gemfile.lock +40 -4
  8. data/README.md +72 -1
  9. data/lib/yandex360/client.rb +16 -1
  10. data/lib/yandex360/collection.rb +22 -0
  11. data/lib/yandex360/error.rb +6 -0
  12. data/lib/yandex360/object.rb +25 -0
  13. data/lib/yandex360/objects/types.rb +20 -0
  14. data/lib/yandex360/resource.rb +59 -0
  15. data/lib/yandex360/resources/antispam.rb +18 -0
  16. data/lib/yandex360/resources/departments.rb +54 -0
  17. data/lib/yandex360/resources/groups.rb +49 -0
  18. data/lib/yandex360/resources/users.rb +50 -0
  19. data/lib/yandex360/version.rb +3 -3
  20. data/lib/yandex360.rb +23 -2
  21. data/spec/antispam_spec.rb +46 -0
  22. data/spec/client_spec.rb +24 -0
  23. data/spec/departments_spec.rb +131 -0
  24. data/spec/groups_spec.rb +133 -0
  25. data/spec/spec_helper.rb +59 -0
  26. data/spec/users_spec.rb +203 -0
  27. data/spec/vcr/anispam/create.yml +43 -0
  28. data/spec/vcr/anispam/delete.yml +41 -0
  29. data/spec/vcr/anispam/list.yml +41 -0
  30. data/spec/vcr/departments/add_alias.yml +43 -0
  31. data/spec/vcr/departments/create.yml +43 -0
  32. data/spec/vcr/departments/delete.yml +41 -0
  33. data/spec/vcr/departments/delete_alias.yml +41 -0
  34. data/spec/vcr/departments/delete_error.yml +37 -0
  35. data/spec/vcr/departments/info.yml +41 -0
  36. data/spec/vcr/departments/list.yml +41 -0
  37. data/spec/vcr/departments/update.yml +44 -0
  38. data/spec/vcr/groups/add_user.yml +43 -0
  39. data/spec/vcr/groups/create.yml +43 -0
  40. data/spec/vcr/groups/delete.yml +41 -0
  41. data/spec/vcr/groups/delete_user.yml +41 -0
  42. data/spec/vcr/groups/list.yml +48 -0
  43. data/spec/vcr/groups/params.yml +41 -0
  44. data/spec/vcr/groups/update.yml +43 -0
  45. data/spec/vcr/groups/users.yml +41 -0
  46. data/spec/vcr/users/add.yml +43 -0
  47. data/spec/vcr/users/add_alias.yml +43 -0
  48. data/spec/vcr/users/delete_alias.yml +41 -0
  49. data/spec/vcr/users/get2FA.yml +41 -0
  50. data/spec/vcr/users/get2FA_error.yml +37 -0
  51. data/spec/vcr/users/has2FA.yml +41 -0
  52. data/spec/vcr/users/info.yml +41 -0
  53. data/spec/vcr/users/list.yml +41 -0
  54. data/spec/vcr/users/list_error.yml +37 -0
  55. data/spec/vcr/users/update.yml +44 -0
  56. data/yandex360.gemspec +8 -1
  57. metadata +143 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b11c6de45c29a60108327582acc5bb36035f265d2efa3dcef034149c21cda2dc
4
- data.tar.gz: de47f74b9d82709188a8b79d0bf5105b27e45496dbc0f2b2442b739bc02554c8
3
+ metadata.gz: 76cb70cc7abcc7012654e816187c056ee7c7662ed3d6532458295dcbe8d251bc
4
+ data.tar.gz: d73c143a23cae1e185726279c1adb32020793ca9bf0eb30e3b19510459c9db2b
5
5
  SHA512:
6
- metadata.gz: 3933e9edbb6c71d5babd27fdeb46aba720d5f7dc94773fe6843dcf81e037f8feb01af16ee28a25a3494edc56968fbe9afcd73cfe764c6c3c71eb8a7b6d8abf8b
7
- data.tar.gz: 4c3e0d3753c47bf4278fa0b013fbc174ee800bf834dbdbb99071cbbcea3e91d96cdb0de4d8e9d01ff2b430607b6f2f315ac09e8b8117e11d2f60e390081bdd6f
6
+ metadata.gz: a4f7532f4a5a7da9502c5ef0b2267768827245dfd4c2632f1db61f6130c2cabc2692ce66c449eeaec1496f9ad023cb8eddccc3310c9345df4d78e53671890f42
7
+ data.tar.gz: '088a2139e3200ea6086e5a54f6113de08917f9050f40444f53f80ee40ad0c98706d72178094e84386c7a9b10ee80c2792109b743e117d8b312d0a8eecf86bf32'
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: /
5
+ schedule:
6
+ interval: daily
7
+ open-pull-requests-limit: 20
8
+ - package-ecosystem: "github-actions"
9
+ directory: "/"
10
+ schedule:
11
+ interval: "weekly"
12
+ open-pull-requests-limit: 20
@@ -0,0 +1,51 @@
1
+ name: Ruby specs
2
+ on: [push, pull_request]
3
+ jobs:
4
+ test:
5
+ name: tests
6
+ strategy:
7
+ fail-fast: false
8
+ matrix:
9
+ os: [ubuntu-latest, macos-latest]
10
+ ruby: ['2.6', '2.7', '3.0', '3.1', head, truffleruby, truffleruby-head]
11
+ runs-on: ${{ matrix.os }}
12
+ continue-on-error: true
13
+ steps:
14
+ - uses: actions/checkout@v3
15
+ - uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: ${{ matrix.ruby }}
18
+ bundler-cache: true
19
+
20
+ - name: Get the newest rubygems version to rid ourselves of warnings
21
+ run: gem update --system --no-document
22
+
23
+ - name: Install bundler
24
+ run: gem i bundler --no-document
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ bundle config set --local without benchmark
29
+ bundle install --jobs=3
30
+ - name: RSpec testing
31
+ run: |
32
+ JRUBY_OPTS="--dev --debug" bundle exec rspec --color --format documentation
33
+ - name: Coveralls Parallel
34
+ uses: coverallsapp/github-action@1.1.3
35
+ with:
36
+ github-token: ${{ secrets.github_token }}
37
+ flag-name: run-${{ matrix.ruby-version }}
38
+ path-to-lcov: ./coverage/lcov/yandex360.lcov
39
+ parallel: true
40
+
41
+ coverage:
42
+ name: Coverage
43
+ needs: test
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - name: Coveralls Finished
47
+ uses: coverallsapp/github-action@1.1.3
48
+ with:
49
+ github-token: ${{ secrets.github_token }}
50
+ path-to-lcov: ${{ github.workspace }}/coverage/lcov.info
51
+ parallel-finished: true
data/.gitignore CHANGED
@@ -34,4 +34,7 @@ build/
34
34
  .rvmrc
35
35
 
36
36
  ## macos
37
- .DS_Store
37
+ .DS_Store
38
+ dev
39
+
40
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,5 @@
1
+ --tty
2
+ --color
3
+ --format documentation # progress
4
+ --backtrace
5
+ --require spec_helper
data/Gemfile CHANGED
@@ -3,12 +3,3 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
-
7
- # gem "addressable", "~> 2.3", ">= 2.3.7"
8
- # gem "minitest", ">= 5.0.5"
9
- # gem "rake"
10
- # gem "standard"
11
-
12
- # gem "rspec"
13
- # gem "vcr"
14
- # gem "webmock"
data/Gemfile.lock CHANGED
@@ -1,16 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yandex360 (0.0.1)
4
+ yandex360 (1.1.0)
5
5
  addressable (~> 2.3, >= 2.3.7)
6
6
  faraday (~> 1.7)
7
- faraday_middleware (~> 1.1)
8
7
 
9
8
  GEM
10
9
  remote: https://rubygems.org/
11
10
  specs:
12
11
  addressable (2.8.1)
13
12
  public_suffix (>= 2.0.2, < 6.0)
13
+ crack (0.4.5)
14
+ rexml
15
+ diff-lcs (1.5.0)
16
+ docile (1.4.0)
14
17
  faraday (1.10.2)
15
18
  faraday-em_http (~> 1.0)
16
19
  faraday-em_synchrony (~> 1.0)
@@ -34,16 +37,49 @@ GEM
34
37
  faraday-patron (1.0.0)
35
38
  faraday-rack (1.0.0)
36
39
  faraday-retry (1.0.3)
37
- faraday_middleware (1.2.0)
38
- faraday (~> 1.0)
40
+ hashdiff (1.0.1)
39
41
  multipart-post (2.2.3)
40
42
  public_suffix (5.0.0)
43
+ rake (12.3.3)
44
+ rexml (3.2.5)
45
+ rspec (3.11.0)
46
+ rspec-core (~> 3.11.0)
47
+ rspec-expectations (~> 3.11.0)
48
+ rspec-mocks (~> 3.11.0)
49
+ rspec-core (3.11.0)
50
+ rspec-support (~> 3.11.0)
51
+ rspec-expectations (3.11.1)
52
+ diff-lcs (>= 1.2.0, < 2.0)
53
+ rspec-support (~> 3.11.0)
54
+ rspec-mocks (3.11.1)
55
+ diff-lcs (>= 1.2.0, < 2.0)
56
+ rspec-support (~> 3.11.0)
57
+ rspec-support (3.11.1)
41
58
  ruby2_keywords (0.0.5)
59
+ simplecov (0.21.2)
60
+ docile (~> 1.1)
61
+ simplecov-html (~> 0.11)
62
+ simplecov_json_formatter (~> 0.1)
63
+ simplecov-html (0.12.3)
64
+ simplecov-lcov (0.7.0)
65
+ simplecov_json_formatter (0.1.4)
66
+ vcr (6.1.0)
67
+ webmock (3.18.1)
68
+ addressable (>= 2.8.0)
69
+ crack (>= 0.3.2)
70
+ hashdiff (>= 0.4.0, < 2.0.0)
42
71
 
43
72
  PLATFORMS
44
73
  x86_64-darwin-17
45
74
 
46
75
  DEPENDENCIES
76
+ bundler
77
+ rake (~> 12.3.3)
78
+ rspec (~> 3.0)
79
+ simplecov (~> 0.9)
80
+ simplecov-lcov (~> 0.7.0)
81
+ vcr (~> 6.1)
82
+ webmock (~> 3.18, >= 3.18.1)
47
83
  yandex360!
48
84
 
49
85
  BUNDLED WITH
data/README.md CHANGED
@@ -1 +1,72 @@
1
- # yandex360 - wip
1
+ # Yandex 360 - Ruby API client ([gem](https://rubygems.org/gems/yandex360))
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/yandex360.svg)](https://badge.fury.io/rb/yandex360)
4
+ ![Gem](https://img.shields.io/gem/dt/yandex360)
5
+ ![GitHub](https://img.shields.io/github/license/ruby-api-client/yandex360)
6
+ ## Installation
7
+
8
+ ### Gemfile
9
+
10
+ ```gemfile
11
+ gem 'yandex360', '~> 1.0', '>= 1.0.1'
12
+ ```
13
+
14
+ ### Install
15
+
16
+ ```sh
17
+ gem install yandex360
18
+ ```
19
+
20
+ ## Getting started
21
+
22
+ ```ruby
23
+ require "yandex360"
24
+
25
+ yandex360 = Yandex360::Client.new(token: "paste your access_token here")
26
+
27
+ users = yandex360.users.list(org_id: 1234567)
28
+ ```
29
+
30
+ ## Available methods
31
+
32
+ ```ruby
33
+ # Antispam
34
+ antispam.list(org_id:)
35
+ antispam.create(org_id, *strings)
36
+ antispam.delete(org_id:)
37
+
38
+ # Users
39
+ users.add(org_id:, dep_id:, **user_params)
40
+ users.add_alias(org_id:, user_id:, user_alias:)
41
+ users.update(org_id:, user_id:, **user_params)
42
+ users.info(org_id:, user_id:)
43
+ users.list(org_id:, page: 1, per_page: 10)
44
+ users.get2FA(org_id:, user_id:)
45
+ users.has2FA?(org_id:, user_id:)
46
+ users.delete_alias(org_id:, user_id:, user_alias:)
47
+
48
+ # Departments
49
+ departments.add_alias(org_id:, dep_id:, name:)
50
+ departments.update(org_id:, dep_id:, parent_id:, **params)
51
+ departments.info(org_id:, dep_id:)
52
+ departments.list(org_id:, page: 1, per_page: 10, parent_id: 0, order_by: "id")
53
+ departments.create(org_id:, name:, parent_id:, **params)
54
+ departments.delete_alias(org_id:, dep_id:, name:)
55
+ departments.delete(org_id:, dep_id:)
56
+
57
+ # Groups
58
+ groups.add_user(org_id:, group_id:, user_id:, type: "user")
59
+ groups.update(org_id:, group_id:, **user_params)
60
+ groups.params(org_id:, group_id:)
61
+ groups.list(org_id:, page: 1, per_page: 10)
62
+ groups.users(org_id:, group_id:)
63
+ groups.create(org_id:, name:, **group_params)
64
+ groups.delete(org_id:, group_id:)
65
+ groups.delete_user(org_id:, group_id:, type:, user_id:)
66
+ ```
67
+
68
+ ## TODO
69
+
70
+ - examples
71
+ - documentation
72
+ - ~~tests~~
@@ -13,13 +13,28 @@ module Yandex360
13
13
  @stubs = stubs # Test stubs for requests
14
14
  end
15
15
 
16
+ def antispam
17
+ AntispamResource.new(self)
18
+ end
19
+
20
+ def departments
21
+ DepartmentsResource.new(self)
22
+ end
23
+
24
+ def groups
25
+ GroupsResource.new(self)
26
+ end
27
+
28
+ def users
29
+ UsersResource.new(self)
30
+ end
31
+
16
32
  def connection
17
33
  @connection ||= Faraday.new(BASE_URL) do |conn|
18
34
  conn.request :authorization, :OAuth, token
19
35
  conn.request :json
20
36
  conn.request :url_encoded
21
37
 
22
- conn.response :dates
23
38
  conn.response :json, content_type: "application/json"
24
39
 
25
40
  conn.adapter adapter, @stubs
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class Collection
5
+ attr_reader :data, :items, :total
6
+
7
+ def self.from_response(response, key:, type:)
8
+ body = response.body
9
+ new(
10
+ data: body[key].map {|attrs| type.new(attrs) },
11
+ items: body["items"],
12
+ total: body["total"]
13
+ )
14
+ end
15
+
16
+ def initialize(data:, items:, total:)
17
+ @data = data
18
+ @items = items
19
+ @total = total
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class Error < StandardError
5
+ end
6
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ostruct"
4
+
5
+ module Yandex360
6
+ class Object < OpenStruct
7
+ def initialize(attributes)
8
+ super to_ostruct(attributes)
9
+ end
10
+
11
+ # Convert Array or Hash to OpenStruct
12
+ def to_ostruct(obj)
13
+ case obj
14
+ when Hash
15
+ # rubocop:disable Style/HashTransformValues
16
+ OpenStruct.new(obj.map {|key, val| [key, to_ostruct(val)] }.to_h)
17
+ # rubocop:enable Style/HashTransformValues
18
+ when Array
19
+ obj.map {|o| to_ostruct(o) }
20
+ else
21
+ obj
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class AllowList < Object; end
5
+ class Department < Object; end
6
+ class Group < Object; end
7
+ class User < Object; end
8
+ class UserList < Object; end
9
+
10
+ class DeletedDepartment < Object; end
11
+ class DeletedGroup < Object; end
12
+ class DeletedUser < Object; end
13
+ class DepartmentAlias < Object; end
14
+ class DepartmentList < Object; end
15
+ class DeletedDepartmentAlias < Object; end
16
+
17
+ class GroupList < Object; end
18
+
19
+ class Alias < Object; end
20
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class Resource
5
+ attr_reader :client
6
+
7
+ def initialize(client)
8
+ @client = client
9
+ end
10
+
11
+ private
12
+
13
+ def get(url, params: {}, headers: {})
14
+ handle_response client.connection.get(url, params, headers)
15
+ end
16
+
17
+ def post(url, body:, headers: {})
18
+ handle_response client.connection.post(url, body, headers)
19
+ end
20
+
21
+ def patch(url, body:, headers: {})
22
+ handle_response client.connection.patch(url, body, headers)
23
+ end
24
+
25
+ def put(url, body:, headers: {})
26
+ handle_response client.connection.put(url, body, headers)
27
+ end
28
+
29
+ def delete(url, params: {}, headers: {})
30
+ handle_response client.connection.delete(url, params, headers)
31
+ end
32
+ alias delete_request delete
33
+
34
+ # rubocop:disable Metrics/CyclomaticComplexity
35
+ # rubocop:disable Metrics/AbcSize
36
+ def handle_response(response)
37
+ case response.status
38
+ when 400
39
+ raise Error, "Your request was malformed. #{response.body['error']}"
40
+ when 401
41
+ raise Error, "You did not supply valid authentication credentials. #{response.body['error']}"
42
+ when 403
43
+ raise Error, "You are not allowed to perform that action. #{response.body['error']}"
44
+ when 404
45
+ raise Error, "No results were found for your request. #{response.body['error']}"
46
+ when 429
47
+ raise Error, "Your request exceeded the API rate limit. #{response.body['error']}"
48
+ when 500
49
+ raise Error, "We were unable to perform the request due to server-side problems. #{response.body['error']}"
50
+ when 503
51
+ raise Error, "You have been rate limited for sending more requests per second. #{response.body['error']}"
52
+ end
53
+
54
+ response
55
+ end
56
+ # rubocop:enable Metrics/AbcSize
57
+ # rubocop:enable Metrics/CyclomaticComplexity
58
+ end
59
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class AntispamResource < Resource
5
+ def list(org_id:)
6
+ AllowList.new get("/admin/v1/org/#{org_id}/mail/antispam/allowlist/ips").body
7
+ end
8
+
9
+ def create(org_id, *strings)
10
+ body = {allowList: strings}
11
+ AllowList.new post("admin/v1/org/#{org_id}/mail/antispam/allowlist/ips", body: body).body
12
+ end
13
+
14
+ def delete(org_id:)
15
+ delete_request("admin/v1/org/#{org_id}/mail/antispam/allowlist/ips")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class DepartmentsResource < Resource
5
+ def add_alias(org_id:, dep_id:, name:)
6
+ dep_alias = {alias: name}
7
+ DepartmentAlias.new post("directory/v1/org/#{org_id}/departments/#{dep_id}/aliases", body: dep_alias).body
8
+ end
9
+
10
+ def update(org_id:, dep_id:, parent_id:, **params)
11
+ department = {
12
+ orgId: org_id,
13
+ departmentId: dep_id,
14
+ parentId: parent_id
15
+ }
16
+ params.each {|param, value| department[param] = value }
17
+ Department.new patch("directory/v1/org/#{org_id}/departments/#{dep_id}", body: department).body
18
+ end
19
+
20
+ def info(org_id:, dep_id:)
21
+ Department.new get("directory/v1/org/#{org_id}/departments/#{dep_id}").body
22
+ end
23
+
24
+ def list(org_id:, page: 1, per_page: 10, parent_id: 0, order_by: "id")
25
+ resp = get("directory/v1/org/#{org_id}/departments \
26
+ ?page=#{page} \
27
+ &perPage=#{per_page} \
28
+ &parentId=#{parent_id} \
29
+ &orderBy=#{order_by}".gsub(/\s+/, "").strip)
30
+ Collection.from_response(resp, key: "departments", type: Department)
31
+ end
32
+
33
+ # parent_id:, name:, description: "", external_id: "", head_id: 0, label: ""
34
+ def create(org_id:, name:, parent_id:, **params)
35
+ department = {
36
+ parentId: parent_id,
37
+ name: name
38
+ }
39
+ params.each do |param, value|
40
+ department[param] = value
41
+ end
42
+
43
+ Department.new post("directory/v1/org/#{org_id}/departments", body: department).body
44
+ end
45
+
46
+ def delete_alias(org_id:, dep_id:, name:)
47
+ Object.new delete_request("directory/v1/org/#{org_id}/departments/#{dep_id}/aliases/#{name}").body
48
+ end
49
+
50
+ def delete(org_id:, dep_id:)
51
+ Object.new delete_request("directory/v1/org/#{org_id}/departments/#{dep_id}").body
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class GroupsResource < Resource
5
+ def add_user(org_id:, group_id:, user_id:, type: "user")
6
+ user = {
7
+ id: user_id,
8
+ type: type
9
+ }
10
+ Group.new post("directory/v1/org/#{org_id}/groups/#{group_id}/members", body: user).body
11
+ end
12
+
13
+ def update(org_id:, group_id:, **user_params)
14
+ user = {}
15
+ user_params.each {|param, value| user[param] = value }
16
+ Group.new patch("directory/v1/org/#{org_id}/groups/#{group_id}", body: user).body
17
+ end
18
+
19
+ def params(org_id:, group_id:)
20
+ Group.new get("directory/v1/org/#{org_id}/groups/#{group_id}").body
21
+ end
22
+
23
+ def list(org_id:, page: 1, per_page: 10)
24
+ resp = get("directory/v1/org/#{org_id}/groups?page=#{page}&perPage=#{per_page}")
25
+ Collection.from_response(resp, key: "groups", type: Group)
26
+ end
27
+
28
+ def users(org_id:, group_id:)
29
+ resp = get("directory/v1/org/#{org_id}/groups/#{group_id}/members")
30
+ Collection.from_response(resp, key: "users", type: User)
31
+ end
32
+
33
+ def create(org_id:, name:, **group_params)
34
+ group = {
35
+ name: name
36
+ }
37
+ group_params.each {|param, value| group[param] = value }
38
+ Group.new post("directory/v1/org/#{org_id}/groups", body: group).body
39
+ end
40
+
41
+ def delete(org_id:, group_id:)
42
+ Group.new delete_request("directory/v1/org/#{org_id}/groups/#{group_id}").body
43
+ end
44
+
45
+ def delete_user(org_id:, group_id:, type:, user_id:)
46
+ Object.new delete_request("directory/v1/org/#{org_id}/groups/#{group_id}/members/#{type}/#{user_id}").body
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class UsersResource < Resource
5
+ def add(org_id:, dep_id:, **user_params)
6
+ user = {
7
+ departmentId: dep_id
8
+ }
9
+ user_params.each {|param, value| user[param] = value }
10
+
11
+ User.new post("directory/v1/org/#{org_id}/users", body: user).body
12
+ end
13
+
14
+ def add_alias(org_id:, user_id:, user_alias:)
15
+ body = {alias: user_alias}
16
+ User.new post("directory/v1/org/#{org_id}/users/#{user_id}/aliases", body: body).body
17
+ end
18
+
19
+ def update(org_id:, user_id:, **user_params)
20
+ user = {}
21
+ user_params.each {|param, value| user[param] = value }
22
+
23
+ User.new patch("directory/v1/org/#{org_id}/users/#{user_id}", body: user).body
24
+ end
25
+
26
+ def info(org_id:, user_id:)
27
+ User.new get("directory/v1/org/#{org_id}/users/#{user_id}").body
28
+ end
29
+
30
+ def list(org_id:, page: 1, per_page: 10)
31
+ resp = get("directory/v1/org/#{org_id}/users?page=#{page}&perPage=#{per_page}")
32
+ Collection.from_response(resp, key: "users", type: User)
33
+ end
34
+
35
+ # rubocop:disable Naming/MethodName
36
+ def get2FA(org_id:, user_id:)
37
+ # TODO: add User2FA.new type
38
+ Object.new get("directory/v1/org/#{org_id}/users/#{user_id}/2fa").body
39
+ end
40
+
41
+ def has2FA?(org_id:, user_id:)
42
+ get2FA(org_id: org_id, user_id: user_id).has2fa
43
+ end
44
+ # rubocop:enable Naming/MethodName
45
+
46
+ def delete_alias(org_id:, user_id:, user_alias:)
47
+ Alias.new delete_request("directory/v1/org/#{org_id}/users/#{user_id}/aliases/#{user_alias}").body
48
+ end
49
+ end
50
+ end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yandex360
4
- major = 0
5
- minor = 0
6
- patch = 1
4
+ major = 1
5
+ minor = 1
6
+ patch = 0
7
7
  VERSION = "#{major}.#{minor}.#{patch}"
8
8
  end
data/lib/yandex360.rb CHANGED
@@ -2,9 +2,30 @@
2
2
 
3
3
  require "addressable/uri"
4
4
  require "faraday"
5
- require "faraday_middleware"
6
5
  require "yandex360/version"
7
6
 
8
- module Yadisk
7
+ module Yandex360
9
8
  autoload :Client, "yandex360/client"
9
+ autoload :Object, "yandex360/object"
10
+ autoload :Resource, "yandex360/resource"
11
+ autoload :Collection, "yandex360/collection"
12
+ autoload :Error, "yandex360/error"
13
+
14
+ autoload :AntispamResource, "yandex360/resources/antispam"
15
+ autoload :AllowList, "yandex360/objects/types"
16
+
17
+ autoload :DepartmentsResource, "yandex360/resources/departments"
18
+ autoload :Department, "yandex360/objects/types"
19
+ autoload :Departments, "yandex360/objects/types"
20
+ autoload :DepartmentList, "yandex360/objects/types"
21
+ autoload :DepartmentAlias, "yandex360/objects/types"
22
+ autoload :DeletedDepartment, "yandex360/objects/types"
23
+ autoload :DeletedDepartmentAlias, "yandex360/objects/types"
24
+
25
+ autoload :GroupsResource, "yandex360/resources/groups"
26
+ autoload :Group, "yandex360/objects/types"
27
+ autoload :GroupList, "yandex360/objects/types"
28
+
29
+ autoload :UsersResource, "yandex360/resources/users"
30
+ autoload :User, "yandex360/objects/types"
10
31
  end