kinopoisk_dev_api 1.4.0

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.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +1 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +23 -0
  5. data/CHANGELOG.md +5 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +118 -0
  8. data/Rakefile +17 -0
  9. data/data/type_attributes.json +1624 -0
  10. data/lib/kinopoisk_dev_api/client.rb +98 -0
  11. data/lib/kinopoisk_dev_api/configuration.rb +13 -0
  12. data/lib/kinopoisk_dev_api/endpoints.rb +75 -0
  13. data/lib/kinopoisk_dev_api/exceptions/base.rb +7 -0
  14. data/lib/kinopoisk_dev_api/exceptions/response_error.rb +35 -0
  15. data/lib/kinopoisk_dev_api/inflector.rb +16 -0
  16. data/lib/kinopoisk_dev_api/types/audience.rb +10 -0
  17. data/lib/kinopoisk_dev_api/types/base.rb +12 -0
  18. data/lib/kinopoisk_dev_api/types/birth_place.rb +9 -0
  19. data/lib/kinopoisk_dev_api/types/compactable.rb +19 -0
  20. data/lib/kinopoisk_dev_api/types/currency_value.rb +10 -0
  21. data/lib/kinopoisk_dev_api/types/death_place.rb +9 -0
  22. data/lib/kinopoisk_dev_api/types/episode_v1_4.rb +22 -0
  23. data/lib/kinopoisk_dev_api/types/external_id.rb +12 -0
  24. data/lib/kinopoisk_dev_api/types/fact_in_movie.rb +11 -0
  25. data/lib/kinopoisk_dev_api/types/fact_in_person.rb +9 -0
  26. data/lib/kinopoisk_dev_api/types/fees.rb +11 -0
  27. data/lib/kinopoisk_dev_api/types/image.rb +21 -0
  28. data/lib/kinopoisk_dev_api/types/image_docs_response_dto_v1_4.rb +16 -0
  29. data/lib/kinopoisk_dev_api/types/item_name.rb +9 -0
  30. data/lib/kinopoisk_dev_api/types/keyword.rb +15 -0
  31. data/lib/kinopoisk_dev_api/types/keyword_docs_response_dto_v1_4.rb +16 -0
  32. data/lib/kinopoisk_dev_api/types/linked_movie_v1_4.rb +21 -0
  33. data/lib/kinopoisk_dev_api/types/list.rb +18 -0
  34. data/lib/kinopoisk_dev_api/types/list_docs_response_dto_v1_4.rb +16 -0
  35. data/lib/kinopoisk_dev_api/types/logo.rb +9 -0
  36. data/lib/kinopoisk_dev_api/types/meili_person_entity_v1_4.rb +26 -0
  37. data/lib/kinopoisk_dev_api/types/movie.rb +11 -0
  38. data/lib/kinopoisk_dev_api/types/movie_award.rb +16 -0
  39. data/lib/kinopoisk_dev_api/types/movie_award_docs_response_dto.rb +13 -0
  40. data/lib/kinopoisk_dev_api/types/movie_docs_response_dto_v1_4.rb +16 -0
  41. data/lib/kinopoisk_dev_api/types/movie_dto_v1_4.rb +76 -0
  42. data/lib/kinopoisk_dev_api/types/movie_from_keyword.rb +9 -0
  43. data/lib/kinopoisk_dev_api/types/movie_from_studio.rb +9 -0
  44. data/lib/kinopoisk_dev_api/types/movie_in_person.rb +17 -0
  45. data/lib/kinopoisk_dev_api/types/name.rb +11 -0
  46. data/lib/kinopoisk_dev_api/types/network_item_v1_4.rb +13 -0
  47. data/lib/kinopoisk_dev_api/types/networks_v1_4.rb +12 -0
  48. data/lib/kinopoisk_dev_api/types/nomination.rb +10 -0
  49. data/lib/kinopoisk_dev_api/types/nomination_award.rb +10 -0
  50. data/lib/kinopoisk_dev_api/types/pattern_matching.rb +11 -0
  51. data/lib/kinopoisk_dev_api/types/person.rb +32 -0
  52. data/lib/kinopoisk_dev_api/types/person_award.rb +17 -0
  53. data/lib/kinopoisk_dev_api/types/person_award_docs_response_dto.rb +13 -0
  54. data/lib/kinopoisk_dev_api/types/person_docs_response_dto_v1_4.rb +16 -0
  55. data/lib/kinopoisk_dev_api/types/person_in_movie.rb +17 -0
  56. data/lib/kinopoisk_dev_api/types/possible_value_dto.rb +10 -0
  57. data/lib/kinopoisk_dev_api/types/premiere.rb +15 -0
  58. data/lib/kinopoisk_dev_api/types/profession.rb +9 -0
  59. data/lib/kinopoisk_dev_api/types/rating.rb +16 -0
  60. data/lib/kinopoisk_dev_api/types/review.rb +28 -0
  61. data/lib/kinopoisk_dev_api/types/review_docs_response_dto_v1_4.rb +16 -0
  62. data/lib/kinopoisk_dev_api/types/review_info.rb +12 -0
  63. data/lib/kinopoisk_dev_api/types/search_movie_dto_v1_4.rb +53 -0
  64. data/lib/kinopoisk_dev_api/types/search_movie_response_dto_v1_4.rb +16 -0
  65. data/lib/kinopoisk_dev_api/types/search_person_response_dto_v1_4.rb +16 -0
  66. data/lib/kinopoisk_dev_api/types/season_docs_response_dto_v1_4.rb +16 -0
  67. data/lib/kinopoisk_dev_api/types/season_info.rb +11 -0
  68. data/lib/kinopoisk_dev_api/types/season_v1_4.rb +31 -0
  69. data/lib/kinopoisk_dev_api/types/short_image.rb +11 -0
  70. data/lib/kinopoisk_dev_api/types/spouses.rb +16 -0
  71. data/lib/kinopoisk_dev_api/types/studio.rb +18 -0
  72. data/lib/kinopoisk_dev_api/types/studio_docs_response_dto_v1_4.rb +16 -0
  73. data/lib/kinopoisk_dev_api/types/video.rb +13 -0
  74. data/lib/kinopoisk_dev_api/types/video_types.rb +9 -0
  75. data/lib/kinopoisk_dev_api/types/votes.rb +16 -0
  76. data/lib/kinopoisk_dev_api/types/watchability.rb +9 -0
  77. data/lib/kinopoisk_dev_api/types/watchability_item.rb +11 -0
  78. data/lib/kinopoisk_dev_api/types/year_range.rb +10 -0
  79. data/lib/kinopoisk_dev_api/types.rb +7 -0
  80. data/lib/kinopoisk_dev_api/version.rb +5 -0
  81. data/lib/kinopoisk_dev_api.rb +25 -0
  82. data/rakelib/parse_schema.rake +90 -0
  83. data/rakelib/rebuild_types.rake +95 -0
  84. data/rakelib/templates/empty_type.erb +9 -0
  85. data/rakelib/templates/type.erb +24 -0
  86. metadata +169 -0
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ module Types
5
+ class Votes < Base
6
+ attribute? :kp, Types::Coercible::String.optional
7
+ attribute? :imdb, Types::Float | Types::Integer.optional
8
+ attribute? :tmdb, Types::Float | Types::Integer.optional
9
+ attribute? :filmCritics, Types::Float | Types::Integer.optional
10
+ attribute? :russianFilmCritics, Types::Float | Types::Integer.optional
11
+ attribute? :await, Types::Float | Types::Integer.optional
12
+ alias film_critics filmCritics
13
+ alias russian_film_critics russianFilmCritics
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ module Types
5
+ class Watchability < Base
6
+ attribute? :items, Types::Array.of(WatchabilityItem)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ module Types
5
+ class WatchabilityItem < Base
6
+ attribute? :name, Types::Coercible::String.optional
7
+ attribute? :logo, Logo
8
+ attribute? :url, Types::Coercible::String
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ module Types
5
+ class YearRange < Base
6
+ attribute? :start, Types::Float | Types::Integer.optional
7
+ attribute? :end, Types::Float | Types::Integer.optional
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ module Types
5
+ include Dry.Types()
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ VERSION = "1.4.0"
5
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "faraday"
5
+ require "zeitwerk"
6
+ require "dry-struct"
7
+ require "kinopoisk_dev_api/inflector"
8
+
9
+ loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
10
+ loader.inflector = KinopoiskDevApi::Inflector.new(__FILE__)
11
+ loader.setup
12
+
13
+ module KinopoiskDevApi
14
+ class << self
15
+ attr_writer :configuration
16
+ end
17
+
18
+ def self.configuration
19
+ @configuration ||= Configuration.new
20
+ end
21
+
22
+ def self.configure
23
+ yield(configuration)
24
+ end
25
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "openapi3_parser"
4
+
5
+ INCONSISTENT_TYPES = %w[Keyword Studio].freeze
6
+
7
+ # rubocop:disable Metrics/BlockLength
8
+ desc "Parse types from public json, should be up to date https://api.kinopoisk.dev/documentation-json"
9
+ task :parse_schema do
10
+ document = Openapi3Parser.load_url("https://api.kinopoisk.dev/documentation-json")
11
+
12
+ result = document.components.schemas.to_h do |type_name, schema|
13
+ type_schema = schema.properties.to_h do |property_name, property_schema|
14
+ attribute = { type: parse_initial_type(property_schema, property_name) }
15
+
16
+ unless property_schema.any_of.nil?
17
+ attribute[:type] = property_schema.any_of.map { |item| property_schema.name || item.name || item.type }.uniq
18
+ end
19
+
20
+ attribute[:type] = attribute[:type].join if attribute[:type]&.length == 1
21
+
22
+ attribute[:nullable] = property_schema.nullable?
23
+
24
+ attribute[:required] = true if required_keys(schema).include?(property_name)
25
+
26
+ # getting required values from the description, no values in json 😔
27
+ required_value = property_schema.description&.match(/always “(.+)”|must be \*(.+)\*/)
28
+ attribute[:required_value] = (required_value[1] || required_value[2]).delete("\\") if required_value
29
+
30
+ # for some reason every property's minLength is 0 by default, probably parser bug, had to ignore that
31
+ attribute[:min_size] = property_schema[:minLength] if property_schema[:minLength] != 0
32
+ attribute[:max_size] = property_schema[:maxLength] if property_schema[:maxLength]
33
+
34
+ attribute[:items] = property_schema.items.type if property_schema&.items
35
+ if property_schema&.type == "array" && property_schema&.items&.type.nil?
36
+ attribute[:items] = property_schema&.items&.name
37
+ end
38
+
39
+ attribute[:items] = property_schema.items.name if property_schema&.items&.type == "object"
40
+
41
+ # array of arrays
42
+ if property_schema&.items&.type == "array"
43
+ attribute[:items] = { type: "array", items: property_schema.items.items.name }
44
+ end
45
+
46
+ # FIXME: dirty hack in case of https://github.com/mdwitr0/kinopoiskdev/issues/173
47
+ attribute[:nullable] = true if type_name == "Person" && property_name == "countAwards"
48
+ if INCONSISTENT_TYPES.include?(type_name) && property_name == "movies"
49
+ attribute[:items] = attribute[:type]
50
+ attribute[:type] = "array"
51
+ end
52
+
53
+ attribute = apply_default_schema(attribute, property_schema)
54
+ [property_name, attribute]
55
+ end
56
+
57
+ # find empty classes
58
+ type_schema[:type] = schema.any_of.map(&:name) if schema.properties.empty? && schema.any_of
59
+ [type_name, type_schema]
60
+ end
61
+
62
+ # Drop Error Response Schemas
63
+ result.reject! { |type| type.end_with?("ErrorResponseDto") }
64
+ File.write "#{__dir__}/../data/type_attributes.json", JSON.pretty_generate(result)
65
+ end
66
+ # rubocop:enable Metrics/BlockLength
67
+
68
+ def required_keys(schema)
69
+ schema.required.to_a || []
70
+ end
71
+
72
+ def apply_default_schema(attribute, property_schema)
73
+ attribute[:default] = property_schema.default unless property_schema.default.nil?
74
+ # previous line would have been enough, but had to check the description due to issue: https://github.com/kevindew/openapi3_parser/issues/28
75
+ attribute[:default] = false if property_schema.description&.include?("Defaults to *false*")
76
+ attribute
77
+ end
78
+
79
+ def parse_initial_type(property_schema, property_name)
80
+ case property_schema.type
81
+ when nil
82
+ if property_schema.all_of.nil?
83
+ property_name.capitalize.gsub(/_(\w)/) { Regexp.last_match(1).upcase }
84
+ else
85
+ parse_initial_type(property_schema.all_of.first, property_schema.all_of.first.name)
86
+ end
87
+ when "object" then property_schema.name
88
+ else property_schema.type
89
+ end
90
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "erb"
5
+ DRY_TYPES = %w[string integer float decimal array hash symbol boolean date date_time time range].freeze
6
+
7
+ # rubocop:disable Metrics/BlockLength
8
+ desc "Rebuild types"
9
+ task :rebuild_types do
10
+ types = JSON.parse(File.read("#{__dir__}/../data/type_attributes.json"), symbolize_names: true)
11
+
12
+ types.each_pair do |name, attributes|
13
+ # currently there is no empty types
14
+ next build_empty_type(name, attributes) if attributes[:type].instance_of?(Array)
15
+
16
+ attributes.each_pair do |attr_name, properties|
17
+ attributes[attr_name][:type] = add_module_types(properties[:type]) unless properties[:type].is_a?(Array)
18
+ if properties[:type].is_a?(Array)
19
+ attributes[attr_name][:type] = properties[:type].map do |type|
20
+ add_module_types(type)
21
+ end.join(" | ")
22
+ end
23
+
24
+ if properties[:items].instance_of?(String)
25
+ attributes[attr_name][:type] += ".of(#{add_module_types(properties[:items])})"
26
+ elsif properties[:items] && properties[:items][:type] == "array"
27
+ attributes[attr_name][:type] += ".of(Types::Array.of(#{properties[:items][:items]}))"
28
+ end
29
+ original_type = properties[:type]
30
+
31
+ attributes = apply_required(attributes, attr_name, properties, original_type)
32
+ attributes = apply_min_max(attributes, attr_name, properties)
33
+ attributes = apply_default(attributes, attr_name, properties, original_type)
34
+
35
+ attributes[attr_name][:type] = "Types::True" if attributes[attr_name][:type] == "Types::Boolean.default(true)"
36
+ attributes[attr_name][:type] = attributes[attr_name][:type].gsub("Types::Boolean", "Types::Bool")
37
+ attributes[attr_name][:type] += ".optional" if properties[:nullable]
38
+ end
39
+
40
+ File.write "#{__dir__}/../lib/kinopoisk_dev_api/types/#{underscore(name)}.rb",
41
+ ERB.new(File.read("#{__dir__}/templates/type.erb")).result(binding).gsub(/^\s+\n/, "")
42
+ end
43
+ end
44
+ # rubocop:enable Metrics/BlockLength
45
+
46
+ def build_empty_type(name, attributes)
47
+ attributes = attributes[:type].join(" |\n ")
48
+ File.write "#{__dir__}/../lib/kinopoisk_dev_api/types/#{underscore(name)}.rb",
49
+ ERB.new(File.read("#{__dir__}/templates/empty_type.erb")).result(binding).gsub(/^\s+\n/, "")
50
+ end
51
+
52
+ def apply_default(attributes, attr_name, properties, original_type)
53
+ return attributes if properties[:default].nil?
54
+
55
+ attributes[attr_name][:type] += ".default(#{typecast(original_type,
56
+ properties[:default])})"
57
+ attributes
58
+ end
59
+
60
+ def apply_required(attributes, attr_name, properties, original_type)
61
+ return attributes unless properties[:required_value]
62
+
63
+ attributes[attr_name][:type] += ".constrained(eql: #{typecast(original_type,
64
+ properties[:required_value])})"
65
+ attributes
66
+ end
67
+
68
+ def apply_min_max(attributes, attr_name, properties)
69
+ return attributes unless properties[:min_size] || properties[:max_size]
70
+
71
+ constrain = ".constrained(minmax)"
72
+ constrain = properties[:min_size] ? constrain.gsub("min", "min_size: #{properties[:min_size]}, ") : ""
73
+ constrain = constrain.gsub("max", "max_size: #{properties[:max_size]}") if properties[:max_size]
74
+ attributes[attr_name][:type] += constrain
75
+ attributes
76
+ end
77
+
78
+ def add_module_types(type)
79
+ return %w[Types::Float Types::Integer] if type == "number"
80
+ return "Types::Coercible::String" if type == "string"
81
+
82
+ DRY_TYPES.include?(type) ? "Types::#{type.capitalize}" : type
83
+ end
84
+
85
+ def underscore(camel_cased_word)
86
+ camel_cased_word.to_s.gsub("::", "/")
87
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
88
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
89
+ .tr("-", "_")
90
+ .downcase
91
+ end
92
+
93
+ def typecast(type, obj)
94
+ type == "Types::Coercible::String" ? "'#{obj}'" : obj
95
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ module Types
5
+ <%= name %> = (
6
+ <%= attributes %>
7
+ )
8
+ end
9
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KinopoiskDevApi
4
+ module Types
5
+ <% if name.to_s.include?('_') %>
6
+ ## Just for classes consistency
7
+ # rubocop:disable Naming/ClassAndModuleCamelCase
8
+ <% end %>
9
+ class <%= name %> < Base
10
+ <% attributes.each_pair do |name, properties| %>
11
+ <%= "attribute? :#{name}, #{properties[:type]}" %>
12
+ <% end %>
13
+
14
+ <% attributes.each_key do |name| %>
15
+ <% underscore_name = name.to_s.gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase %>
16
+ <% next if name.to_s == underscore_name %>
17
+ <%= "alias_method :#{underscore_name}, :#{name}" %>
18
+ <% end %>
19
+ end
20
+ <% if name.to_s.include?('_') %>
21
+ # rubocop:enable Naming/ClassAndModuleCamelCase
22
+ <% end %>
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kinopoisk_dev_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Aleksandr Klimenkov
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: dry-struct
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.6'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.6'
26
+ - !ruby/object:Gem::Dependency
27
+ name: faraday
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: zeitwerk
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.6'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.6'
54
+ email:
55
+ - prisioner@mail.ru
56
+ executables: []
57
+ extensions: []
58
+ extra_rdoc_files: []
59
+ files:
60
+ - ".env.example"
61
+ - ".rspec"
62
+ - ".rubocop.yml"
63
+ - CHANGELOG.md
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - data/type_attributes.json
68
+ - lib/kinopoisk_dev_api.rb
69
+ - lib/kinopoisk_dev_api/client.rb
70
+ - lib/kinopoisk_dev_api/configuration.rb
71
+ - lib/kinopoisk_dev_api/endpoints.rb
72
+ - lib/kinopoisk_dev_api/exceptions/base.rb
73
+ - lib/kinopoisk_dev_api/exceptions/response_error.rb
74
+ - lib/kinopoisk_dev_api/inflector.rb
75
+ - lib/kinopoisk_dev_api/types.rb
76
+ - lib/kinopoisk_dev_api/types/audience.rb
77
+ - lib/kinopoisk_dev_api/types/base.rb
78
+ - lib/kinopoisk_dev_api/types/birth_place.rb
79
+ - lib/kinopoisk_dev_api/types/compactable.rb
80
+ - lib/kinopoisk_dev_api/types/currency_value.rb
81
+ - lib/kinopoisk_dev_api/types/death_place.rb
82
+ - lib/kinopoisk_dev_api/types/episode_v1_4.rb
83
+ - lib/kinopoisk_dev_api/types/external_id.rb
84
+ - lib/kinopoisk_dev_api/types/fact_in_movie.rb
85
+ - lib/kinopoisk_dev_api/types/fact_in_person.rb
86
+ - lib/kinopoisk_dev_api/types/fees.rb
87
+ - lib/kinopoisk_dev_api/types/image.rb
88
+ - lib/kinopoisk_dev_api/types/image_docs_response_dto_v1_4.rb
89
+ - lib/kinopoisk_dev_api/types/item_name.rb
90
+ - lib/kinopoisk_dev_api/types/keyword.rb
91
+ - lib/kinopoisk_dev_api/types/keyword_docs_response_dto_v1_4.rb
92
+ - lib/kinopoisk_dev_api/types/linked_movie_v1_4.rb
93
+ - lib/kinopoisk_dev_api/types/list.rb
94
+ - lib/kinopoisk_dev_api/types/list_docs_response_dto_v1_4.rb
95
+ - lib/kinopoisk_dev_api/types/logo.rb
96
+ - lib/kinopoisk_dev_api/types/meili_person_entity_v1_4.rb
97
+ - lib/kinopoisk_dev_api/types/movie.rb
98
+ - lib/kinopoisk_dev_api/types/movie_award.rb
99
+ - lib/kinopoisk_dev_api/types/movie_award_docs_response_dto.rb
100
+ - lib/kinopoisk_dev_api/types/movie_docs_response_dto_v1_4.rb
101
+ - lib/kinopoisk_dev_api/types/movie_dto_v1_4.rb
102
+ - lib/kinopoisk_dev_api/types/movie_from_keyword.rb
103
+ - lib/kinopoisk_dev_api/types/movie_from_studio.rb
104
+ - lib/kinopoisk_dev_api/types/movie_in_person.rb
105
+ - lib/kinopoisk_dev_api/types/name.rb
106
+ - lib/kinopoisk_dev_api/types/network_item_v1_4.rb
107
+ - lib/kinopoisk_dev_api/types/networks_v1_4.rb
108
+ - lib/kinopoisk_dev_api/types/nomination.rb
109
+ - lib/kinopoisk_dev_api/types/nomination_award.rb
110
+ - lib/kinopoisk_dev_api/types/pattern_matching.rb
111
+ - lib/kinopoisk_dev_api/types/person.rb
112
+ - lib/kinopoisk_dev_api/types/person_award.rb
113
+ - lib/kinopoisk_dev_api/types/person_award_docs_response_dto.rb
114
+ - lib/kinopoisk_dev_api/types/person_docs_response_dto_v1_4.rb
115
+ - lib/kinopoisk_dev_api/types/person_in_movie.rb
116
+ - lib/kinopoisk_dev_api/types/possible_value_dto.rb
117
+ - lib/kinopoisk_dev_api/types/premiere.rb
118
+ - lib/kinopoisk_dev_api/types/profession.rb
119
+ - lib/kinopoisk_dev_api/types/rating.rb
120
+ - lib/kinopoisk_dev_api/types/review.rb
121
+ - lib/kinopoisk_dev_api/types/review_docs_response_dto_v1_4.rb
122
+ - lib/kinopoisk_dev_api/types/review_info.rb
123
+ - lib/kinopoisk_dev_api/types/search_movie_dto_v1_4.rb
124
+ - lib/kinopoisk_dev_api/types/search_movie_response_dto_v1_4.rb
125
+ - lib/kinopoisk_dev_api/types/search_person_response_dto_v1_4.rb
126
+ - lib/kinopoisk_dev_api/types/season_docs_response_dto_v1_4.rb
127
+ - lib/kinopoisk_dev_api/types/season_info.rb
128
+ - lib/kinopoisk_dev_api/types/season_v1_4.rb
129
+ - lib/kinopoisk_dev_api/types/short_image.rb
130
+ - lib/kinopoisk_dev_api/types/spouses.rb
131
+ - lib/kinopoisk_dev_api/types/studio.rb
132
+ - lib/kinopoisk_dev_api/types/studio_docs_response_dto_v1_4.rb
133
+ - lib/kinopoisk_dev_api/types/video.rb
134
+ - lib/kinopoisk_dev_api/types/video_types.rb
135
+ - lib/kinopoisk_dev_api/types/votes.rb
136
+ - lib/kinopoisk_dev_api/types/watchability.rb
137
+ - lib/kinopoisk_dev_api/types/watchability_item.rb
138
+ - lib/kinopoisk_dev_api/types/year_range.rb
139
+ - lib/kinopoisk_dev_api/version.rb
140
+ - rakelib/parse_schema.rake
141
+ - rakelib/rebuild_types.rake
142
+ - rakelib/templates/empty_type.erb
143
+ - rakelib/templates/type.erb
144
+ homepage: https://github.com/prisioner/kinopoisk_dev_api
145
+ licenses:
146
+ - MIT
147
+ metadata:
148
+ rubygems_mfa_required: 'true'
149
+ homepage_uri: https://github.com/prisioner/kinopoisk_dev_api
150
+ source_code_uri: https://github.com/prisioner/kinopoisk_dev_api
151
+ changelog_uri: https://github.com/prisioner/kinopoisk_dev_api/blob/master/CHANGELOG.md
152
+ rdoc_options: []
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '2.7'
160
+ required_rubygems_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ requirements: []
166
+ rubygems_version: 3.6.7
167
+ specification_version: 4
168
+ summary: Ruby wrapper for unofficial Kinopoisk API
169
+ test_files: []