Sha256: 3de26e2556526148b040a51e57026566e2625b93fbdfbdf714b11ad681b98061

Contents?: true

Size: 1.98 KB

Versions: 9

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true
class DiscourseTheme::Config
  class PathSetting
    def initialize(config, path)
      @config = config
      @path = path
    end

    def api_key
      search_api_key(url) || safe_config["api_key"]
    end

    def api_key=(val)
      set_api_key(url, val)
    end

    def url
      safe_config["url"]
    end

    def url=(val)
      set("url", val)
    end

    def theme_id
      safe_config["theme_id"].to_i
    end

    def theme_id=(theme_id)
      set("theme_id", theme_id.to_i)
    end

    def components
      safe_config["components"]
    end

    def components=(val)
      set("components", val)
    end

    def local_discourse_directory_configured?
      !safe_config["local_discourse_directory"].nil?
    end

    def local_discourse_directory
      safe_config["local_discourse_directory"]
    end

    def local_discourse_directory=(dir)
      set("local_discourse_directory", dir)
    end

    protected

    def set(name, val)
      hash = @config.raw_config[@path] ||= {}
      hash[name] = val
      @config.save
      val
    end

    def safe_config
      config = @config.raw_config[@path]
      if Hash === config
        config
      else
        {}
      end
    end

    def search_api_key(url)
      hash = @config.raw_config["api_keys"]
      hash[url] if hash
    end

    def set_api_key(url, api_key)
      hash = @config.raw_config["api_keys"] ||= {}
      hash[url] = api_key
      @config.save
      api_key
    end
  end

  attr_reader :raw_config, :filename

  def initialize(filename)
    @filename = filename

    if File.exist?(@filename)
      begin
        @raw_config = YAML.load_file(@filename)
        raise unless Hash === @raw_config
      rescue StandardError
        @raw_config = {}
        $stderr.puts "ERROR: #{@filename} contains invalid config, resetting"
      end
    else
      @raw_config = {}
    end
  end

  def save
    File.write(@filename, @raw_config.to_yaml)
  end

  def [](path)
    PathSetting.new(self, path)
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
discourse_theme-2.1.1 lib/discourse_theme/config.rb
discourse_theme-2.1.0 lib/discourse_theme/config.rb
discourse_theme-2.0.0 lib/discourse_theme/config.rb
discourse_theme-1.1.0 lib/discourse_theme/config.rb
discourse_theme-1.0.2 lib/discourse_theme/config.rb
discourse_theme-1.0.1 lib/discourse_theme/config.rb
discourse_theme-1.0.0 lib/discourse_theme/config.rb
discourse_theme-0.9.1 lib/discourse_theme/config.rb
discourse_theme-0.9.0 lib/discourse_theme/config.rb