atk_toolbox 0.0.39 → 0.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/atk/atk_info.rb +64 -0
- data/lib/atk/extra_yaml.rb +155 -0
- data/lib/atk/set_command.rb +8 -4
- data/lib/atk/version.rb +39 -0
- data/lib/atk/yaml_info_parser.rb +1 -11
- data/lib/atk_toolbox/version.rb +1 -1
- metadata +6 -26
- data/lib/yaml_edit/remove_key.py +0 -29
- data/lib/yaml_edit/set_key.py +0 -45
- data/lib/yaml_edit/yaml_edit.rb +0 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6eb32f46498701aef8e52e4e8e5ec4e8ae3a9d324d8bd2e56a83862b4d00280
|
4
|
+
data.tar.gz: dab81fc0056d18ad4e623999d5aed82dc3b5db27bc03a92ec0effd05a930a40e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c8f3af5288138909110c4ba4ddf16491578692c89bae75dcf97f54677d7d08374be6efe87a52f79cd2d4572f5cb74cfd1e62610cd150bed28fc0bf862b4cc84
|
7
|
+
data.tar.gz: 80d565ce037a4b369c4c25191a15132f88ad2beed8155389cbd1a59d09e2a8e094dc722518e039f47e42ba22442d2299587562410a8eef57cd133178f5f9d793
|
data/lib/atk/atk_info.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require_relative './extra_file_utils'
|
2
|
+
require_relative './os'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
class AtkPaths
|
6
|
+
def self.[](name)
|
7
|
+
# convert symbols to strings
|
8
|
+
name = name.to_s
|
9
|
+
case name
|
10
|
+
when 'atk'
|
11
|
+
return HOME/"atk"
|
12
|
+
when 'temp'
|
13
|
+
return self['atk']/"temp"
|
14
|
+
when 'info'
|
15
|
+
return HOME/"info.yaml"
|
16
|
+
when 'ruby'
|
17
|
+
atk_path_settings = ATK.info["paths"]
|
18
|
+
if atk_path_settings.is_a?(Hash) and atk_path_settings["ruby"].is_a?(String)
|
19
|
+
ruby_path = atk_path_settings["ruby"]
|
20
|
+
elsif OS.is?(:unix)
|
21
|
+
ruby_path = "/usr/bin/ruby"
|
22
|
+
else
|
23
|
+
# TODO: fix this case
|
24
|
+
ruby_path = ""
|
25
|
+
end
|
26
|
+
return ruby_path
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module ATK
|
32
|
+
def self.paths
|
33
|
+
return AtkPaths
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.temp_path(filepath)
|
37
|
+
new_path = ATK.paths[:temp]/filepath
|
38
|
+
# make sure the path is empty
|
39
|
+
begin
|
40
|
+
File.delete(new_path)
|
41
|
+
end
|
42
|
+
return new_path
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.info
|
46
|
+
settings_path = ATK.paths[:info]
|
47
|
+
atk_settings_key = "atk_settings"
|
48
|
+
# if it doesn't exist then create it
|
49
|
+
if not File.exist?(settings_path)
|
50
|
+
IO.write(settings_path, "#{atk_settings_key}: {}")
|
51
|
+
return {}
|
52
|
+
else
|
53
|
+
data = YAML.load_file(settings_path)
|
54
|
+
if data.is_a?(Hash)
|
55
|
+
if data[atk_settings_key].is_a?(Hash)
|
56
|
+
puts "data[atk_settings_key] is: #{data[atk_settings_key]} "
|
57
|
+
return data[atk_settings_key]
|
58
|
+
end
|
59
|
+
else
|
60
|
+
return {}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,155 @@
|
|
1
|
+
require_relative './os'
|
2
|
+
require_relative './remove_indent'
|
3
|
+
require_relative './version'
|
4
|
+
require 'json'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
# how the new parser should work
|
8
|
+
# turn every meaninful peice of the yaml file into data that is represented in ruby
|
9
|
+
# reference objects instead of actually replacing the reference with the value
|
10
|
+
# reference insertion keys instead of actually performing the <<:
|
11
|
+
# save the style data (like 0x00 vs 0) to every peice of data
|
12
|
+
# save whether or not the data must be single-line
|
13
|
+
# tokenize the yaml recursively with the base case of scalar values
|
14
|
+
# HARD: detect when values must be single-line or multiline
|
15
|
+
# non-complex keys are single-line
|
16
|
+
# anything inside of a JSON-like list or array must be single line
|
17
|
+
# everything else I know of can be multiline
|
18
|
+
# have both an inline and multiline conversion function for every data type
|
19
|
+
# when changing data, convert the new data into a single-line or multiline form based on the parent token
|
20
|
+
# if multiline, add the correct amount of indentation
|
21
|
+
|
22
|
+
#
|
23
|
+
#
|
24
|
+
# JSON method
|
25
|
+
#
|
26
|
+
#
|
27
|
+
# example:
|
28
|
+
# doc = <<-HEREDOC
|
29
|
+
# (dependencies):
|
30
|
+
# python: 3.6.7
|
31
|
+
# gcc: 8.0.0
|
32
|
+
# HEREDOC
|
33
|
+
# document = YamlEdit.new(string:doc)
|
34
|
+
# document["(dependencies)"]["python"].replace_value_with(value: "200")
|
35
|
+
# puts document.string
|
36
|
+
# # creates:
|
37
|
+
# doc = <<-HEREDOC
|
38
|
+
# (dependencies):
|
39
|
+
# python: "200"
|
40
|
+
# gcc: 8.0.0
|
41
|
+
# HEREDOC
|
42
|
+
|
43
|
+
def inject_string(string, middle_part, start_line, start_column, end_line, end_column)
|
44
|
+
lines = string.split("\n")
|
45
|
+
untouched_begining_lines = lines[0...start_line]
|
46
|
+
untouched_ending_lines = lines[end_line+1..-1]
|
47
|
+
middle_lines = []
|
48
|
+
|
49
|
+
before_part = lines[start_line][0...start_column]
|
50
|
+
after_part = lines[end_line][end_column..-1]
|
51
|
+
|
52
|
+
return (untouched_begining_lines + [ before_part + middle_part + after_part ] + untouched_ending_lines).join("\n")
|
53
|
+
end
|
54
|
+
|
55
|
+
class YamlEdit
|
56
|
+
attr_accessor :string
|
57
|
+
|
58
|
+
def initialize(string:nil, file:nil)
|
59
|
+
self.init(string:string, file: file)
|
60
|
+
end
|
61
|
+
|
62
|
+
def init(string:nil, file:nil)
|
63
|
+
if string == nil
|
64
|
+
string = IO.read(file)
|
65
|
+
end
|
66
|
+
@root_node = YAML.parse(string).children[0]
|
67
|
+
@string = string
|
68
|
+
self.attach_to_all_children(@root_node, self)
|
69
|
+
end
|
70
|
+
|
71
|
+
def attach_to_all_children(node, original_document)
|
72
|
+
if node.respond_to?(:children)
|
73
|
+
if node.children.is_a?(Array)
|
74
|
+
for each in node.children
|
75
|
+
self.attach_to_all_children(each, original_document)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
node.document = original_document
|
80
|
+
end
|
81
|
+
|
82
|
+
def [](key)
|
83
|
+
return @root_node[key]
|
84
|
+
end
|
85
|
+
|
86
|
+
def save_to(file)
|
87
|
+
IO.write(file, @string)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class Psych::Nodes::Node
|
92
|
+
attr_accessor :document
|
93
|
+
def anchor_and_tag(anchor:nil, tag:nil)
|
94
|
+
anchor = @anchor if anchor == nil
|
95
|
+
tag = @tag if tag == nil
|
96
|
+
|
97
|
+
string = ""
|
98
|
+
if anchor
|
99
|
+
string += "&#{anchor} "
|
100
|
+
end
|
101
|
+
|
102
|
+
if tag
|
103
|
+
string += "!#{tag} "
|
104
|
+
end
|
105
|
+
return string
|
106
|
+
end
|
107
|
+
|
108
|
+
# saving this for later once the JSON method can be replaced
|
109
|
+
def indent_level
|
110
|
+
if self.respond_to?(:children)
|
111
|
+
if self.children.size > 0
|
112
|
+
return self.children[0].start_column
|
113
|
+
end
|
114
|
+
end
|
115
|
+
return 4 + self.start_column
|
116
|
+
end
|
117
|
+
|
118
|
+
def [](key)
|
119
|
+
previous = nil
|
120
|
+
# for seq
|
121
|
+
if key.is_a?(Integer)
|
122
|
+
return self.children[key]
|
123
|
+
end
|
124
|
+
# for maps
|
125
|
+
for each in self.children.reverse
|
126
|
+
if each.respond_to?(:value) && each.value == key
|
127
|
+
return previous
|
128
|
+
end
|
129
|
+
previous = each
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def replace_value_with(value:nil, literal:nil, anchor: nil, tag:nil)
|
134
|
+
# check version
|
135
|
+
if VERSION_OF_RUBY < "2.5.0"
|
136
|
+
raise "\n\nSomewhere, replace_value_with() is being called, which is related to editing yaml\nthe problem is this function needs ruby >= 2.5.0\nbut the code is being run with ruby #{RUBY_VERSION}"
|
137
|
+
end
|
138
|
+
|
139
|
+
if literal == nil
|
140
|
+
new_value = value.to_json
|
141
|
+
else
|
142
|
+
new_value = literal
|
143
|
+
end
|
144
|
+
middle_part = self.anchor_and_tag(anchor:anchor, tag:tag) + new_value
|
145
|
+
new_string = inject_string(@document.string, middle_part, @start_line, @start_column, @end_line, @end_column)
|
146
|
+
@document.init( string: new_string )
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
class String
|
152
|
+
def yaml
|
153
|
+
return YAML.load(self)
|
154
|
+
end
|
155
|
+
end
|
data/lib/atk/set_command.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
-
require 'method_source'
|
2
1
|
require_relative './extra_file_utils'
|
3
2
|
require_relative './os'
|
3
|
+
require_relative './atk_info'
|
4
4
|
|
5
5
|
def set_command(name, code)
|
6
6
|
if OS.is?("unix")
|
7
7
|
exec_path = "/usr/local/bin/#{name}"
|
8
|
-
local_place =
|
8
|
+
local_place = ATK.temp_path(name)
|
9
9
|
# create temp if it doesn't exist
|
10
10
|
FileUtils.makedirs(File.dirname(local_place))
|
11
|
+
# add the hash bang
|
12
|
+
hash_bang = "#!#{ATK.paths[:ruby]}\n"
|
11
13
|
# create the file
|
12
|
-
IO.write(local_place,
|
14
|
+
IO.write(local_place, hash_bang+code)
|
13
15
|
# copy to command folder
|
14
16
|
system("sudo", "cp", local_place, exec_path)
|
15
|
-
system("sudo", "chmod", "
|
17
|
+
system("sudo", "chmod", "ugo+x", exec_path)
|
16
18
|
elsif OS.is?("windows")
|
17
19
|
username = `powershell -command "echo $env:UserName"`.chomp
|
18
20
|
exec_path = "C:\\Users\\#{username}\\AppData\\local\\Microsoft\\WindowsApps\\#{name}"
|
@@ -23,3 +25,5 @@ def set_command(name, code)
|
|
23
25
|
IO.write(exec_path+".bat", "@echo off\nruby \"#{exec_path}.rb\" %*")
|
24
26
|
end
|
25
27
|
end
|
28
|
+
|
29
|
+
puts ATK.paths[:ruby]
|
data/lib/atk/version.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# create a variable for the current ruby version
|
2
|
+
|
3
|
+
class Version
|
4
|
+
attr_accessor :major, :minor, :patch
|
5
|
+
|
6
|
+
def initialize(version_as_string)
|
7
|
+
# TODO: make this more safe/better error handling
|
8
|
+
@major, @minor, @patch = version_as_string.split('.').map{|each| each.to_i}
|
9
|
+
@as_string = version_as_string
|
10
|
+
end
|
11
|
+
|
12
|
+
def <=>(other_version)
|
13
|
+
if not other_version.is_a?(Version)
|
14
|
+
raise "When doing version comparision, both sides must be a version object"
|
15
|
+
end
|
16
|
+
major_size = (@major <=> other_version.major * 100)
|
17
|
+
minor_size = (@minor <=> other_version.minor * 10 )
|
18
|
+
patch_size = (@patch <=> other_version.patch * 1 )
|
19
|
+
return (major_size + minor_size + patch_size) <=> 0
|
20
|
+
end
|
21
|
+
|
22
|
+
def >(other_version)
|
23
|
+
return (self <=> other_version) == 1
|
24
|
+
end
|
25
|
+
|
26
|
+
def <(other_version)
|
27
|
+
return (self <=> other_version) == -1
|
28
|
+
end
|
29
|
+
|
30
|
+
def ==(other_version)
|
31
|
+
return (self <=> other_version) == 0
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
@as_string
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
VERSION_OF_RUBY = Version.new(RUBY_VERSION)
|
data/lib/atk/yaml_info_parser.rb
CHANGED
@@ -3,7 +3,7 @@ require "yaml"
|
|
3
3
|
require_relative './cmd'
|
4
4
|
require_relative './os'
|
5
5
|
require_relative './extra_file_utils'
|
6
|
-
require_relative '
|
6
|
+
require_relative './extra_yaml'
|
7
7
|
require 'fileutils'
|
8
8
|
|
9
9
|
#
|
@@ -262,14 +262,4 @@ class Info
|
|
262
262
|
def self.source_path()
|
263
263
|
return "."/"info.yaml"
|
264
264
|
end
|
265
|
-
|
266
|
-
def self.set_key(key_list, new_value)
|
267
|
-
path = Info.source_path
|
268
|
-
IO.write(path, YAML.set_key(IO.read(path), key_list, new_value))
|
269
|
-
end
|
270
|
-
|
271
|
-
def self.remove_key(key_list, new_value)
|
272
|
-
path = Info.source_path
|
273
|
-
IO.write(path, YAML.remove_key(IO.read(path), key_list))
|
274
|
-
end
|
275
265
|
end
|
data/lib/atk_toolbox/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atk_toolbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.40
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Hykin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zip
|
@@ -50,36 +50,18 @@ dependencies:
|
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 1.5.0
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: method_source
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: 0.9.2
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 0.9.2
|
63
|
-
type: :runtime
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 0.9.2
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 0.9.2
|
73
53
|
description: ''
|
74
54
|
email: jeff.hykin@gmail.com
|
75
55
|
executables: []
|
76
56
|
extensions: []
|
77
57
|
extra_rdoc_files: []
|
78
58
|
files:
|
59
|
+
- lib/atk/atk_info.rb
|
79
60
|
- lib/atk/cmd.rb
|
80
61
|
- lib/atk/default_info.yaml
|
81
62
|
- lib/atk/download.rb
|
82
63
|
- lib/atk/extra_file_utils.rb
|
64
|
+
- lib/atk/extra_yaml.rb
|
83
65
|
- lib/atk/git.rb
|
84
66
|
- lib/atk/online.rb
|
85
67
|
- lib/atk/os.rb
|
@@ -87,13 +69,11 @@ files:
|
|
87
69
|
- lib/atk/package_managers.rb
|
88
70
|
- lib/atk/remove_indent.rb
|
89
71
|
- lib/atk/set_command.rb
|
72
|
+
- lib/atk/version.rb
|
90
73
|
- lib/atk/yaml_info_parser.rb
|
91
74
|
- lib/atk/zip.rb
|
92
75
|
- lib/atk_toolbox.rb
|
93
76
|
- lib/atk_toolbox/version.rb
|
94
|
-
- lib/yaml_edit/remove_key.py
|
95
|
-
- lib/yaml_edit/set_key.py
|
96
|
-
- lib/yaml_edit/yaml_edit.rb
|
97
77
|
- test/info.yaml
|
98
78
|
- test/main.rb
|
99
79
|
homepage: http://github.com//atk-toolbox
|
@@ -116,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
96
|
version: '0'
|
117
97
|
requirements: []
|
118
98
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.7.
|
99
|
+
rubygems_version: 2.7.6.2
|
120
100
|
signing_key:
|
121
101
|
specification_version: 4
|
122
102
|
summary: The Ruby gem for all the standard tools ATK uses internally
|
data/lib/yaml_edit/remove_key.py
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
import ruamel.yaml
|
2
|
-
import json
|
3
|
-
import sys
|
4
|
-
|
5
|
-
yaml_string = sys.argv[1]
|
6
|
-
json_key_list = sys.argv[2]
|
7
|
-
|
8
|
-
# a tool from https://stackoverflow.com/questions/14692690/access-nested-dictionary-path-via-a-list-of-keys
|
9
|
-
from functools import reduce # forward compatibility for Python 3
|
10
|
-
import operator
|
11
|
-
def get_by_path(data, path):
|
12
|
-
"""Access a nested object in data by item sequence."""
|
13
|
-
return reduce(operator.getitem, path, data)
|
14
|
-
|
15
|
-
def set_by_path(data, path, value):
|
16
|
-
"""Set a value in a nested object in data by item sequence."""
|
17
|
-
get_by_path(data, path[:-1])[path[-1]] = value
|
18
|
-
|
19
|
-
|
20
|
-
# parse the yaml
|
21
|
-
data = ruamel.yaml.round_trip_load(yaml_string)
|
22
|
-
# parse the path
|
23
|
-
path_to_element = json.loads(json_key_list)
|
24
|
-
# get the parent element
|
25
|
-
path_element = get_by_path(data, path_to_element[:-1])
|
26
|
-
# remove the key
|
27
|
-
del path_element[path_to_element[-1]]
|
28
|
-
# output the data
|
29
|
-
print(ruamel.yaml.round_trip_dump(data))
|
data/lib/yaml_edit/set_key.py
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
import ruamel.yaml
|
2
|
-
import regex as re
|
3
|
-
import json
|
4
|
-
import sys
|
5
|
-
|
6
|
-
yaml_string = sys.argv[1]
|
7
|
-
json_key_list = sys.argv[2]
|
8
|
-
new_key_value = sys.argv[3]
|
9
|
-
|
10
|
-
|
11
|
-
# a tool from https://stackoverflow.com/questions/14692690/access-nested-dictionary-path-via-a-list-of-keys
|
12
|
-
from functools import reduce # forward compatibility for Python 3
|
13
|
-
import operator
|
14
|
-
def get_by_path(data, path):
|
15
|
-
"""Access a nested object in data by item sequence."""
|
16
|
-
return reduce(operator.getitem, path, data)
|
17
|
-
|
18
|
-
def set_by_path(data, path, value):
|
19
|
-
"""Set a value in a nested object in data by item sequence."""
|
20
|
-
get_by_path(data, path[:-1])[path[-1]] = value
|
21
|
-
|
22
|
-
# detect the indent
|
23
|
-
indent_match = re.search(r'^ +', yaml_string, flags=re.MULTILINE)
|
24
|
-
if indent_match == None:
|
25
|
-
indent = 4
|
26
|
-
else:
|
27
|
-
indent = len(indent_match[0])
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# parse the yaml
|
32
|
-
data = ruamel.yaml.round_trip_load(yaml_string)
|
33
|
-
# parse the path
|
34
|
-
path_to_element = json.loads(json_key_list)
|
35
|
-
# parse the new value
|
36
|
-
new_value = json.loads(new_key_value)
|
37
|
-
# set the value
|
38
|
-
set_by_path(data, path_to_element, new_value)
|
39
|
-
# output the data
|
40
|
-
yaml = ruamel.yaml.YAML()
|
41
|
-
yaml.indent(mapping=4, sequence=4, offset=2)
|
42
|
-
yaml.width = float("Infinity")
|
43
|
-
yaml.default_flow_style = False
|
44
|
-
yaml.dump(data, sys.stdout)
|
45
|
-
# print(ruamel.yaml.round_trip_dump(data, indent=indent, block_seq_indent=int(indent/2), width=, default_flow_style=False))
|
data/lib/yaml_edit/yaml_edit.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
require_relative '../atk/os'
|
2
|
-
require_relative '../atk/remove_indent'
|
3
|
-
require 'open3'
|
4
|
-
require 'json'
|
5
|
-
require 'yaml'
|
6
|
-
|
7
|
-
def execute_with_local_python(python_file_path, *args)
|
8
|
-
# save the current directory
|
9
|
-
pwd = Dir.pwd
|
10
|
-
# change to where this file is
|
11
|
-
Dir.chdir __dir__
|
12
|
-
# run the python file with the virtual environment
|
13
|
-
stdout_str, stderr_str, status = Open3.capture3('python3', python_file_path, *args)
|
14
|
-
# change back to the original dir
|
15
|
-
Dir.chdir pwd
|
16
|
-
return [stdout_str, stderr_str, status]
|
17
|
-
end
|
18
|
-
|
19
|
-
module YAML
|
20
|
-
def set_key(yaml_string, key_list, new_value)
|
21
|
-
if not key_list.is_a?(Array)
|
22
|
-
raise "when using YAML.set_key, the second argument needs to be a list of keys"
|
23
|
-
end
|
24
|
-
# run the python file with the virtual environment
|
25
|
-
stdout_str, stderr_str, status = execute_with_local_python('set_key.py', yaml_string, key_list.to_json, new_value.to_json)
|
26
|
-
if not status.success?
|
27
|
-
raise "\n\nFailed to set key in yaml file:\n#{stderr_str}"
|
28
|
-
end
|
29
|
-
return stdout_str
|
30
|
-
end
|
31
|
-
|
32
|
-
def remove_key(yaml_string, key_list)
|
33
|
-
if not key_list.is_a?(Array)
|
34
|
-
raise "when using YAML.remove_key, the second argument needs to be a list of keys"
|
35
|
-
end
|
36
|
-
# run the python file with the virtual environment
|
37
|
-
stdout_str, stderr_str, status = execute_with_local_python('remove_key.py', yaml_string, key_list.to_json)
|
38
|
-
if not status.success?
|
39
|
-
raise "\n\nFailed to remove key in yaml file:\n#{stderr_str}"
|
40
|
-
end
|
41
|
-
return stdout_str
|
42
|
-
end
|
43
|
-
module_function :remove_key, :set_key
|
44
|
-
end
|
45
|
-
|
46
|
-
# yaml_test_string = <<-HEREDOC
|
47
|
-
# foo:
|
48
|
-
# a: 1
|
49
|
-
# b: 2
|
50
|
-
# list:
|
51
|
-
# - 1
|
52
|
-
# - 2
|
53
|
-
# - 3
|
54
|
-
# thing:
|
55
|
-
# a: 10
|
56
|
-
# HEREDOC
|
57
|
-
# puts remove_key(yaml_test_string, ["foo", "list", 2])
|
58
|
-
# puts set_key(yaml_test_string, ["foo", "c"], 3)
|