103 lines
2 KiB
Ruby
103 lines
2 KiB
Ruby
# 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'
|