class Slugforge::TagManager
Public Class Methods
new(opts)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 3 def initialize(opts) bucket(opts) end
Public Instance Methods
bucket(opts={})
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 7 def bucket(opts={}) if @bucket.nil? || (true == (opts[:refresh] || @bucket_dirty)) @s3 = opts[:s3] || @s3 @aws_bucket = opts[:bucket] || @aws_bucket @bucket = @s3.directories.get(@aws_bucket) @slugs_for_tag = {} @tags = {} @bucket_dirty = false end @bucket end
clone_tag(project_name, old_tag, new_tag)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 94 def clone_tag(project_name, old_tag, new_tag) slugs = slugs_for_tag(project_name, old_tag) save_tag(project_name, new_tag, slugs) end
create_tag(project_name, tag, slug_name)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 99 def create_tag(project_name, tag, slug_name) slugs = [slug_name] slugs += slugs_for_tag(project_name, tag) slugs = slugs.slice(0,10) save_tag(project_name, tag, slugs) end
delete_tag(project_name, tag)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 106 def delete_tag(project_name, tag) return nil if bucket.files.nil? bucket.files.head(tag_file_name(project_name, tag)).destroy @bucket_dirty = true end
projects()
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 19 def projects return [] if bucket.files.nil? result = {} bucket.files.each do |file| result[$~[1]] = true if (file.key =~ /^([^\/]+)\//) end result.keys end
rollback_slug_for_tag(project_name, tag)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 74 def rollback_slug_for_tag(project_name, tag) slugs = slugs_for_tag(project_name, tag) slugs.shift save_tag(project_name, tag, slugs) unless slugs.empty? slugs.first end
save_tag(project_name, tag, slugs)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 112 def save_tag(project_name, tag, slugs) bucket.files.create( :key => tag_file_name(project_name, tag), :body => slugs.join("\n"), :public => false ) @bucket_dirty = true end
slug_for_tag(project_name, tag)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 81 def slug_for_tag(project_name, tag) slugs = slugs_for_tag(project_name, tag) slugs.first end
slugs_for_tag(project_name, tag)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 60 def slugs_for_tag(project_name, tag) @slugs_for_tag[project_name] ||= {} @slugs_for_tag[project_name][tag] ||= begin return [] if bucket.files.nil? file = nil begin file = bucket.files.get(tag_file_name(project_name, tag)) rescue Excon::Errors::Forbidden # ignore 403's end file.nil? ? [] : file.body.split("\n") end end
tag_file_name(project_name, tag)
click to toggle source
# File lib/slugforge/models/tag_manager.rb, line 121 def tag_file_name(project_name, tag) [project_name, 'tags', tag].join('/') end