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 |