Sha256: 98ea7cba558887ff7392ca8c073db0984febcb24237798d0cc5677ff038bfbfa

Contents?: true

Size: 1.8 KB

Versions: 99

Compression:

Stored size: 1.8 KB

Contents

require "yaml"
require "metanorma-utils"

#require "metanorma/cli/stringify_all_keys"

module Metanorma
  module Cli
    class TemplateRepo

      Hash.include Metanorma::Utils::Hash
      Array.include Metanorma::Utils::Array

      def initialize(options = {})
        @name = options.fetch(:name)
        @source = options.fetch(:source)
        @type = options.fetch(:type, "custom")
        @overwrite = options.fetch(:overwrite, false)
      end

      def add
        create_template_config
        add_new_template(name, source, type)
        write_to_template_config(templates)

        templates[:templates]
      end

      def self.add(name, source, options = {})
        new(options.merge(name: name, source: source)).add
      end

      private

      attr_reader :name, :source, :type, :overwrite

      def templates
        @templates ||= YAML.load_file(template_config_file).symbolize_all_keys
      end

      def template_config_file
        @template_config_file ||= Cli.config_path(true)
      end

      def create_template_config
        unless template_config_file.exist?
          unless template_config_file.dirname.exist?
            FileUtils.mkdir_p(template_config_file.dirname)
          end

          write_to_template_config(templates: [])
        end
      end

      def write_to_template_config(templates)
        shash = templates.stringify_all_keys
        File.write(template_config_file, shash.to_yaml)
      end

      def add_new_template(name, source, type)
        names = templates[:templates].map { |template| template[:name].to_s }

        if names.include?(name.to_s) && overwrite == false
          raise Errors::DuplicateTemplateError.new("Duplicate metanorma template")
        end

        templates[:templates].push({ name: name, source: source, type: type })
      end
    end
  end
end

Version data entries

99 entries across 99 versions & 1 rubygems

Version Path
metanorma-cli-1.12.1 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.12.0 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.11.6 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.11.5 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.11.4 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.11.3 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.11.2 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.11.1 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.11.0 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.11 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.10 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.9 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.8 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.7 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.6 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.5 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.3 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.2 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.1 lib/metanorma/cli/template_repo.rb
metanorma-cli-1.10.0 lib/metanorma/cli/template_repo.rb