Skip to content

Commit

Permalink
Add entities
Browse files Browse the repository at this point in the history
  • Loading branch information
Yegorov committed Feb 11, 2024
1 parent 510e2d0 commit f194fb6
Show file tree
Hide file tree
Showing 10 changed files with 363 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/yadisk.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ module Yadisk

require 'yadisk/client/response'

require 'yadisk/client/entities'
require 'yadisk/client/entities/v1'
require 'yadisk/client/entities/v1/base_entity'
require 'yadisk/client/entities/v1/error'
require 'yadisk/client/entities/v1/disk'


NAME = 'Yadisk'
end
8 changes: 8 additions & 0 deletions lib/yadisk/client/entities.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# frozen_string_literal: true

module Yadisk
class Client
module Entities
end
end
end
10 changes: 10 additions & 0 deletions lib/yadisk/client/entities/v1.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# frozen_string_literal: true

module Yadisk
class Client
module Entities
module V1
end
end
end
end
32 changes: 32 additions & 0 deletions lib/yadisk/client/entities/v1/base_entity.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# frozen_string_literal: true

require 'json'

module Yadisk
class Client
module Entities
module V1
class BaseEntity
attr_reader :response, :payload

def initialize(response, payload = nil)
@response = response
@payload = payload || response&.parsed_body
end

def to_s
simple_format
end

def inspect
to_s
end

def simple_format
JSON.pretty_generate(payload)
end
end
end
end
end
end
54 changes: 54 additions & 0 deletions lib/yadisk/client/entities/v1/disk.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# frozen_string_literal: true

require 'time'

module Yadisk
class Client
module Entities
module V1
class Disk < BaseEntity
# https://yandex.ru/dev/disk-api/doc/ru/reference/response-objects#disk

def paid_max_file_size = payload&.dig('paid_max_file_size')
def max_file_size = payload&.dig('max_file_size')
def total_space = payload&.dig('total_space')
def trash_size = payload&.dig('trash_size')
def used_space = payload&.dig('used_space')
def is_paid = payload&.dig('is_paid')
def reg_time = payload&.dig('reg_time').then { |v| v ? Time.parse(v) : nil }
def system_folders = payload&.dig('system_folders').then { |p| p ? SystemFolders.new(nil, p) : nil }
def user = payload&.dig('user').then { |p| p ? User.new(nil, p) : nil }
def unlimited_autoupload_enabled = payload&.dig('unlimited_autoupload_enabled')
def revision = payload&.dig('revision')

class SystemFolders < BaseEntity
def odnoklassniki = payload&.dig('odnoklassniki')
def google = payload&.dig('google')
def instagram = payload&.dig('instagram')
def vkontakte = payload&.dig('vkontakte')
def attach = payload&.dig('attach')
def mailru = payload&.dig('mailru')
def downloads = payload&.dig('downloads')
def applications = payload&.dig('applications')
def facebook = payload&.dig('facebook')
def social = payload&.dig('social')
def messenger = payload&.dig('messenger')
def calendar = payload&.dig('calendar')
def photostream = payload&.dig('photostream')
def screenshots = payload&.dig('screenshots')
def scans = payload&.dig('scans')
end

class User < BaseEntity
def reg_time = payload&.dig('reg_time').then { |v| v ? Time.parse(v) : nil }
def display_name = payload&.dig('display_name')
def uid = payload&.dig('uid')
def country = payload&.dig('country')
def is_child = payload&.dig('is_child')
def login = payload&.dig('login')
end
end
end
end
end
end
16 changes: 16 additions & 0 deletions lib/yadisk/client/entities/v1/error.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

module Yadisk
class Client
module Entities
module V1
class Error < BaseEntity
# https://yandex.ru/dev/disk-api/doc/ru/reference/response-objects#error
def message = payload&.dig('message')
def description = payload&.dig('description')
def error = payload&.dig('description')
end
end
end
end
end
17 changes: 17 additions & 0 deletions lib/yadisk/client/entities/v1/link.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# frozen_string_literal: true

module Yadisk
class Client
module Entities
module V1
class Link < BaseEntity
# https://yandex.ru/dev/disk-api/doc/ru/reference/response-objects#link

def href = payload&.dig('href')
def method = payload&.dig('method')
def templated = payload&.dig('templated')
end
end
end
end
end
15 changes: 15 additions & 0 deletions lib/yadisk/client/entities/v1/operation.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# frozen_string_literal: true

module Yadisk
class Client
module Entities
module V1
class Operation < BaseEntity
# https://yandex.ru/dev/disk-api/doc/ru/reference/response-objects#operation

def status = payload&.dig('status')
end
end
end
end
end
161 changes: 161 additions & 0 deletions lib/yadisk/client/entities/v1/resource.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# frozen_string_literal: true

module Yadisk
class Client
module Entities
module V1
# @see https://yandex.ru/dev/disk-api/doc/ru/reference/response-objects#resource
# @see https://yandex.ru/dev/disk/poligon/
class Resource < BaseEntity
# Статус проверки антивирусом
# @return [Hash, nil]
def antivirus_status = payload&.dig('antivirus_status')

# Идентификатор ресурса
# @return [String, nil]
def resource_id = payload&.dig('resource_id')

# @return [ShareInfo, nil]
def share = payload&.dig('share').then { |p| p ? ShareInfo.new(nil, p) : nil }

