Sha256: e17c0fc3bc4d5ac3942977c996ae795821549415929315158ebff3ff271b8ef7

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

module HasMachineTags
  class TagList < Array
    cattr_accessor :delimiter
    self.delimiter = ','
    cattr_accessor :default_predicate
    self.default_predicate = 'tags'
    QUICK_MODE_DELIMITER = ';'
  
    # ==== Options:
    # [:quick_mode]  
    #   When true enables a quick mode for inputing multiple machine tags under the same namespace.
    #   These machine tags are delimited by QUICK_MODE_DELIMITER. If a predicate is not specified, default_predicate() is used.
    #     Examples:
    #     # Namespace is added to tag 'type=test'.
    #     HasMachineTags::TagList.new("gem:name=flog;type=test, user:name=seattlerb", :quick_mode=>true)
    #     => ["gem:name=flog", "gem:type=test", "user:name=seattlerb"]
    #
    #     # Namespace and default predicate (tags) are added to tag 'git'.
    #     HasMachineTags::TagList.new("gem:name=grit;git, user:name=mojombo")
    #     => ["gem:name=grit", "gem:tags=git", "user:name=mojombo"]
    def initialize(string_or_array, options={})
      @options = options
      array = string_or_array.is_a?(Array) ? string_or_array : string_or_array.split(/\s*#{delimiter}\s*/)
      array = parse_quick_mode(array) if @options[:quick_mode]
      concat array
    end
    
    def parse_quick_mode(mtag_list) #:nodoc:
      mtag_list = mtag_list.map {|e|
        if e.include?(Tag::PREDICATE_DELIMITER)
          namespace, remainder = e.split(Tag::PREDICATE_DELIMITER)
          remainder.split(QUICK_MODE_DELIMITER).map {|e| 
            e.include?(Tag::VALUE_DELIMITER) ? "#{namespace}#{Tag::PREDICATE_DELIMITER}#{e}" :
            Tag.build_machine_tag(namespace, default_predicate, e)
          }
        else
          e
        end
      }.flatten
    end
  
    def to_s #:nodoc:
      join("#{delimiter} ")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cldwalker-has_machine_tags-0.1.4 lib/has_machine_tags/tag_list.rb