Sha256: d8df3cc646c908051bf1297bf1cd43c087bf5ac628b5d02eef61a7648d8aebff

Contents?: true

Size: 1.9 KB

Versions: 2

Compression:

Stored size: 1.9 KB

Contents

# typed: false

module Mangadex
  class Statistic < MangadexObject
    class Rating < MangadexObject
      has_attributes \
        :average,
        :bayesian,
        :distribution

      def self.attributes_to_inspect
        [:average, :bayesian]
      end
    end

    class Comments < MangadexObject
      has_attributes \
        :thread_id,
        :replies_count

      def self.attributes_to_inspect
        [:replies_count]
      end
    end

    attr_accessor \
      :rating,
      :follows,
      :comments

    class << self
      def from_data(data)
        results = if data.is_a?(Array)
          data.map do |item|
            from_data(item)
          end
        else
          data.keys.map do |manga_id|
            statistics = data[manga_id]
            new(
              rating: Mangadex::Statistic::Rating.from_data(statistics['rating'], direct: true),
              comments: Mangadex::Statistic::Comments.from_data(statistics['comments'], direct: true),
              follows: statistics['follows'],
            )
          end
        end

        return results.first if results.length == 1
        Mangadex::Api::Response::Collection.new(results)
      end
    end

    sig { params(uuid: String, raw: T::Boolean).returns(T::Api::GenericResponse) }
    def self.get(uuid, raw: false)
      Mangadex::Internal::Definition.must(uuid)

      Mangadex::Internal::Request.get(
        '/statistics/manga/%{uuid}' % {uuid: uuid},
        raw: raw,
      )
    end

    sig { params(raw: T::Boolean, args: T::Api::Arguments).returns(T::Api::GenericResponse) }
    def self.list(raw: false, **args)
      Mangadex::Internal::Request.get(
        '/statistics/manga',
        Mangadex::Internal::Definition.validate(args, {
          manga: { accepts: [String], converts: :to_a },
        }),
        raw: raw,
      )
    end

    def self.attributes_to_inspect
      [:follows, :rating, :comments]
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mangadex-5.10.0 lib/mangadex/statistic.rb
mangadex-5.9.0 lib/mangadex/statistic.rb