# Ключ опубликованного ресурса
# @return [String, nil]
def public_key = payload&.dig('public_key')

# @return [ResourceList, nil]
def _embedded = payload&.dig('_embedded').then { |p| p ? ResourceList.new(nil, p) : nil }

# @return [Exif, nil]
def exif = payload&.dig('exif').then { |p| p ? Exif.new(nil, p) : nil }

# Дата создания фото или видео файла
# @return [Time, nil]
def photoslice_time = payload&.dig('photoslice_time').then { |v| v ? Time.parse(v) : nil }

# Имя
# @return [String, nil]
def name = payload&.dig('name')

# Дата создания
# @return [Time, nil]
def created = payload&.dig('created').then { |v| v ? Time.parse(v) : nil }

# Пользовательские атрибуты ресурса
# @return [Hash, nil]
def custom_properties = payload&.dig('custom_properties')

# Публичный URL
# @return [String, nil]
def public_url = payload&.dig('public_url')

# URL для скачивания файла
# @return [String, nil]
def file = payload&.dig('file')

# Путь к ресурсу до перемещения в Корзину.
# Включается в ответ только для запроса метаинформации о ресурсе в Корзине.
# @return [String, nil]
def origin_path = payload&.dig('origin_path')

# Дата изменения>
# @return [Time, nil]
def modified = payload&.dig('modified').then { |v| v ? Time.parse(v) : nil }

# Путь к ресурсу
# @return [String, nil]
def path = payload&.dig('path')

# MD5-хэш
# @return [String, nil]
def md5 = payload&.dig('md5')

# SHA256-хэш
# @return [String, nil]
def sha256 = payload&.dig('sha256')

# Тип
# @return [String]
def type = payload&.dig('type')

# MIME-тип файла
# @return [String, nil]
def mime_type = payload&.dig('mime_type')

# Размер файла
# @return [Integer, nil]
def size = payload&.dig('size')

# Определённый Диском тип файла
# @return [String, nil]
def media_type = payload&.dig('media_type')

# URL превью файла
# @return [String, nil]
def preview = payload&.dig('preview')

# Ревизия Диска в которой этот ресурс был изменён последний раз
# @return [Integer, nil]
def revision = payload&.dig('revision')

# Все размеры превью с URL для скачивания
# @return [Array<Preview>, nil]
def sizes = payload&.dig('sizes')&.map { |p| Preview.new(nil, p) }

# @return [CommentIds, nil]
def comment_ids = payload&.dig('comment_ids').then { |p| p ? CommentIds.new(nil, p) : nil }

class ShareInfo < BaseEntity
# Признак того, что папка является корневой в группе
# @return [Boolean, nil]
def is_root = payload&.dig('is_root')

# Признак, что текущий пользователь является владельцем общей папки
# @return [Boolean, nil]
def is_owned = payload&.dig('is_owned')

# Права доступа
# @return [String, nil]
def rights = payload&.dig('rights')

alias_method :root?, :is_root
alias_method :owned?, :is_owned
end

class Exif < BaseEntity
# Дата съёмки
# @return [Time, nil]
def date_time = payload&.dig('date_time').then { |v| v ? Time.parse(v) : nil }

# Координата съемки (долгота)
# @return [Hash, nil]
def gps_longitude = payload&.dig('gps_longitude')

# Координата съемки (широта)
# @return [Hash, nil]
def gps_latitude = payload&.dig('gps_latitude')
end

class Preview < BaseEntity
# Ссылка на скачивание превью
# @return [String, nil]
def url = payload&.dig('url')

# Название (размер) превью
# @return [String, nil]
def name = payload&.dig('name')
end

class CommentIds < BaseEntity
# Идентификатор комментариев для приватных ресурсов
# @return [String, nil]
def private_resource = payload&.dig('private_resource')

# Идентификатор комментариев для публичных ресурсов
# @return [String, nil]
def public_resource = payload&.dig('public_resource')
end
end
end
end
end
end
44 changes: 44 additions & 0 deletions lib/yadisk/client/entities/v1/resource_list.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# frozen_string_literal: true

module Yadisk
class Client
module Entities
module V1
# @see https://yandex.ru/dev/disk-api/doc/ru/reference/response-objects#resourcelist
# @see https://yandex.ru/dev/disk/poligon/
class ResourceList < BaseEntity
# Поле, по которому отсортирован список
# @return [String, nil]
def sort = payload&.dig('sort')

# Ключ опубликованной папки, в которой содержатся ресурсы из данного списка.
# Включается только в ответ на запрос метаинформации о публичной папке.
# @return [String, nil]
def public_key = payload&.dig('public_key')

# Элементы списка / Массив ресурсов (Resource), содержащихся в папке.
# Вне зависимости от запрошенной сортировки, ресурсы в массиве упорядочены по их виду:
# сначала перечисляются все вложенные папки, затем — вложенные файлы.
# @return [Array<Resource>, nil]
def items = payload&.dig('items')&.map { |p| Resource.new(nil, p) }

# Количество элементов на странице
# @return [Integer, nil]
def limit = payload&.dig('limit')

# Смещение от начала списка
# @return [Integer, nil]
def offset = payload&.dig('offset')

# Путь к ресурсу, для которого построен список
# @return [String]
def path = payload&.dig('path')

# Общее количество элементов в списке
# @return [Integer, nil]
def total = payload&.dig('total')
end
end
end
end
end

0 comments on commit f194fb6

Please sign in to comment.