yamled 0.0.1
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/LICENSE +0 -0
- data/README.md +3 -0
- data/bin/yamled +9 -0
- data/config/environment.rb +6 -0
- data/lib/yamled.rb +8 -0
- data/lib/yamled/actions.rb +65 -0
- data/lib/yamled/cli.rb +108 -0
- data/lib/yamled/errors.rb +6 -0
- data/lib/yamled/io.rb +78 -0
- metadata +54 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2b12e52914e467ff844a439d5f5b8c4e0548b1e3
|
4
|
+
data.tar.gz: da67aa74da30518e7cd91044def6e9219c617038
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8572666d707130e363c9f70d6cdf30e906b3133927c827313fe9793a2691cdc26a266e6cc798c1360f7a92af8b145de7db72d470ee47ed3847b7d634261ff3df
|
7
|
+
data.tar.gz: 313b166b2f4f29a4dcf4ad432afc44315cdf6204b7a155cbf34db8c59874f16634e198ef47634314a640f1b65402bb4137afffbf37b0638c1cf9f0d96597b119
|
data/LICENSE
ADDED
File without changes
|
data/README.md
ADDED
data/bin/yamled
ADDED
data/lib/yamled.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
module Yamled
|
2
|
+
module ReprintAction
|
3
|
+
class << self
|
4
|
+
def run(options, input, output, logger)
|
5
|
+
data = input.get_data
|
6
|
+
# puts "ReprintAction: data=#{data.inspect}"
|
7
|
+
output.print_data data
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module ReadAction
|
13
|
+
class << self
|
14
|
+
def run(options, input, output, logger)
|
15
|
+
path = options[:path]
|
16
|
+
data = input.get_data
|
17
|
+
# puts "ReadAction: data=#{data.inspect}"
|
18
|
+
node = data
|
19
|
+
if !path.nil?
|
20
|
+
steps = path.split("/")
|
21
|
+
while steps.count > 0
|
22
|
+
step = steps.shift
|
23
|
+
node = node[step]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
output.print_value node
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module WriteAction
|
32
|
+
class << self
|
33
|
+
def run(options, input, output, logger)
|
34
|
+
path = options[:path]
|
35
|
+
value = options[:value]
|
36
|
+
data = input.get_data
|
37
|
+
parent = nil
|
38
|
+
step = nil
|
39
|
+
node = data
|
40
|
+
if !path.nil?
|
41
|
+
steps = path.split("/")
|
42
|
+
while steps.count > 0
|
43
|
+
step = steps.shift
|
44
|
+
parent = node
|
45
|
+
node = node[step]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
if !parent.nil?
|
50
|
+
parent[step] = value
|
51
|
+
else
|
52
|
+
data = value
|
53
|
+
end
|
54
|
+
|
55
|
+
output.print_value data
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
Actions = {
|
61
|
+
reprint: ReprintAction,
|
62
|
+
get: ReadAction,
|
63
|
+
set: WriteAction
|
64
|
+
}
|
65
|
+
end
|
data/lib/yamled/cli.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
module Yamled
|
2
|
+
module CLI
|
3
|
+
class << self
|
4
|
+
def run(argv:,stdin:,stdout:,stderr:)
|
5
|
+
|
6
|
+
options, input, output, logger = setup_io(
|
7
|
+
Options.load(argv),
|
8
|
+
stdin,
|
9
|
+
stdout,
|
10
|
+
stderr)
|
11
|
+
|
12
|
+
action_id = options.delete(:action)
|
13
|
+
action = Yamled::Actions[action_id]
|
14
|
+
action.run(options, input, output, logger)
|
15
|
+
|
16
|
+
input.close
|
17
|
+
output.close
|
18
|
+
logger.close
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def setup_io(options, stdin, stdout, stderr)
|
24
|
+
options = options.dup
|
25
|
+
|
26
|
+
infile = options.delete(:infile)
|
27
|
+
instream = if infile == :stdin
|
28
|
+
stdin
|
29
|
+
else
|
30
|
+
File.open(infile, "r")
|
31
|
+
end
|
32
|
+
|
33
|
+
outfile = options.delete(:outfile)
|
34
|
+
outstream = if outfile == :stdout
|
35
|
+
stdout
|
36
|
+
else
|
37
|
+
File.open(outfile, "wb")
|
38
|
+
end
|
39
|
+
|
40
|
+
logfile = options.delete(:logfile)
|
41
|
+
logstream = if logfile == :stderr
|
42
|
+
stderr
|
43
|
+
elsif logfile == :stdout
|
44
|
+
stdout
|
45
|
+
else
|
46
|
+
File.open(logfile, "wb")
|
47
|
+
end
|
48
|
+
|
49
|
+
input = Yamled::IO.input_from(instream)
|
50
|
+
output = Yamled::IO.output_to(outstream)
|
51
|
+
logger = Yamled::IO.log_to(stderr)
|
52
|
+
|
53
|
+
return [options, input, output, logger]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
module Options
|
58
|
+
Defaults = {
|
59
|
+
infile: :stdin,
|
60
|
+
outfile: :stdout,
|
61
|
+
logfile: :stderr,
|
62
|
+
action: :reprint,
|
63
|
+
}
|
64
|
+
|
65
|
+
class << self
|
66
|
+
def load(argv)
|
67
|
+
argv_dup = argv.dup
|
68
|
+
|
69
|
+
options = Defaults
|
70
|
+
|
71
|
+
require 'optparse'
|
72
|
+
parser = OptionParser.new do |opts|
|
73
|
+
opts.banner = "Usage: yamled [options]"
|
74
|
+
|
75
|
+
opts.on("-g", "--get [PATH]", String, "Read a value at a path.") do |path|
|
76
|
+
options[:action] = :get
|
77
|
+
options[:path] = path
|
78
|
+
end
|
79
|
+
opts.on("-s", "--set [PATH]", String, "Write a value at a path. Requires --value option.") do |path|
|
80
|
+
options[:action] = :set
|
81
|
+
options[:path] = path
|
82
|
+
end
|
83
|
+
opts.on("-r", "--set-root", String, "Write a value at the root. Requires --value option.") do |path|
|
84
|
+
options[:action] = :set
|
85
|
+
options[:path] = ""
|
86
|
+
end
|
87
|
+
opts.on("-v", "--value [VALUE]", String, "Value to set at the location of --path.") do |strval|
|
88
|
+
options[:value] = YAML.load(strval)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
begin
|
93
|
+
parser.parse!(argv_dup)
|
94
|
+
return validate(options)
|
95
|
+
rescue => e
|
96
|
+
puts e.message
|
97
|
+
puts parser.help
|
98
|
+
exit Yamled::Errors::BadOptions
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def validate(options)
|
103
|
+
options
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
data/lib/yamled/io.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
module Yamled
|
2
|
+
module IO
|
3
|
+
EmptyData = nil
|
4
|
+
|
5
|
+
class Base
|
6
|
+
attr_reader :io
|
7
|
+
def initialize(io)
|
8
|
+
@io = io
|
9
|
+
end
|
10
|
+
|
11
|
+
def close
|
12
|
+
@io.close
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Input < Base
|
17
|
+
require 'yaml'
|
18
|
+
def get_data
|
19
|
+
input = io.read
|
20
|
+
if input.strip == ''
|
21
|
+
return EmptyData
|
22
|
+
else
|
23
|
+
YAML.load(input)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class Output < Base
|
29
|
+
require 'yaml'
|
30
|
+
def print_data(data)
|
31
|
+
if data == IO::EmptyData
|
32
|
+
print_empty
|
33
|
+
else
|
34
|
+
io.print YAML.dump(data)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def print_value(v)
|
39
|
+
str = case v
|
40
|
+
when Hash, Array
|
41
|
+
YAML.dump(v)
|
42
|
+
when nil
|
43
|
+
''
|
44
|
+
else
|
45
|
+
v.inspect
|
46
|
+
end
|
47
|
+
io.print str
|
48
|
+
end
|
49
|
+
|
50
|
+
def print_empty
|
51
|
+
io.print ''
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class Logger < Base
|
56
|
+
def initialize(io)
|
57
|
+
@io = io
|
58
|
+
end
|
59
|
+
def log(str)
|
60
|
+
io.puts ">> #{str}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class << self
|
65
|
+
def input_from(in_io)
|
66
|
+
Input.new(in_io)
|
67
|
+
end
|
68
|
+
|
69
|
+
def output_to(out_io)
|
70
|
+
Output.new(out_io)
|
71
|
+
end
|
72
|
+
|
73
|
+
def log_to(out_io)
|
74
|
+
Logger.new(out_io)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yamled
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Crosby
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-02 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Read and write YAML docs and values from the command line. Enables YAML
|
14
|
+
data use and generation in shell scripts.
|
15
|
+
email: dcrosby42@gmail.com
|
16
|
+
executables:
|
17
|
+
- yamled
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- LICENSE
|
22
|
+
- README.md
|
23
|
+
- bin/yamled
|
24
|
+
- config/environment.rb
|
25
|
+
- lib/yamled.rb
|
26
|
+
- lib/yamled/actions.rb
|
27
|
+
- lib/yamled/cli.rb
|
28
|
+
- lib/yamled/errors.rb
|
29
|
+
- lib/yamled/io.rb
|
30
|
+
homepage: http://github.com/dcrosby42/yamled
|
31
|
+
licenses:
|
32
|
+
- MIT
|
33
|
+
metadata: {}
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirements: []
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 2.4.5.1
|
51
|
+
signing_key:
|
52
|
+
specification_version: 4
|
53
|
+
summary: YAML CLI editor
|
54
|
+
test_files: []
|