From e0e00cc547c71b12a0e65e768408f844a668be84 Mon Sep 17 00:00:00 2001 From: Matt Conway Date: Fri, 10 Nov 2023 08:47:51 -0500 Subject: [PATCH] remove dependence on defunct gem yaml-safe_load_stream --- Gemfile | 3 --- lib/kubetruth/etl.rb | 5 ++--- lib/kubetruth/project_collection.rb | 2 +- lib/kubetruth/yaml_safe_load_stream.rb | 23 +++++++++++++++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 lib/kubetruth/yaml_safe_load_stream.rb diff --git a/Gemfile b/Gemfile index 924931a..60240a4 100644 --- a/Gemfile +++ b/Gemfile @@ -28,8 +28,5 @@ gem "clamp" gem "cloudtruth-client", path: "client" gem "kubeclient" gem "liquid" -gem "yaml-safe_load_stream", - git: "https://github.com/wr0ngway/yaml-safe_load_stream.git", - branch: "ruby_3" gem "async" gem "faraday-cookie_jar" diff --git a/lib/kubetruth/etl.rb b/lib/kubetruth/etl.rb index 28729b6..de712d2 100644 --- a/lib/kubetruth/etl.rb +++ b/lib/kubetruth/etl.rb @@ -2,14 +2,13 @@ require 'yaml' require 'async' require 'async/semaphore' -require 'yaml/safe_load_stream' -using YAMLSafeLoadStream require_relative 'config' require_relative 'kubeapi' require_relative 'project_collection' require_relative 'ctapi' require_relative 'template' +require_relative 'yaml_safe_load_stream' module Kubetruth class ETL @@ -296,7 +295,7 @@ def apply ) template_id = "mapping: #{project.spec.name}, mapping_namespace: #{namespace}, project: #{project.name}, template: #{template_name}" - parsed_ymls = YAML.safe_load_stream(resource_yml, template_id) + parsed_ymls = YAML.safe_load_stream(resource_yml, filename: template_id) logger.debug {"Skipping empty template"} if parsed_ymls.empty? parsed_ymls.each do |parsed_yml| if parsed_yml.present? diff --git a/lib/kubetruth/project_collection.rb b/lib/kubetruth/project_collection.rb index 5c46d5a..7650bdf 100644 --- a/lib/kubetruth/project_collection.rb +++ b/lib/kubetruth/project_collection.rb @@ -21,7 +21,7 @@ def names end def create_project(*args, **kwargs) - project = Project.new(*args, **kwargs, collection: self, ctapi: ctapi) + project = Project.new(*args, **kwargs.merge(collection: self, ctapi: ctapi)) projects[project.name] = project project end diff --git a/lib/kubetruth/yaml_safe_load_stream.rb b/lib/kubetruth/yaml_safe_load_stream.rb new file mode 100644 index 0000000..f52377b --- /dev/null +++ b/lib/kubetruth/yaml_safe_load_stream.rb @@ -0,0 +1,23 @@ +require 'yaml' +module YAML + # copied from YAML.safe_load and mutabled to use parse_stream with a block + def self.safe_load_stream(yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false) + yamls = [] + parse_stream(yaml, filename: filename) do |result| + return fallback unless result + + class_loader = ClassLoader::Restricted.new(permitted_classes.map(&:to_s), + permitted_symbols.map(&:to_s)) + scanner = ScalarScanner.new class_loader, strict_integer: strict_integer + visitor = if aliases + Visitors::ToRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze + else + Visitors::NoAliasRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze + end + result = visitor.accept result + yield result if block_given? + yamls << result + end + yamls + end +end