Class: AutomateIt::TagManager::TagParser
- Includes:
- Nitpick
- Defined in:
- lib/automateit/tag_manager/tag_parser.rb
Overview
TagManager::TagParser
Helper class for parsing tags. Not useful for users – for internal use only.
Constant Summary collapse
- HOSTS_FOR_VALUE =
/(.+?)/
- HOSTS_FOR_INCLUDE_TAG_RE =
/^INCLUDE_TAG #{HOSTS_FOR_VALUE}$/
- HOSTS_FOR_EXCLUDE_TAG_RE =
/^EXCLUDE_TAG #{HOSTS_FOR_VALUE}$/
- HOSTS_FOR_EXCLUDE_HOST_RE =
/^EXCLUDE_HOST #{HOSTS_FOR_VALUE}$/
Instance Attribute Summary collapse
-
#struct ⇒ Object
Returns the value of attribute struct.
Class Method Summary collapse
-
.expand(struct) ⇒ Object
Expand the
struct
. -
.normalize(text) ⇒ Object
Normalize a block of text to replace shortcut symbols that cause YAML to choke.
Instance Method Summary collapse
-
#expand ⇒ Object
Expand the include/exclude/group rules and return a struct with only the hosts these rules produce.
-
#expand! ⇒ Object
Replace the internal struct with an expanded version, see #expand.
-
#hosts_for(tag) ⇒ Object
Return array of hosts for the
tag
. -
#initialize(struct) ⇒ TagParser
constructor
Create a parser for the
struct
, a hash of tag keys to values with arrays of items. -
#normalize! ⇒ Object
Normalize the contents of the internal struct.
-
#tags ⇒ Object
Return array of tags.
Methods included from Nitpick
Methods included from Nitpick::ClassMethods
Constructor Details
#initialize(struct) ⇒ TagParser
Create a parser for the struct
, a hash of tag keys to values with arrays of items.
10 11 12 13 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 10 def initialize(struct) self.struct = struct normalize! end |
Instance Attribute Details
#struct ⇒ Object
Returns the value of attribute struct.
7 8 9 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 7 def struct @struct end |
Class Method Details
.expand(struct) ⇒ Object
Expand the struct
.
90 91 92 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 90 def self.(struct) self.new(struct). end |
.normalize(text) ⇒ Object
Normalize a block of text to replace shortcut symbols that cause YAML to choke.
16 17 18 19 20 21 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 16 def self.normalize(text) return text \ .gsub(/^(\s*-\s+)(!@)/, '\1EXCLUDE_TAG ') \ .gsub(/^(\s*-\s+)(!)/, '\1EXCLUDE_HOST ') \ .gsub(/^(\s*-\s+)(@)/, '\1INCLUDE_TAG ') end |
Instance Method Details
#expand ⇒ Object
Expand the include/exclude/group rules and return a struct with only the hosts these rules produce.
76 77 78 79 80 81 82 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 76 def result = {} for tag in result[tag] = hosts_for(tag) end result end |
#expand! ⇒ Object
Replace the internal struct with an expanded version, see #expand.
85 86 87 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 85 def struct.replace() end |
#hosts_for(tag) ⇒ Object
Return array of hosts for the tag
.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 42 def hosts_for(tag) raise IndexError.new("Unknown tag - #{tag}") unless struct.has_key?(tag) return [] if struct[tag].nil? # Tag has no leaves nitpick "\nAA %s" % tag hosts = Set.new for item in struct[tag] case item when HOSTS_FOR_INCLUDE_TAG_RE nitpick "+g %s" % $1 hosts.merge(hosts_for($1)) when HOSTS_FOR_EXCLUDE_TAG_RE nitpick "-g %s" % $1 hosts.subtract(hosts_for($1)) when HOSTS_FOR_EXCLUDE_HOST_RE nitpick "-h %s" % $1 hosts.delete($1) else nitpick "+h %s" % item hosts << item end end result = hosts.to_a nitpick "ZZ %s for %s" % [result.inspect, tag] return result end |
#normalize! ⇒ Object
Normalize the contents of the internal struct.
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 24 def normalize! for tag, items in struct next unless items for item in items next unless item item.gsub!(/^(\!@|\^@)\s*/, 'EXCLUDE_TAG ') item.gsub!(/^(\!|\^)\s*/, 'EXCLUDE_HOST ') item.gsub!(/^(@)\s*/, 'INCLUDE_TAG ') end end end |
#tags ⇒ Object
Return array of tags.
70 71 72 |
# File 'lib/automateit/tag_manager/tag_parser.rb', line 70 def return struct.keys end |