Module: HasMachineTags::TagMethods::ClassMethods
- Defined in:
- lib/has_machine_tags/tag_methods.rb
Instance Method Summary collapse
-
#build_machine_tag(namespace, predicate, value) ⇒ Object
Builds a machine tag string given namespace, predicate and value.
-
#extract_from_name(tag_name) ⇒ Object
:nodoc:.
-
#machine_tag?(machine_tag) ⇒ Boolean
Boolean indicating if given tag is a machine tag.
-
#machine_tags(name) ⇒ Object
Takes a wildcard machine tag and returns matching tags.
-
#match_wildcard_machine_tag(name) ⇒ Object
Valid wildcards with their equivalent shortcuts namespace:*=* -> namespace: :predicate= -> predicate= :=value -> :value.
-
#split_machine_tag(machine_tag) ⇒ Object
Returns an array of machine tag parts: [namespace, predicate, value].
Instance Method Details
#build_machine_tag(namespace, predicate, value) ⇒ Object
Builds a machine tag string given namespace, predicate and value.
104 105 106 |
# File 'lib/has_machine_tags/tag_methods.rb', line 104 def build_machine_tag(namespace, predicate, value) "#{namespace}:#{predicate}=#{value}" end |
#extract_from_name(tag_name) ⇒ Object
:nodoc:
118 119 120 |
# File 'lib/has_machine_tags/tag_methods.rb', line 118 def extract_from_name(tag_name) #:nodoc: (tag_name =~ /^(#{NAMESPACE_REGEX})\:(#{PREDICATE_REGEX})\=(#{VALUE_REGEX})$/) ? [$1, $2, $3] : nil end |
#machine_tag?(machine_tag) ⇒ Boolean
Boolean indicating if given tag is a machine tag.
114 115 116 |
# File 'lib/has_machine_tags/tag_methods.rb', line 114 def machine_tag?(machine_tag) !extract_from_name(machine_tag).nil? end |
#machine_tags(name) ⇒ Object
Takes a wildcard machine tag and returns matching tags.
92 93 94 95 96 97 98 99 100 101 |
# File 'lib/has_machine_tags/tag_methods.rb', line 92 def (name) conditions = if (match = match_wildcard_machine_tag(name)) match.map {|k,v| sanitize_sql(["#{k} = ?", v]) }.join(" AND ") else sanitize_sql(["name = ?", name]) end find(:all, :conditions=>conditions) end |
#match_wildcard_machine_tag(name) ⇒ Object
Valid wildcards with their equivalent shortcuts namespace:*=* -> namespace: :predicate= -> predicate= :=value -> :value
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/has_machine_tags/tag_methods.rb', line 126 def match_wildcard_machine_tag(name) #:nodoc: if name =~ /^(#{NAMESPACE_REGEX}|\*)\:(#{PREDICATE_REGEX}|\*)\=(#{VALUE_REGEX}|\*)?$/ result = [[:namespace, $1], [:predicate, $2], [:value, $3]].select {|k,v| ![nil,'*'].include?(v) } result.size == 3 ? nil : result #duo shortcuts elsif name =~ /^(#{NAMESPACE_REGEX}\:#{PREDICATE_REGEX})|(#{PREDICATE_REGEX}\=#{VALUE_REGEX})|(#{NAMESPACE_REGEX}\.#{VALUE_REGEX})$/ $1 ? [:namespace, :predicate].zip($1.split(":")) : ($2 ? [:predicate, :value].zip($2.split("=")) : [:namespace, :value].zip($3.split('.')) ) #single shortcuts elsif name =~ /^((#{NAMESPACE_REGEX})(?:\:)|(#{PREDICATE_REGEX})(?:\=)|(?:\=)(#{VALUE_REGEX}))$/ $2 ? [[:namespace, $2]] : ($3 ? [[:predicate, $3]] : [[:value, $4]]) else nil end end |
#split_machine_tag(machine_tag) ⇒ Object
Returns an array of machine tag parts: [namespace, predicate, value]
109 110 111 |
# File 'lib/has_machine_tags/tag_methods.rb', line 109 def split_machine_tag(machine_tag) extract_from_name(machine_tag) || [] end |