# frozen_string_literal: true module Satis module Options module ClassMethods def option(name, default: nil) attr_accessor(name) schema[name] = default end def schema @schema ||= {} end end def set_defaults! self.class.schema.each do |name, default| instance_variable_set("@#{name}", default) end end def self.included(cls) cls.extend(ClassMethods) end end class Configuration include Options option :full_width_topbar, default: false option :logger, default: Rails.logger option :submit_on_enter, default: true option :confirm_before_leave, default: false option :current_user, default: lambda {} option(:default_help_text, default: lambda do |template, object, key, additional_scope| scope = help_scope(template, object, additional_scope) value = I18n.t((["help"] + scope + [key.to_s]).join(".")) if /translation missing: (.+)/.match?(value) nil else value end end) def initialize set_defaults! end # Maybe not the right place? def help_scope(template, object, additional_scope, action: nil) scope = template.controller.controller_path.split("/") scope << (action || template.controller.action_name) scope << object.class.name.demodulize.tableize.singularize scope += Array.wrap(additional_scope) if additional_scope scope.map(&:to_s) end def help_scopes(template, object, additional_scope) actions = [template.controller.action_name] %w[show new edit create update destroy index].each do |action| actions << action unless actions.include?(action) end actions.map { |action| help_scope(template, object, additional_scope, action: action) } end end module Configurable attr_writer :config def config @config ||= Configuration.new end def configure yield(config) end alias setup configure def reset_config! @config = Configuration.new end end end