structurebutcher 0.1.0
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 +7 -0
- data/lib/structurebutcher.rb +126 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dfa37f9b9be3237458a70a0c7938b48090e207f0
|
4
|
+
data.tar.gz: 45358a765341ff44cd9e5d96fb6f4b7c3b30ee9c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3efe06a3ea533b9846a93a9c7603f8e2f7fcbcfb928e6e6a7539465b9e8508876b07f06624f00167aaff3fb9c434c4b1a554cc3788895131dd69549d038b2939
|
7
|
+
data.tar.gz: 289652b9b8c228983b36329e47c89d18b1135730c00eec04a09c2e865b10b503422b8d8347982ef56d4dd8c42970c3ffff647c2c9cbca4a6a1b2e0b72e390a49
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'yaml'
|
3
|
+
require 'java-properties'
|
4
|
+
require 'hocon'
|
5
|
+
require 'hocon/parser/config_document_factory'
|
6
|
+
require 'hocon/config_value_factory'
|
7
|
+
|
8
|
+
#vyndavator, zastamdator
|
9
|
+
#amputovat, implantovat
|
10
|
+
#amputate, implantate
|
11
|
+
|
12
|
+
class StructureButcher
|
13
|
+
def amputate(body, slot)
|
14
|
+
keys = slot.split('.')
|
15
|
+
result = body
|
16
|
+
while (key = keys.shift)
|
17
|
+
result = result[key]
|
18
|
+
end
|
19
|
+
return result
|
20
|
+
end
|
21
|
+
|
22
|
+
def implantate(body, slot, part)
|
23
|
+
keys = slot.split('.')
|
24
|
+
last_key = keys.pop
|
25
|
+
area = body
|
26
|
+
while (key = keys.shift)
|
27
|
+
area = area[key] #TODO: create hash if not exists
|
28
|
+
end
|
29
|
+
area[last_key] = part
|
30
|
+
end
|
31
|
+
|
32
|
+
def amputate_file(body_file, slot, part_file, format)
|
33
|
+
parser = StructureButcher::Parser.new
|
34
|
+
body = parser.load_structure(body_file, "yaml")
|
35
|
+
|
36
|
+
butcher = StructureButcher.new
|
37
|
+
part = butcher.amputate(body, slot)
|
38
|
+
|
39
|
+
storer = StructureButcher::Storer.new
|
40
|
+
storer.save_structure(part, part_file, format)
|
41
|
+
end
|
42
|
+
|
43
|
+
def implantate_file(body_file, slot, part_file, format)
|
44
|
+
parser = StructureButcher::Parser.new
|
45
|
+
body = parser.load_structure(body_file, "yaml")
|
46
|
+
part = parser.load_structure(part_file, format)
|
47
|
+
|
48
|
+
butcher = StructureButcher.new
|
49
|
+
part = butcher.implantate(body, slot, part)
|
50
|
+
|
51
|
+
storer = StructureButcher::Storer.new
|
52
|
+
storer.save_structure(body, body_file, "yaml")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class StructureButcher::Parser
|
57
|
+
def load_structure(filename, format)
|
58
|
+
case format
|
59
|
+
when "json"
|
60
|
+
return load_json(filename)
|
61
|
+
when "yaml"
|
62
|
+
return load_yaml(filename)
|
63
|
+
when "properties"
|
64
|
+
return load_properties(filename)
|
65
|
+
when "hocon"
|
66
|
+
return load_hocon(filename)
|
67
|
+
else
|
68
|
+
throw "Not implemented"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def recursive_stringify_keys(h)
|
73
|
+
case h
|
74
|
+
when Hash
|
75
|
+
Hash[
|
76
|
+
h.map do |k, v|
|
77
|
+
[ k.respond_to?(:to_s) ? k.to_s : k,
|
78
|
+
recursive_stringify_keys(v)
|
79
|
+
]
|
80
|
+
end
|
81
|
+
]
|
82
|
+
when Enumerable
|
83
|
+
h.map { |v| recursive_stringify_keys(v) }
|
84
|
+
else
|
85
|
+
h
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def load_json(filename)
|
90
|
+
file = File.read(filename)
|
91
|
+
return recursive_stringify_keys(JSON.parse(file))
|
92
|
+
end
|
93
|
+
|
94
|
+
def load_yaml(filename)
|
95
|
+
return recursive_stringify_keys(YAML.load_file(filename))
|
96
|
+
end
|
97
|
+
|
98
|
+
def load_properties(filename)
|
99
|
+
return recursive_stringify_keys(JavaProperties.load(filename))
|
100
|
+
end
|
101
|
+
|
102
|
+
def load_hocon(filename)
|
103
|
+
return recursive_stringify_keys(Hocon.load(filename))
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class StructureButcher::Storer
|
108
|
+
def structure_in_format(structure, format)
|
109
|
+
case format
|
110
|
+
when "json"
|
111
|
+
return JSON.generate(structure)
|
112
|
+
when "yaml"
|
113
|
+
return structure.to_yaml
|
114
|
+
when "properties"
|
115
|
+
return JavaProperties.generate(structure)
|
116
|
+
when "hocon"
|
117
|
+
return JSON.generate(structure) #FIXME
|
118
|
+
else
|
119
|
+
throw "Unsupported format"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def save_structure(structure, filename, format)
|
124
|
+
File.write(filename, structure_in_format(structure, format))
|
125
|
+
end
|
126
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: structurebutcher
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Miroslav Tynovsky
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hocon
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.3
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: java-properties
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.2
|
55
|
+
description: Take config and put it to YAML under specific key
|
56
|
+
email: tynovsky@avast.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/structurebutcher.rb
|
62
|
+
homepage: https://github.com/tynovsky/structurebutcher
|
63
|
+
licenses:
|
64
|
+
- MIT
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.4.8
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: Config saver/restorer
|
86
|
+
test_files: []
|