anilibria-api-ruby 1.0.2 → 1.0.5

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: c1600677f7901b71024caf80adf4e17463fda64c344ddcac962d55305318998c
4
- data.tar.gz: b787db999dac37e6d812abcaab9159e0ee21814ef036e8d1ae1845745a9a8a7f
3
+ metadata.gz: b3e1395dc7fa5e9867cf3b9419eb0692a8e09a82b024bf4b35208acd132daab1
4
+ data.tar.gz: 99193ab067172c7bd3ac16f90aa12887ebfafc9c655eddf60b5dde4411e99f0d
5
5
  SHA512:
6
- metadata.gz: 062ab13c47527afc37ceae05ed450b119bb4bae333d5c979c2cf1d95aca127aca94b92b2e453811fd95fd64da8ba66692ec203637d678b00a9e95aa78113e4f8
7
- data.tar.gz: dd4ad7f81fe6487dedb6cd6a9057cc440082abddb9240134a942af1bbd24aec7492f1a3772024289e87caf2b62af8feb036cf282f6a423f3816b8ab83a94f77d
6
+ metadata.gz: 67e552501fcd5d2a5603cb8ce10d562028f33e70172e480315db9343cf26c5e9c7a591ec162f90d3eb9d95c3cc2ba24756159bb809ee9872c673a65de27cadeb
7
+ data.tar.gz: 02db06b36eebbdf244a556ca0823d795574f511a925af9947302205611838a9190b9ab2331031ad9d3bf963f25bfd10bbb6dd1088c8c761e0dbc33cbdb8cbd23
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- anilibria-api-ruby (1.0.2)
4
+ anilibria-api-ruby (1.0.5)
5
5
  dry-struct (~> 1.4)
6
6
  faraday (~> 2)
7
7
 
@@ -10,19 +10,19 @@ module Anilibria
10
10
  api_method :get_random_title, returns: Types::Title
11
11
  api_method :get_youtube, 'getYouTube', returns: DryTypes::Array.of(Types::YouTube)
12
12
  api_method :get_feed, returns: Types::Feed
13
- api_method :get_years, returns: DryTypes::Array.of(DryTypes::Strict::Integer)
14
- api_method :get_genres, returns: DryTypes::Array.of(DryTypes::Strict::String)
15
- api_method :get_caching_nodes, returns: DryTypes::Array.of(DryTypes::Strict::String)
13
+ api_method :get_years, returns: DryTypes::Array.of(DryTypes::Integer)
14
+ api_method :get_genres, returns: DryTypes::Array.of(DryTypes::String)
15
+ api_method :get_caching_nodes, returns: DryTypes::Array.of(DryTypes::String)
16
16
  api_method :get_team, returns: DryTypes.Constructor(Types::Team) { |team| team[:team] }
17
- api_method :get_rss, 'getRSS', returns: DryTypes::Strict::String | DryTypes::Strict::Hash
17
+ api_method :get_rss, 'getRSS', returns: DryTypes::String | DryTypes::Hash
18
18
  api_method :get_seed_stats, returns: DryTypes::Array.of(Types::SeedStats)
19
19
  api_method :search_titles, returns: DryTypes::Array.of(Types::Title)
20
20
  api_method :advanced_search, returns: DryTypes::Array.of(Types::Title)
21
21
 
22
22
  # Methods that require authorization
23
23
  api_method :get_favorites, returns: DryTypes::Array.of(Types::Title)
24
- api_method :add_favorite, http_method: :put, returns: DryTypes::Success
25
- api_method :del_favorite, http_method: :delete, returns: DryTypes::Success
24
+ api_method :add_favorite, http_method: :put, returns: Types::T::Success
25
+ api_method :del_favorite, http_method: :delete, returns: Types::T::Success
26
26
  end
27
27
  end
28
28
  end
@@ -63,7 +63,7 @@ module Anilibria
63
63
  def auth(mail, passwd)
64
64
  response = auth_response(mail, passwd)
65
65
 
