yandex360 0.0.1 → 1.0.1

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: b11c6de45c29a60108327582acc5bb36035f265d2efa3dcef034149c21cda2dc
4
- data.tar.gz: de47f74b9d82709188a8b79d0bf5105b27e45496dbc0f2b2442b739bc02554c8
3
+ metadata.gz: 4a5a0d2ac0b76df152ea5246600c6c01469a7f5716970f2db2e10af22d5ca322
4
+ data.tar.gz: 3d0b28a3871390e29479f34b56eaa7637c3a0a6e98f25fc57982e9e6eaf5f540
5
5
  SHA512:
6
- metadata.gz: 3933e9edbb6c71d5babd27fdeb46aba720d5f7dc94773fe6843dcf81e037f8feb01af16ee28a25a3494edc56968fbe9afcd73cfe764c6c3c71eb8a7b6d8abf8b
7
- data.tar.gz: 4c3e0d3753c47bf4278fa0b013fbc174ee800bf834dbdbb99071cbbcea3e91d96cdb0de4d8e9d01ff2b430607b6f2f315ac09e8b8117e11d2f60e390081bdd6f
6
+ metadata.gz: 05a2ba164cb6e206081d718505eb62df6c1ef032815e7f1b7d76d809a64026bcd2c91faeeccb0af78a77d4f2140af030d455b10f2447bada3e910a86b86565e5
7
+ data.tar.gz: b03c6852ea6c5b5f87d869412e834a12156422b3dd4adcb36c75c5f534df2adfb3565a29869dfd3cbb71c4a5281641a0cf560711d29abe33a12542244c9572cc
data/.gitignore CHANGED
@@ -34,4 +34,5 @@ build/
34
34
  .rvmrc
35
35
 
36
36
  ## macos
37
- .DS_Store
37
+ .DS_Store
38
+ dev
data/Gemfile.lock CHANGED
@@ -1,10 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yandex360 (0.0.1)
4
+ yandex360 (1.0.1)
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/
@@ -34,8 +33,6 @@ GEM
34
33
  faraday-patron (1.0.0)
35
34
  faraday-rack (1.0.0)
36
35
  faraday-retry (1.0.3)
37
- faraday_middleware (1.2.0)
38
- faraday (~> 1.0)
39
36
  multipart-post (2.2.3)
40
37
  public_suffix (5.0.0)
41
38
  ruby2_keywords (0.0.5)
data/README.md CHANGED
@@ -1 +1,7 @@
1
1
  # yandex360 - wip
