anilibria-api-ruby 1.0.3 → 1.0.5.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: '028786323193407625b27994df9dd6386542f38e21b79f4356550820761687f0'
4
- data.tar.gz: 753473973530bbd68be6d7427dd5460eec2c455f3938c39f65956734a33f31e5
3
+ metadata.gz: 305fa9f0e1d81906e47e59a2ef505cb8b353f13b176ab3188ef7aedbdbb806ab
4
+ data.tar.gz: 5164e486cf7fa39fd2cd449002d8f3369d684e0c642e9654927baf1cae848b24
5
5
  SHA512:
6
- metadata.gz: adf4f3b6b6a29643f364475d32685ef1fc47c71735ffb1c26befc259fb817f122d45eec3614617963ee3e606753ec499f87122dfac8e3705f9e6224ec8a82b93
7
- data.tar.gz: d80d1ca94d577e815ed8096c73d013bcf1476a46226b6d24c52f01a38840ade125f0196b8dd58cf15d9a0f2aa3a64b7671b5cf53c8514d1be306c9b2b8a3c6f1
6
+ metadata.gz: 49961302385788d1c28c02600ed035ff9cc42f6a2c8504f8bc0ce682bd29e832e242ddee32a4bc9074cd7c456463434b5a671698ba93b3059014f8493604c9fa
7
+ data.tar.gz: 3fdb581bf4fdbc0cc40f325dc1f508b7ab13cf25afc37733fdf31d34956daeaf3bb6e7ca4355269b361b16a979e3269079df6ce5322e5d42d4aa0d6c1ed6f131
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- anilibria-api-ruby (1.0.3)
4
+ anilibria-api-ruby (1.0.5.1)
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,15 +3,15 @@ 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
9
  end
10
10
 
11
11
  class Posters < Base
12
12
  class Poster < Base
13
- attribute? :url, DryTypes::String.optional
14
- attribute? :raw_base64_file, DryTypes::String.optional
13
+ attribute? :url, T::String
14
+ attribute? :raw_base64_file, T::String
15
15
  end
16
16
 
17
17
  %i[small medium original].each do |size|
@@ -21,18 +21,18 @@ module Anilibria
21
21
 
22
22
  class Player < Base
23
23
  class Playlist < Base
24
- attribute? :serie, DryTypes::Strict::Integer
25
- attribute? :created_timestamp, DryTypes::Timestamp
24
+ attribute? :serie, T::Integer
25
+ attribute? :created_timestamp, T::Timestamp
26
26
 
27
27
  attribute? :hls, Base do
28
- attribute? :fhd, DryTypes::String.optional
29
- attribute? :hd, DryTypes::String.optional
30
- attribute? :sd, DryTypes::String.optional
28
+ attribute? :fhd, T::String
29
+ attribute? :hd, T::String
30
+ attribute? :sd, T::String
31
31
  end
32
32
  end
33
33
 
34
- attribute? :alternative_player, DryTypes::String.optional
35
- attribute? :host, DryTypes::String.optional
34
+ attribute? :alternative_player, T::String
35
+ attribute? :host, T::String
36
36
  attribute? :series, Title::Series
37
37
 