66
- return unless response[:key] == 'success'
66
+ return unless auth_successful?(response)
67
67
 
68
68
  response[:sessionId]
69
69
  end
@@ -71,7 +71,12 @@ module Anilibria
71
71
  def auth!(mail, passwd)
72
72
  response = auth_response(mail, passwd)
73
73
 
74
- raise Exceptions::AuthError, response unless response[:key] == 'success'
74
+ unless auth_successful?(response)
75
+ raise(
76
+ Exceptions::AuthError.new(response),
77
+ 'Failed authorization attempt'
78
+ )
79
+ end
75
80
 
76
81
  response[:sessionId]
77
82
  end
@@ -82,23 +87,34 @@ module Anilibria
82
87
 
83
88
  private
84
89
 
90
+ def check_response!(response)
91
+ return if response.status == 200
92
+
93
+ if !response.body.respond_to?(:to_hash) ||
94
+ !response.body[:error].respond_to?(:to_hash)
95
+ raise Exceptions::ResponseError.new(
96
+ 'Unexpected response from API', response
97
+ )
98
+ end
99
+
100
+ raise Exceptions::ApiError.new(response), response.body.dig(:error, :message)
101
+ end
102
+
85
103
  def auth_response(mail, passwd)
86
104
  response = connection.post(
87
105
  AUTH_ENDPOINT,
88
106
  { mail: mail, passwd: passwd }
89
107
  )
90
108
 
91
- JSON.parse(response.body, { symbolize_names: true })
92
- end
93
-
94
- def check_response!(response)
95
- return if response.status == 200
96
-
97
- if !response.body.respond_to?(:to_hash) || !response.body.key?(:error)
98
- raise Exceptions::ResponseError.new('Unexpected response from API', response)
109
+ begin
110
+ JSON.parse(response.body, { symbolize_names: true })
111
+ rescue JSON::ParserError
112
+ {}
99
113
  end
114
+ end
100
115
 
101
- raise Exceptions::ApiError, response
116
+ def auth_successful?(response)
117
+ response[:key] == 'success' && response.key?(:sessionId)
102
118
  end
103
119
  end
104
120
  end
@@ -7,7 +7,8 @@ module Anilibria
7
7
  def initialize(response)
8
8
  error = response.body[:error].to_h
9
9
  @code = error[:code]
10
- super("#{error[:code]} #{error[:message]}", response)
10
+
11
+ super(error[:message], response)
11
12
  end
12
13
  end
13
14
  end
@@ -2,14 +2,25 @@ module Anilibria
2
2
  module Api
3
3
  module Exceptions
4
4
  class AuthError < Base
5
- attr_reader :err, :key, :mes
5
+ attr_reader :data
6
+
7
+ def initialize(data = {})
8
+ @data = data
6
9
 
7
- def initialize(response_body)
8
- @err = response_body[:err]
9
- @key = response_body[:key]
10
- @mes = response_body[:mes]
11
10
  super("#{mes} (#{key})")
12
11
  end
12
+
13
+ def err
14
+ data[:err]
15
+ end
16
+
17
+ def mes
18
+ data[:mes]
19
+ end
20
+
21
+ def key
22
+ data[:key]
23
+ end
13
24
  end
14
25
  end
15
26
  end
@@ -4,9 +4,10 @@ module Anilibria
4
4
  class ResponseError < Base
5
5
  attr_reader :response
6
6
 
7
- def initialize(message, response)
7
+ def initialize(msg = nil, response = nil)
8
8
  @response = response
9
- super(message)
9
+
10
+ super(msg)
10
11
  end
11
12
  end
12
13
  end
@@ -2,7 +2,6 @@ module Anilibria
2
2
  module Api
3
3
  module Types
4
4
  class Base < Dry::Struct
5
- # schema schema.strict
6
5
  end
7
6
  end
8
7
  end
@@ -3,9 +3,6 @@ module Anilibria
3
3
  module Types
4
4
  module DryTypes
5
5
  include Dry.Types()
