Class: Vagrant::Util::StringBlockEditor
- Inherits:
-
Object
- Object
- Vagrant::Util::StringBlockEditor
- Defined in:
- lib/vagrant/util/string_block_editor.rb
Overview
This class modifies strings by creating and managing Vagrant-owned “blocks” via wrapping them in specially formed comments.
This is useful when modifying a file that someone else owns and adding automatic entries into it. Example: /etc/exports or some other configuration file.
Vagrant marks ownership of a block in the string by wrapping it in VAGRANT-BEGIN and VAGRANT-END comments with a unique ID. Example:
foo
# VAGRANT-BEGIN: id
some contents
created by vagrant
# VAGRANT-END: id
The goal of this class is to be able to insert and remove these blocks without modifying anything else in the string.
The strings usually come from files but it is up to the caller to manage the file resource.
Instance Attribute Summary collapse
-
#value ⇒ String
readonly
The current string value.
Instance Method Summary collapse
-
#delete(key) ⇒ Object
This deletes the block with the given key if it exists.
-
#get(key) ⇒ Object
This gets the value of the block with the given key.
-
#initialize(string) ⇒ StringBlockEditor
constructor
A new instance of StringBlockEditor.
-
#insert(key, value) ⇒ Object
This inserts a block with the given key and value.
-
#keys ⇒ <Array<String>]
This returns the keys (or ids) that are in the string.
Constructor Details
#initialize(string) ⇒ StringBlockEditor
Returns a new instance of StringBlockEditor.
31 32 33 |
# File 'lib/vagrant/util/string_block_editor.rb', line 31 def initialize(string) @value = string end |
Instance Attribute Details
#value ⇒ String (readonly)
The current string value. This is the value that is modified by the methods below.
29 30 31 |
# File 'lib/vagrant/util/string_block_editor.rb', line 29 def value @value end |
Instance Method Details
#delete(key) ⇒ Object
This deletes the block with the given key if it exists.
46 47 48 49 50 |
# File 'lib/vagrant/util/string_block_editor.rb', line 46 def delete(key) key = Regexp.quote(key) regexp = /^#\s*VAGRANT-BEGIN:\s*#{key}$.*^#\s*VAGRANT-END:\s*#{key}$\r?\n?/m @value.gsub!(regexp, "") end |
#get(key) ⇒ Object
This gets the value of the block with the given key.
53 54 55 56 57 58 59 |
# File 'lib/vagrant/util/string_block_editor.rb', line 53 def get(key) key = Regexp.quote(key) regexp = /^#\s*VAGRANT-BEGIN:\s*#{key}$\r?\n?(.*?)\r?\n?^#\s*VAGRANT-END:\s*#{key}$\r?\n?/m match = regexp.match(@value) return nil if !match match[1] end |
#insert(key, value) ⇒ Object
This inserts a block with the given key and value.
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/vagrant/util/string_block_editor.rb', line 65 def insert(key, value) # Insert the new block into the value new_block = <<BLOCK # VAGRANT-BEGIN: #{key} #{value.strip} # VAGRANT-END: #{key} BLOCK @value << new_block end |
#keys ⇒ <Array<String>]
This returns the keys (or ids) that are in the string.
38 39 40 41 42 43 |
# File 'lib/vagrant/util/string_block_editor.rb', line 38 def keys regexp = /^#\s*VAGRANT-BEGIN:\s*(.+?)$\r?\n?(.*)$\r?\n?^#\s*VAGRANT-END:\s(\1)$/m @value.scan(regexp).map do |match| match[0] end end |