2
+
3
+ ## TODO
4
+
5
+ - reamde
6
+ - documentation
7
+ - 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,52 @@
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:, **params)
11
+ department = {}
12
+ params.each {|param, value| department[param] = value }
13
+ Department.new patch("directory/v1/org/#{org_id}/departments/#{dep_id}", body: department).body
14
+ end
15
+
16
+ def info(org_id:, dep_id:)
17
+ Department.new get("directory/v1/org/#{org_id}/departments/#{dep_id}").body
18
+ end
19
+
20
+ def list(org_id:, page: 1, per_page: 10, parent_id: 0, order_by: "id")
21
+ resp = get(%{
22
+ directory/v1/org/#{org_id}/departments\
23
+ ?page=#{page}\
24
+ &perPage=#{per_page}\
25
+ &parentId=#{parent_id}\
26
+ &orderBy=#{order_by}")
27
+ }.gsub(/\s+/, "").strip)
28
+ Collection.from_response(resp, key: "departments", type: GroupList)
29
+ end
30
+
31
+ # parent_id:, name:, description: "", external_id: "", head_id: 0, label: ""
32
+ def create(org_id:, name:, parent_id:, **params)
33
+ department = {
34
+ parentId: parent_id,
35
+ name: name
36
+ }
37
+ params.each do |param, value|
38
+ department[param] = value
39
+ end
40
+
41
+ Department.new post("directory/v1/org/#{org_id}/departments", body: department).body
42
+ end
43
+
44
+ def delete_alias(org_id:, dep_id:, name:)
45
+ Object.new delete_request("directory/v1/org/#{org_id}/departments/#{dep_id}/aliases/#{name}").body
46
+ end
47
+
48
+ def delete(org_id:, dep_id:)
49
+ Object.new delete_request("directory/v1/org/#{org_id}/departments/#{dep_id}").body
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yandex360
4
+ class GroupsResource < Resource
5
+ def add_user(org_id:, group_id:, id:, type: "user")
6
+ user = {
7
+ id: 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: Object)
26
+ end
27
+
28
+ def users(org_id:, group_id:)
29
+ # TODO: GroupUserList.new type
30
+ Object.new get("directory/v1/org/#{org_id}/groups/#{group_id}/members").body
31
+ end
32
+
33
+ def create(org_id:, **group_params)
34
+ group = {}
35
+ group_params.each {|param, value| group[param] = value }
36
+ Group.new post("directory/v1/org/#{org_id}/groups", body: group).body
37
+ end
38
+
39
+ def delete(org_id:, group_id:)
40
+ delete_request("directory/v1/org/#{org_id}/groups/#{group_id}")
41
+ end
42
+
43
+ def delete_user(org_id:, group_id:, type:, id:)
44
+ Object.new delete_request("directory/v1/org/#{org_id}/groups/#{group_id}/members/#{type}/#{id}").body
45
+ end
46
+ end
47
+ 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: UserList)
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}")
48
+ end
49
+ end
50
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yandex360
4
- major = 0
4
+ major = 1
5
5
  minor = 0
6
6
  patch = 1
7
7
  VERSION = "#{major}.#{minor}.#{patch}"
data/lib/yandex360.rb CHANGED
@@ -2,9 +2,29 @@
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 :Departments, "yandex360/objects/types"
19
+ autoload :DepartmentList, "yandex360/objects/types"
20
+ autoload :DepartmentAlias, "yandex360/objects/types"
21
+ autoload :DeletedDepartment, "yandex360/objects/types"
22
+ autoload :DeletedDepartmentAlias, "yandex360/objects/types"
23
+
24
+ autoload :GroupsResource, "yandex360/resources/groups"
25
+ autoload :Group, "yandex360/objects/types"
26
+ autoload :GroupList, "yandex360/objects/types"
27
+
28
+ autoload :UsersResource, "yandex360/resources/users"
29
+ autoload :UserList, "yandex360/objects/types"
10
30
  end
data/yandex360.gemspec CHANGED
@@ -24,5 +24,4 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.add_dependency "addressable", "~> 2.3", ">= 2.3.7"
26
26
  s.add_dependency "faraday", "~> 1.7"
27
- s.add_dependency "faraday_middleware", "~> 1.1"
28
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yandex360
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Brin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-05 00:00:00.000000000 Z
11
+ date: 2022-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -44,20 +44,6 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '1.7'
47
- - !ruby/object:Gem::Dependency
48
- name: faraday_middleware
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '1.1'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '1.1'
61
47
  description: WIP - Yandex 360 API wrapper written in Ruby
62
48
  email: ilya@codeplay.ru
63
49
  executables: []
@@ -73,6 +59,15 @@ files:
73
59
  - Rakefile
74
60
  - lib/yandex360.rb
75
61
  - lib/yandex360/client.rb
62
+ - lib/yandex360/collection.rb
63
+ - lib/yandex360/error.rb
64
+ - lib/yandex360/object.rb
65
+ - lib/yandex360/objects/types.rb
66
+ - lib/yandex360/resource.rb
67
+ - lib/yandex360/resources/antispam.rb
68
+ - lib/yandex360/resources/departments.rb
69
+ - lib/yandex360/resources/groups.rb
70
+ - lib/yandex360/resources/users.rb
76
71
  - lib/yandex360/version.rb
77
72
  - yandex360.gemspec
78
73
  homepage: https://github.com/ruby-api-client/yandex360