6
-
7
- Timestamp = Constructor(::Time, ::Time.method(:at))
8
- Success = Constructor(Bool) { |value| value[:success] }
9
6
  end
10
7
  end
11
8
  end
@@ -2,7 +2,7 @@ module Anilibria
2
2
  module Api
3
3
  module Types
4
4
  class Schedule < Base
5
- attribute :day, DryTypes::Strict::Integer
5
+ attribute :day, T::Integer
6
6
  attribute :list, DryTypes::Array.of(Title)
7
7
  end
8
8
  end
@@ -2,9 +2,9 @@ module Anilibria
2
2
  module Api
3
3
  module Types
4
4
  class SeedStats < Base
5
- attribute? :downloaded, DryTypes::Strict::Integer
6
- attribute? :uploaded, DryTypes::Strict::Integer
7
- attribute? :user, DryTypes::Strict::String
5
+ attribute? :downloaded, T::Integer
6
+ attribute? :uploaded, T::Integer
7
+ attribute? :user, T::String
8
8
  end
9
9
  end
10
10
  end
@@ -0,0 +1,15 @@
1
+ module Anilibria
2
+ module Api
3
+ module Types
4
+ module T
5
+ String = DryTypes::String.optional
6
+ Integer = DryTypes::Integer.optional
7
+ Bool = DryTypes::Bool.optional
8
+ Nil = DryTypes::Nil.optional
9
+
10
+ Timestamp = DryTypes.Constructor(Time, Time.method(:at)).optional
11
+ Success = DryTypes.Constructor(Bool) { |value| value[:success] }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -3,7 +3,7 @@ module Anilibria
3
3
  module Types
4
4
  class Team < Base
5
5
  %i[voice translator editing decor timing].each do |t|
6
- attribute? t, DryTypes::Array.of(DryTypes::Strict::String)
6
+ attribute? t, DryTypes::Array.of(DryTypes::String)
7
7
  end
8
8
  end
9
9
  end
@@ -3,25 +3,36 @@ module Anilibria
3
3
  module Types
4
4
  class Title < Base
5
5
  class Series < Base
6
- attribute? :first, DryTypes::Integer.optional
7
- attribute? :last, DryTypes::Integer.optional
8
- attribute? :string, DryTypes::String.optional
6
+ attribute? :first, T::Integer
7
+ attribute? :last, T::Integer
8
+ attribute? :string, T::String
9
+ end
10
+
11
+ class Posters < Base
12
+ class Poster < Base
13
+ attribute? :url, T::String
14
+ attribute? :raw_base64_file, T::String
15
+ end
16
+
17
+ %i[small medium original].each do |size|
18
+ attribute? size, Poster
19
+ end
9
20
  end
10
21
 
11
22
  class Player < Base
12
23
  class Playlist < Base
13
- attribute? :serie, DryTypes::Strict::Integer
14
- attribute? :created_timestamp, DryTypes::Timestamp
24
+ attribute? :serie, T::Integer
25
+ attribute? :created_timestamp, T::Timestamp
15
26
 
16
- attribute? :hls do
17
- attribute? :fhd, DryTypes::String.optional
18
- attribute? :hd, DryTypes::String.optional
19
- attribute? :sd, DryTypes::String.optional
27
+ attribute? :hls, Base do
28
+ attribute? :fhd, T::String
29
+ attribute? :hd, T::String
30
+ attribute? :sd, T::String
20
31
  end
21
32
  end
22
33
 
23
- attribute? :alternative_player, DryTypes::String.optional
24
- attribute? :host, DryTypes::String.optional
34
+ attribute? :alternative_player, T::String
35
+ attribute? :host, T::String
25
36
  attribute? :series, Title::Series
26
37
 
