# frozen_string_literal: true require 'logging' require_relative 'fic_tracker/version' module FicTracker class Error < StandardError; end class ConfigError < Error; end def self.logger @logger ||= Logging.logger[self].tap do |logger| logger.add_appenders ::Logging.appenders.stdout logger.level = :warn end end def self.configure! Config.load! end def self.cache configure! unless @cache @cache end def self.cache=(cache) @cache = cache end def self.database configure! unless @database @database end def self.database=(database) @database = database end def self.debug! logger.level = :debug end def self.logger=(global_logger) @logger = global_logger @global_logger = !global_logger.nil? end def self.global_logger? @global_logger ||= false end module Models def self.const_missing(const) raise 'No database connected' unless FicTracker.database model = const.to_s.downcase require_relative "fic_tracker/models/#{model}" mod = const_get(const) if const_defined? const return mod if mod raise "Model not found: #{const}" end end module Tasks autoload :Cleanup, 'fic_tracker/tasks/cleanup' end module Renderers autoload :Epub, 'fic_tracker/renderers/epub' autoload :HTML, 'fic_tracker/renderers/html' autoload :Markdown, 'fic_tracker/renderers/markdown' def self.render(type, story, **attrs) klass = case type when :Markdown, :markdown, :md Markdown when :HTML, :html HTML when :Epub, :epub Epub end stringio = nil unless attrs[:io] require 'stringio' attrs[:io] = StringIO.new stringio = true end result = klass.new(story, **attrs).render return result unless stringio attrs[:io].string end end end require_relative 'fic_tracker/backend' require_relative 'fic_tracker/config'