state_mate 0.0.6 → 0.0.7
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/state_mate/adapters/yaml.rb +85 -0
- data/lib/state_mate/adapters.rb +1 -0
- data/lib/state_mate/version.rb +1 -1
- data/lib/state_mate.rb +64 -1
- data/state_mate.gemspec +1 -0
- metadata +24 -5
- data/ansible/library/state +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e41284705be1f86eac6d6e3d67e0867fae16c30
|
4
|
+
data.tar.gz: b89e28497de8c95c21226c873bcb0bc84d453139
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcf1b94b353247bad4191400d91ad633b32c1197e7b46a12c1d8ed2a81a5349d9fd3af3a72748a64d85c6b9fe22cc8465e2f8c8e2253abab523b6e18e3204f71
|
7
|
+
data.tar.gz: b766eeee693b372c6abf79a91d0e8eeb6a2d0913334196219982ac6030626e2f2ae7a9420fbfbf843760b9cd46fc47ce288f8377e26caa032ea7bdde4e23a889
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'diffable_yaml'
|
3
|
+
|
4
|
+
require 'state_mate'
|
5
|
+
require 'state_mate/adapters/defaults'
|
6
|
+
|
7
|
+
module StateMate::Adapters::YAML
|
8
|
+
include StateMate::Adapters
|
9
|
+
register 'yaml'
|
10
|
+
|
11
|
+
@preorder = []
|
12
|
+
|
13
|
+
def self.preorder= keys
|
14
|
+
@preorder = keys
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.parse_key key
|
18
|
+
# use the same key seperation as Defaults
|
19
|
+
StateMate::Adapters::Defaults.parse_key key
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.cast_seg key_seg
|
23
|
+
if key_seg =~ /\A[0-9]+\z/
|
24
|
+
key_seg.to_i
|
25
|
+
else
|
26
|
+
key_seg
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.read key, options = {}
|
31
|
+
filepath, key_segs = parse_key key
|
32
|
+
|
33
|
+
contents = File.read(File.expand_path(filepath))
|
34
|
+
|
35
|
+
value = ::YAML.load contents
|
36
|
+
|
37
|
+
key_segs.each do |seg|
|
38
|
+
seg = cast_seg seg
|
39
|
+
|
40
|
+
value = case value
|
41
|
+
when Hash, Array
|
42
|
+
value = value[seg]
|
43
|
+
else
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
value
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.write key, value, options = {}
|
52
|
+
StateMate.debug key: key, value: value, options: options
|
53
|
+
|
54
|
+
filepath, key_segs = parse_key key
|
55
|
+
|
56
|
+
new_root = if key_segs.length > 1
|
57
|
+
root = read filepath
|
58
|
+
|
59
|
+
deep_write! root, key_segs, value
|
60
|
+
|
61
|
+
root
|
62
|
+
else
|
63
|
+
value
|
64
|
+
end
|
65
|
+
|
66
|
+
content = DiffableYAML.dump new_root, preorder: @preorder
|
67
|
+
|
68
|
+
File.open(filepath, 'w') do |f|
|
69
|
+
f.write content
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.deep_write! obj, key_segs, value
|
74
|
+
seg = cast_seg key_segs.first
|
75
|
+
rest = key_segs[1..-1]
|
76
|
+
|
77
|
+
if rest.empty?
|
78
|
+
obj[seg] = value
|
79
|
+
|
80
|
+
else
|
81
|
+
deep_write! obj[seg], rest, value
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end # YAML
|
data/lib/state_mate/adapters.rb
CHANGED
data/lib/state_mate/version.rb
CHANGED
data/lib/state_mate.rb
CHANGED
@@ -9,6 +9,8 @@ require "state_mate/error"
|
|
9
9
|
require "state_mate/adapters"
|
10
10
|
|
11
11
|
module StateMate
|
12
|
+
@debug = false
|
13
|
+
@debug_mode = 'a'
|
12
14
|
|
13
15
|
DIRECTIVES = Set.new [
|
14
16
|
:set,
|
@@ -67,6 +69,16 @@ module StateMate
|
|
67
69
|
key = nil
|
68
70
|
directives = []
|
69
71
|
type_name = nil
|
72
|
+
unset_when_false = false
|
73
|
+
|
74
|
+
# the :unset_when option can be provided to change the directive to
|
75
|
+
# :unset when the option's value is true.
|
76
|
+
#
|
77
|
+
# this is useful for things that should simply unset the key when
|
78
|
+
# turned off instead of setting it to false or something.
|
79
|
+
#
|
80
|
+
unset_when = nil
|
81
|
+
|
70
82
|
options = state['options'] || {}
|
71
83
|
|
72
84
|
unless options.is_a? Hash
|
@@ -94,6 +106,10 @@ module StateMate
|
|
94
106
|
directives << [k, v]
|
95
107
|
elsif k == :type
|
96
108
|
type_name = v
|
109
|
+
elsif k == :unset_when_false
|
110
|
+
unset_when_false = v
|
111
|
+
elsif k == :unset_when
|
112
|
+
unset_when = StateMate.cast 'bool', v
|
97
113
|
else
|
98
114
|
# any other keys are set as options
|
99
115
|
# this is a little convience feature that avoids having to
|
@@ -126,7 +142,20 @@ module StateMate
|
|
126
142
|
raise "multiple directives found in #{ state.inspect }"
|
127
143
|
end
|
128
144
|
|
129
|
-
|
145
|
+
# handle :unset_when_false option, which changes the operation to
|
146
|
+
# an unset when the *directive value* is explicity false
|
147
|
+
if unset_when_false &&
|
148
|
+
(value === false || ['False', 'false'].include?(value))
|
149
|
+
directive = :unset
|
150
|
+
value = nil
|
151
|
+
|
152
|
+
# handle :unset_when, which also changes the operation to :unset
|
153
|
+
# when the option's value is true.
|
154
|
+
elsif unset_when
|
155
|
+
directive = :unset
|
156
|
+
value = nil
|
157
|
+
|
158
|
+
elsif type_name
|
130
159
|
value = StateMate.cast type_name, value
|
131
160
|
end
|
132
161
|
|
@@ -277,6 +306,40 @@ module StateMate
|
|
277
306
|
end # rollback
|
278
307
|
end # StateSet
|
279
308
|
|
309
|
+
# @api dev
|
310
|
+
#
|
311
|
+
# turns debug on or off
|
312
|
+
#
|
313
|
+
# @param mode [Boolean|String]
|
314
|
+
# if a string, enables and sets the debug file mode (use 'a' or 'w').
|
315
|
+
# if a boolean, sets enabled.
|
316
|
+
#
|
317
|
+
def self.debug= mode
|
318
|
+
if mode.is_a? String
|
319
|
+
@debug_mode = mode
|
320
|
+
end
|
321
|
+
@debug = !!mode
|
322
|
+
end
|
323
|
+
|
324
|
+
def self.debug *messages
|
325
|
+
return unless @debug
|
326
|
+
|
327
|
+
@debug_file ||= File.open('./state_mate.debug.log', @debug_mode)
|
328
|
+
|
329
|
+
messages.each_with_index do |message, index|
|
330
|
+
if index == 0
|
331
|
+
@debug_file.write 'DEBUG '
|
332
|
+
end
|
333
|
+
|
334
|
+
if message.is_a? String
|
335
|
+
@debug_file.puts message
|
336
|
+
else
|
337
|
+
@debug_file.puts
|
338
|
+
PP.pp(message, @debug_file)
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
280
343
|
# @api util
|
281
344
|
# *pure*
|
282
345
|
#
|
data/state_mate.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: state_mate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nrser
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -148,6 +148,26 @@ dependencies:
|
|
148
148
|
- - ">="
|
149
149
|
- !ruby/object:Gem::Version
|
150
150
|
version: 0.0.9
|
151
|
+
- !ruby/object:Gem::Dependency
|
152
|
+
name: diffable_yaml
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - "~>"
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.0'
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 0.0.2
|
161
|
+
type: :runtime
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0.0'
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: 0.0.2
|
151
171
|
description: |
|
152
172
|
helps manage state on OSX by wrapping system commands like `defaults`, `nvram`,
|
153
173
|
`lanuchctl`, `scutil` and more.
|
@@ -164,7 +184,6 @@ files:
|
|
164
184
|
- LICENSE.txt
|
165
185
|
- README.md
|
166
186
|
- Rakefile
|
167
|
-
- ansible/library/state
|
168
187
|
- bin/console
|
169
188
|
- lib/state_mate.rb
|
170
189
|
- lib/state_mate/adapters.rb
|
@@ -176,6 +195,7 @@ files:
|
|
176
195
|
- lib/state_mate/adapters/pmset.rb
|
177
196
|
- lib/state_mate/adapters/scutil.rb
|
178
197
|
- lib/state_mate/adapters/time_machine.rb
|
198
|
+
- lib/state_mate/adapters/yaml.rb
|
179
199
|
- lib/state_mate/error.rb
|
180
200
|
- lib/state_mate/version.rb
|
181
201
|
- notes/state-set-steps.md
|
@@ -200,9 +220,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
220
|
version: '0'
|
201
221
|
requirements: []
|
202
222
|
rubyforge_project:
|
203
|
-
rubygems_version: 2.
|
223
|
+
rubygems_version: 2.6.4
|
204
224
|
signing_key:
|
205
225
|
specification_version: 4
|
206
226
|
summary: i heard it's meant to help you with your state, mate!
|
207
227
|
test_files: []
|
208
|
-
has_rdoc:
|
data/ansible/library/state
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# WANT JSON
|
3
|
-
|
4
|
-
require 'json'
|
5
|
-
require 'shellwords'
|
6
|
-
require 'pp'
|
7
|
-
|
8
|
-
require 'bundler/setup'
|
9
|
-
|
10
|
-
require 'nrser'
|
11
|
-
require 'state_mate'
|
12
|
-
|
13
|
-
using NRSER
|
14
|
-
|
15
|
-
MODULE_COMPLEX_ARGS = "<<INCLUDE_ANSIBLE_MODULE_COMPLEX_ARGS>>"
|
16
|
-
|
17
|
-
def parse input
|
18
|
-
# require 'shellwords'
|
19
|
-
parsed = {}
|
20
|
-
Shellwords.split(input).each do |word|
|
21
|
-
(key, value) = word.split('=', 2)
|
22
|
-
parsed[key] = value
|
23
|
-
end
|
24
|
-
unless MODULE_COMPLEX_ARGS.empty?
|
25
|
-
parsed.update JSON.load(MODULE_COMPLEX_ARGS)
|
26
|
-
end
|
27
|
-
parsed
|
28
|
-
end
|
29
|
-
|
30
|
-
def main
|
31
|
-
input = nil
|
32
|
-
args = nil
|
33
|
-
changed = false
|
34
|
-
|
35
|
-
begin
|
36
|
-
input = File.read ARGV[0]
|
37
|
-
args = parse input
|
38
|
-
|
39
|
-
spec = args
|
40
|
-
|
41
|
-
changes = StateMate.execute spec
|
42
|
-
|
43
|
-
print JSON.dump({
|
44
|
-
'changed' => !changes.empty?,
|
45
|
-
'changes' => changes,
|
46
|
-
})
|
47
|
-
rescue Exception => e
|
48
|
-
print JSON.dump({
|
49
|
-
'failed' => true,
|
50
|
-
'msg' => e.format,
|
51
|
-
# 'input' => input,
|
52
|
-
'args' => args,
|
53
|
-
# 'ARGV' => ARGV,
|
54
|
-
# 'ruby' => RUBY_VERSION,
|
55
|
-
})
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
main if __FILE__ == $0
|