38
38
  attribute?(
@@ -47,92 +47,92 @@ module Anilibria
47
47
  class Torrent < Base
48
48
  class Metadata < Base
49
49
  class FilesList < Base
50
- attribute? :file, DryTypes::Strict::String
51
- attribute? :size, DryTypes::Strict::Integer
52
- attribute? :offset, DryTypes::Strict::Integer
50
+ attribute? :file, T::String
51
+ attribute? :size, T::Integer
52
+ attribute? :offset, T::Integer
53
53
  end
54
54
 
55
55
  undef hash
56
56
 
57
- attribute? :hash, DryTypes::Strict::String
58
- attribute? :name, DryTypes::Strict::String
59
- attribute? :announce, DryTypes::Array.of(DryTypes::Strict::String)
60
- attribute? :created_timestamp, DryTypes::Timestamp
57
+ attribute? :hash, T::String
58
+ attribute? :name, T::String
59
+ attribute? :announce, DryTypes::Array.of(T::String)
60
+ attribute? :created_timestamp, T::Timestamp
61
61
  attribute? :files_list, DryTypes::Array.of(FilesList)
62
62
  end
63
63
 
64
64
  undef hash
65
65
 
66
- attribute? :torrent_id, DryTypes::Strict::Integer
66
+ attribute? :torrent_id, T::Integer
67
67
  attribute? :series, Title::Series
68
68
 
69
69
  attribute? :quality, Base do
70
- attribute? :string, DryTypes::Strict::String
71
- attribute? :type, DryTypes::Strict::String
72
- attribute? :resolution, DryTypes::Strict::Integer
73
- attribute? :encoder, DryTypes::Strict::String
74
- attribute? :lq_audio, DryTypes::Strict::Bool
70
+ attribute? :string, T::String
71
+ attribute? :type, T::String
72
+ attribute? :resolution, T::String
73
+ attribute? :encoder, T::String
74
+ attribute? :lq_audio, T::Bool
75
75
  end
76
76
 
77
77
  %i[leechers seeders downloads total_size].each do |i|
78
- attribute? i, DryTypes::Strict::Integer
78
+ attribute? i, T::Integer
79
79
  end
80
80
 
81
- attribute? :url, DryTypes::Strict::String
82
- attribute? :uploaded_timestamp, DryTypes::Timestamp
83
- attribute? :hash, DryTypes::Strict::String
84
- attribute? :metadata, DryTypes::Strict::Nil | Metadata
85
- 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
86
86
  end
87
87
 
88
88
  attribute? :series, Title::Series
89
89
  attribute? :list, DryTypes::Array.of(Torrent)
90
90
  end
91
91
 
92
- attribute? :id, DryTypes::Strict::Integer
93
- attribute? :code, DryTypes::Strict::String
92
+ attribute? :id, T::Integer
93
+ attribute? :code, T::String
94
94
 
95
95
  attribute? :names, Base do
96
- attribute? :ru, DryTypes::String.optional
97
- attribute? :en, DryTypes::String.optional
98
- attribute? :alternative, DryTypes::String.optional
96
+ attribute? :ru, T::String
97
+ attribute? :en, T::String
98
+ attribute? :alternative, T::String
99
99
  end
100
100
 
101
- attribute? :announce, DryTypes::String.optional
101
+ attribute? :announce, T::String
102
102
 
103
103
  attribute? :status, Base do
104
- attribute? :string, DryTypes::Strict::String
105
- attribute? :code, DryTypes::Strict::Integer
104
+ attribute? :string, T::String
105
+ attribute? :code, T::Integer
106
106
  end
107
107
 
108
108
  attribute? :posters, Posters
109
- attribute? :updated, DryTypes::Timestamp.optional
110
- attribute? :last_change, DryTypes::Timestamp.optional
109
+ attribute? :updated, T::Timestamp
110
+ attribute? :last_change, T::Timestamp
111
111
 
112
112
  attribute? :type, Base do
113
- attribute? :full_string, DryTypes::String.optional
114
- attribute? :string, DryTypes::String.optional
115
- attribute? :length, DryTypes::String.optional
116
- attribute? :series, DryTypes::Integer.optional
117
- attribute? :code, DryTypes::Integer.optional
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
118
118
  end
119
119
 
120
- attribute? :genres, DryTypes::Array.of(DryTypes::Strict::String)
120
+ attribute? :genres, DryTypes::Array.of(T::String)
121
121
  attribute? :team, Types::Team
122
122
 
123
123
  attribute? :season, Base do
124
- attribute? :string, DryTypes::String.optional
125
- attribute? :code, DryTypes::Integer.optional
126
- attribute? :year, DryTypes::Integer.optional
127
- attribute? :week_day, DryTypes::Integer.optional
124
+ attribute? :string, T::String
125
+ attribute? :code, T::Integer
126
+ attribute? :year, T::Integer
127
+ attribute? :week_day, T::Integer
128
128
  end
129
129
 
130
- attribute? :description, DryTypes::String.optional
131
- attribute? :in_favorites, DryTypes::Integer.optional
130
+ attribute? :description, T::String
131
+ attribute? :in_favorites, T::Integer
132
132
 
133
133
  attribute? :blocked, Base do
134
- attribute? :blocked, DryTypes::Strict::Bool
135
- attribute? :bakanim, DryTypes::Strict::Bool
134
+ attribute? :blocked, T::Bool
135
+ attribute? :bakanim, T::Bool
136
136
  end
137
137
 
138
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.3'.freeze
3
+ VERSION = '1.0.5.1'.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.3
4
+ version: 1.0.5.1
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-13 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