Class: Kitchen::StateFile
- Inherits:
-
Object
- Object
- Kitchen::StateFile
- Defined in:
- lib/kitchen/state_file.rb
Overview
State persistence manager for instances between actions and invocations.
Instance Method Summary collapse
-
#destroy ⇒ Object
Destroys a state file on disk if it exists.
-
#diagnose ⇒ Hash
Returns a Hash of configuration and other useful diagnostic information.
-
#initialize(kitchen_root, name) ⇒ StateFile
constructor
Constructs an new instance taking the kitchen root and instance name.
-
#read ⇒ Hash
Reads and loads an instance’s state into a Hash data structure which is returned.
-
#write(state) ⇒ Object
Serializes the state hash and writes a state file to disk.
Constructor Details
#initialize(kitchen_root, name) ⇒ StateFile
Constructs an new instance taking the kitchen root and instance name.
33 34 35 36 37 |
# File 'lib/kitchen/state_file.rb', line 33 def initialize(kitchen_root, name) @file_name = File.( File.join(kitchen_root, ".kitchen", "#{name}.yml") ) end |
Instance Method Details
#destroy ⇒ Object
Destroys a state file on disk if it exists.
65 66 67 |
# File 'lib/kitchen/state_file.rb', line 65 def destroy FileUtils.rm_f(file_name) if File.exist?(file_name) end |
#diagnose ⇒ Hash
Returns a Hash of configuration and other useful diagnostic information.
72 73 74 75 76 77 |
# File 'lib/kitchen/state_file.rb', line 72 def diagnose raw = read result = {} raw.keys.sort.each { |k| result[k] = raw[k] } result end |
#read ⇒ Hash
Reads and loads an instance’s state into a Hash data structure which is returned.
45 46 47 48 49 50 51 |
# File 'lib/kitchen/state_file.rb', line 45 def read if File.exist?(file_name) && !File.zero?(file_name) Util.symbolized_hash(deserialize_string(read_file)) else {} end end |
#write(state) ⇒ Object
Serializes the state hash and writes a state file to disk.
56 57 58 59 60 61 62 |
# File 'lib/kitchen/state_file.rb', line 56 def write(state) dir = File.dirname(file_name) serialized_string = serialize_hash(Util.stringified_hash(state)) FileUtils.mkdir_p(dir) unless File.directory?(dir) File.open(file_name, "wb") { |f| f.write(serialized_string) } end |