class Mangadex::Internal::Context

Attributes

allowed_content_ratings[RW]
ignore_user[RW]

Public Class Methods

new() click to toggle source
# File lib/mangadex/internal/context.rb, line 10
def initialize
  @allowed_content_ratings = Mangadex.configuration.default_content_ratings
end
user_object?(user) click to toggle source
# File lib/mangadex/internal/context.rb, line 117
def self.user_object?(user)
  return false if user.nil?

  missing_methods = [:session, :refresh, :mangadex_user_id, :save] - user.methods
  return true if missing_methods.empty?

  warn("Potential user object #{user} is missing #{missing_methods}")
  false
end

Public Instance Methods

allow_content_ratings(*content_ratings) { || ... } click to toggle source
# File lib/mangadex/internal/context.rb, line 82
def allow_content_ratings(*content_ratings, &block)
  content_ratings = Mangadex::ContentRating.parse(Array(content_ratings))
  if block_given?
    content_ratings = Mangadex.context.allowed_content_ratings if content_ratings.empty?

    # set temporarily
    temp_set_value("allowed_content_ratings", content_ratings) do
      yield
    end
  elsif content_ratings.any?
    # set "permanently"
    @allowed_content_ratings = content_ratings
  else
    # This is to throw an exception prompting to pass a block if there no params.
    yield
  end
end
force_raw_requests() { || ... } click to toggle source

Only recommended for development and debugging only

# File lib/mangadex/internal/context.rb, line 107
def force_raw_requests(&block)
  if block_given?
    temp_set_value("force_raw_requests", true) do
      yield
    end
  else
    !!@force_raw_requests
  end
end
tags() click to toggle source
# File lib/mangadex/internal/context.rb, line 28
def tags
  @tags ||= Mangadex::Tag.list.data
end
user() click to toggle source
# File lib/mangadex/internal/context.rb, line 20
def user
  @ignore_user ? nil : @user
rescue Mangadex::Errors::UnauthorizedError
  warn("A user is present but not authenticated!")
  nil
end
user=(user) click to toggle source
# File lib/mangadex/internal/context.rb, line 47
def user=(user)
  if user.is_a?(Mangadex::Api::User)
    @user = user
  elsif user.is_a?(Mangadex::User)
    @user = Mangadex::Api::User.new(
      mangadex_user_id: user.id,
      data: user,
    )
  elsif user.is_a?(Hash)
    user = Mangadex::Internal::Definition.validate(user, {
      mangadex_user_id: { accepts: String, required: true },
      session: { accepts: String },
      refresh: { accepts: String },
    })

    @user = Mangadex::Api::User.new(
      mangadex_user_id: user[:mangadex_user_id],
      session: user[:session],
      refresh: user[:refresh],
    )
  elsif Mangadex::Internal::Context.user_object?(user)
    @user = Mangadex::Api::User.new(
      mangadex_user_id: user.mangadex_user_id.to_s,
      session: user.session,
      refresh: user.refresh,
      session_valid_until: user.session_valid_until,
      data: user,
    )
  elsif user.nil?
    @user = nil
  else
    raise TypeError, "Invalid user type."
  end
end
version() click to toggle source
# File lib/mangadex/internal/context.rb, line 15
def version
  @version ||= Mangadex::Api::VersionChecker.check_mangadex_version
end
with_allowed_content_ratings(*other_content_ratings) { || ... } click to toggle source
# File lib/mangadex/internal/context.rb, line 100
def with_allowed_content_ratings(*other_content_ratings, &block)
  T.unsafe(self).allow_content_ratings(*(allowed_content_ratings + other_content_ratings)) do
    yield
  end
end
with_user(user) { || ... } click to toggle source
# File lib/mangadex/internal/context.rb, line 33
def with_user(user, &block)
  temp_set_value("user", user) do
    yield
  end
end
without_user() { || ... } click to toggle source
# File lib/mangadex/internal/context.rb, line 40
def without_user(&block)
  temp_set_value("ignore_user", true) do
    yield
  end
end

Private Instance Methods

temp_set_value(name, value) { || ... } click to toggle source
# File lib/mangadex/internal/context.rb, line 129
def temp_set_value(name, value, &block)
  setter_method_name = "#{name}="

  current_value = send(name)
  send(setter_method_name, value)
  response = yield
  send(setter_method_name, current_value)
  response
ensure
  send(setter_method_name, current_value) if current_value
end