class Tag::Store

Public Class Methods

models() click to toggle source
# File lib/tag/store.rb, line 6
def self.models
  Dir["#{Tag.home}/*.yml"].map {|file| file[%r{([^/]+).yml$}, 1] }.sort
end
new(model = nil) click to toggle source
# File lib/tag/store.rb, line 10
def initialize(model = nil)
  model ||= ENV['TAG_MODEL'] || 'default'
  @file = File.join(Tag.home, "#{model}.yml")
  @hash = File.exists?(@file) ? YAML.load_file(@file) : {}
end

Public Instance Methods

delete_tags(*tags) click to toggle source
# File lib/tag/store.rb, line 63
def delete_tags(*tags)
  tags.each {|tag| @hash.delete(tag) }
  save
end
items() click to toggle source
# File lib/tag/store.rb, line 68
def items
  @hash.each_with_object({}) do |(tag,items),acc|
    items.each do |item|
      (acc[item] ||= []) << tag
    end
  end.sort_by {|e| e[0] }.map do |k,v|
    "#{k}\t#{v.uniq.join(', ')}"
  end
end
list(tag) click to toggle source
# File lib/tag/store.rb, line 48
def list(tag)
  @hash[tag] ||= []
  @hash[tag]
end
list_tags() click to toggle source
# File lib/tag/store.rb, line 53
def list_tags
  @hash.keys.sort
end
multi_remove_tag(items, tags) click to toggle source
# File lib/tag/store.rb, line 34
def multi_remove_tag(items, tags)
  tags.each do |tag|
    items.each do |item|
      remove_tag(item, tag)
    end
  end
  save
end
multi_tag(items, tags) click to toggle source
# File lib/tag/store.rb, line 25
def multi_tag(items, tags)
  tags.each do |tag|
    items.each do |item|
      tag(item, tag)
    end
  end
  save
end
remove_tag(item, tag) click to toggle source
# File lib/tag/store.rb, line 43
def remove_tag(item, tag)
  @hash[tag] ||= []
  @hash[tag].delete item
end
save() click to toggle source
# File lib/tag/store.rb, line 16
def save
  File.open(@file, 'w') {|f| f.write(@hash.to_yaml) }
end
tag(item, tag) click to toggle source
# File lib/tag/store.rb, line 20
def tag(item, tag)
  @hash[tag] ||= []
  @hash[tag] << item
end
tree() click to toggle source
# File lib/tag/store.rb, line 57
def tree
  list_tags.map {|tag|
    ["#{tag}", list(tag).map {|t| "    #{t}" }]
  }.flatten
end