27
38
  attribute?(
@@ -36,101 +47,92 @@ module Anilibria
36
47
  class Torrent < Base
37
48
  class Metadata < Base
38
49
  class FilesList < Base
39
- attribute? :file, DryTypes::Strict::String
40
- attribute? :size, DryTypes::Strict::Integer
41
- attribute? :offset, DryTypes::Strict::Integer
50
+ attribute? :file, T::String
51
+ attribute? :size, T::Integer
52
+ attribute? :offset, T::Integer
42
53
  end
43
54
 
44
55
  undef hash
45
56
 
46
- attribute? :hash, DryTypes::Strict::String
47
- attribute? :name, DryTypes::Strict::String
48
- attribute? :announce, DryTypes::Array.of(DryTypes::Strict::String)
49
- attribute? :created_timestamp, DryTypes::Timestamp
50
-
57
+ attribute? :hash, T::String
58
+ attribute? :name, T::String
59
+ attribute? :announce, DryTypes::Array.of(T::String)
60
+ attribute? :created_timestamp, T::Timestamp
51
61
  attribute? :files_list, DryTypes::Array.of(FilesList)
52
62
  end
53
63
 
54
64
  undef hash
55
65
 
56
- attribute? :torrent_id, DryTypes::Strict::Integer
66
+ attribute? :torrent_id, T::Integer
57
67
  attribute? :series, Title::Series
58
68
 
59
- attribute? :quality do
60
- attribute? :string, DryTypes::Strict::String
61
- attribute? :type, DryTypes::Strict::String
62
- attribute? :resolution, DryTypes::Strict::Integer
63
- attribute? :encoder, DryTypes::Strict::String
64
- attribute? :lq_audio, DryTypes::Strict::Bool
69
+ attribute? :quality, Base do
70
+ attribute? :string, T::String
71
+ attribute? :type, T::String
72
+ attribute? :resolution, T::Integer
73
+ attribute? :encoder, T::String
74
+ attribute? :lq_audio, T::Bool
65
75
  end
66
76
 
67
77
  %i[leechers seeders downloads total_size].each do |i|
68
- attribute? i, DryTypes::Strict::Integer
78
+ attribute? i, T::Integer
69
79
  end
70
80
 
71
- attribute? :url, DryTypes::Strict::String
72
- attribute? :uploaded_timestamp, DryTypes::Timestamp
73
- attribute? :hash, DryTypes::Strict::String
74
- attribute? :metadata, DryTypes::Strict::Nil | Metadata
75
- attribute? :raw_base64_file, DryTypes::String.optional
81
+ attribute? :url, T::String
82
+ attribute? :uploaded_timestamp, T::Timestamp
83
+ attribute? :hash, T::String
84
+ attribute? :metadata, Metadata.optional
85
+ attribute? :raw_base64_file, T::String
76
86
  end
77
87
 
78
88
  attribute? :series, Title::Series
79
89
  attribute? :list, DryTypes::Array.of(Torrent)
80
90
  end
81
91
 
82
- attribute? :id, DryTypes::Strict::Integer
83
- attribute? :code, DryTypes::Strict::String
92
+ attribute? :id, T::Integer
93
+ attribute? :code, T::String
84
94
 
85
- attribute? :names do
86
- attribute? :ru, DryTypes::String.optional
87
- attribute? :en, DryTypes::String.optional
88
- attribute? :alternative, DryTypes::String.optional
95
+ attribute? :names, Base do
96
+ attribute? :ru, T::String
97
+ attribute? :en, T::String
98
+ attribute? :alternative, T::String
89
99
  end
90
100
 
91
- attribute? :announce, DryTypes::String.optional
92
-
93
- attribute? :status do
94
- attribute? :string, DryTypes::Strict::String
95
- attribute? :code, DryTypes::Strict::Integer
96
- end
101
+ attribute? :announce, T::String
97
102
 
98
- attribute? :posters do
99
- %i[small medium original].each do |poster|
100
- attribute? poster do
101
- attribute? :url, DryTypes::String.optional
102
- attribute? :raw_base64_file, DryTypes::String.optional
103
- end
104
- end
103
+ attribute? :status, Base do
104
+ attribute? :string, T::String
105
+ attribute? :code, T::Integer
105
106
  end
106
107
 
107
- attribute? :updated, DryTypes::Timestamp.optional
108
- attribute? :last_change, DryTypes::Timestamp.optional
108
+ attribute? :posters, Posters
109
+ attribute? :updated, T::Timestamp
110
+ attribute? :last_change, T::Timestamp
109
111
 
110
- attribute? :type do
111
- attribute? :full_string, DryTypes::String.optional
112
- attribute? :string, DryTypes::String.optional
113
- attribute? :length, DryTypes::String.optional
114
- attribute? :series, DryTypes::Integer.optional
115
- attribute? :code, DryTypes::Integer.optional
112
+ attribute? :type, Base do
113
+ attribute? :full_string, T::String
114
+ attribute? :string, T::String
115
+ attribute? :length, T::Integer
116
+ attribute? :series, T::Integer
117
+ attribute? :code, T::Integer
116
118
  end
117
119
 
118
- attribute? :genres, DryTypes::Array.of(DryTypes::Strict::String)
120
+ attribute? :genres, DryTypes::Array.of(T::String)
119
121
  attribute? :team, Types::Team
120
122
 
121
- attribute? :season do
122
- attribute? :string, DryTypes::String.optional
123
- attribute? :code, DryTypes::Integer.optional
124
- attribute? :year, DryTypes::Integer.optional
125
- attribute? :week_day, DryTypes::Integer.optional
123
+ attribute? :season, Base do
124
+ attribute? :string, T::String
125
+ attribute? :code, T::Integer
126
+ attribute? :year, T::Integer
127
+ attribute? :week_day, T::Integer
126
128
  end
127
129
 
128
- attribute? :description, DryTypes::String.optional
129
- attribute? :in_favorites, DryTypes::Integer.optional
130
+ attribute? :description, T::String
131
+ attribute? :in_favorites, T::Integer
130
132
 
131
- attribute? :blocked do
132
- attribute? :blocked, DryTypes::Strict::Bool
133
- attribute? :bakanim, DryTypes::Strict::Bool
133
+ attribute? :blocked, Base do
134
+ attribute? :blocked, T::Bool
135
+ attribute? :bakanim, T::Bool
134
136
  end
135
137
 
136
138
  attribute? :player, Player
@@ -2,12 +2,12 @@ module Anilibria
2
2
  module Api
3
3
  module Types
4
4
  class YouTube < Base
5
- attribute? :id, DryTypes::Strict::Integer
6
- attribute? :image, DryTypes::Strict::String
7
- attribute? :youtube_id, DryTypes::Strict::String
8
- attribute? :comments, DryTypes::Strict::Integer
9
- attribute? :views, DryTypes::Strict::Integer
10
- attribute? :timestamp, DryTypes::Timestamp
5
+ attribute? :id, T::Integer
6
+ attribute? :image, T::String
7
+ attribute? :youtube_id, T::String
8
+ attribute? :comments, T::Integer
9
+ attribute? :views, T::Integer
10
+ attribute? :timestamp, T::Timestamp
11
11
  end
12
12
  end
13
13
  end
@@ -1,4 +1,5 @@
1
1
  require 'anilibria/api/types/dry_types'
2
+ require 'anilibria/api/types/t'
2
3
  require 'anilibria/api/types/base'
3
4
  require 'anilibria/api/types/team'
4
5
  require 'anilibria/api/types/title'
@@ -1,6 +1,6 @@
1
1
  module Anilibria
2
2
  module Api
3
- VERSION = '1.0.2'.freeze
3
+ VERSION = '1.0.5'.freeze
4
4
  public_constant :VERSION
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anilibria-api-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Kozachenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-07 00:00:00.000000000 Z
11
+ date: 2022-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -67,6 +67,7 @@ files:
67
67
  - lib/anilibria/api/types/feed.rb
68
68
  - lib/anilibria/api/types/schedule.rb
69
69
  - lib/anilibria/api/types/seed_stats.rb
70
+ - lib/anilibria/api/types/t.rb
70
71
  - lib/anilibria/api/types/team.rb
71
72
  - lib/anilibria/api/types/title.rb
72
73
  - lib/anilibria/api/types/youtube.rb