yandex360 0.0.1 → 1.0.1

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: 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