anilibria-api-ruby 1.0.3 → 1.0.5.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: '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