Sha256: 58792f615cdaf38729bbde4f2788ef08d2ccbfbac37c114345383e3b35210795

Contents?: true

Size: 1.95 KB

Versions: 2

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

module Conductor
  # Configuration methods
  class Config
    # Configuration
    attr_reader :config
    # Tracks element
    attr_reader :tracks
    # Config file path
    attr_writer :config_file

    ##
    ## Instantiate a configuration
    ##
    ## @return     [Config] Config object
    ##
    def initialize
      @config_file = File.expand_path("~/.config/conductor/tracks.yaml")
    end

    def configure
      res = create_config(@config_file)
      return false unless res

      @config ||= YAML.safe_load(IO.read(@config_file))

      @tracks = @config["tracks"].symbolize_keys

      return true
    end

    private

    ##
    ## Generate a blank config and directory structure
    ##
    ## @param      config_file  [String] The configuration file to create
    ##
    def create_config(config_file = nil)
      config_file ||= @config_file
      config_dir = File.dirname(config_file)
      scripts_dir = File.dirname(File.join(config_dir, "scripts"))
      FileUtils.mkdir_p(config_dir) unless File.directory?(config_dir)
      FileUtils.mkdir_p(scripts_dir) unless File.directory?(scripts_dir)
      unless File.exist?(config_file)
        File.open(config_file, "w") { |f| f.puts sample_config }
        puts "Sample config created at #{config_file}"
        return false
      end

      return true
    end

    ##
    ## Content for sample configuration
    ##
    ## @return     [String] sample config
    ##
    def sample_config
      <<~EOCONFIG
        tracks:
          - condition: phase is pre
            tracks:
            - condition: tree contains .obsidian
              tracks:
              - condition: extension is md
                script: obsidian-md-filter
            - condition: extension is md
              command: rdiscount $file
          - condition: yaml includes comments
            script: blog-processor
          - condition: any
            command: echo 'NOCUSTOM'
      EOCONFIG
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
marked-conductor-1.0.29 lib/conductor/config.rb
marked-conductor-1.0.28 lib/conductor/config.rb