class SocialSnippet::Repository::RepositoryManager
Attributes
core[R]
Public Class Methods
new(new_core)
click to toggle source
Constructor
@param new_core [::SocialSnippet::Core]
# File lib/social_snippet/repository/repository_manager.rb, line 10 def initialize(new_core) @core = new_core end
Public Instance Methods
all_repositories()
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 74 def all_repositories Models::Repository.all.map {|repo| repo.name } end
complete(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 110 def complete(keyword) if is_completing_repo_name?(keyword) complete_repo_name(keyword) elsif is_completing_file_path?(keyword) complete_file_name(keyword) else raise "completion error" end end
complete_file_name(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 95 def complete_file_name(keyword) repo_name = get_repo_name(keyword) package = find_package(repo_name) file_path = keyword_filepath(keyword) glob_path = package_glob_path(package, file_path) package.glob(glob_path).map do |path| if package.directory?(path) ::Pathname.new(path).basename.to_s + "/" else ::Pathname.new(path).basename.to_s + ">" end end end
complete_repo_name(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 78 def complete_repo_name(keyword) repo_name = get_repo_name_prefix(keyword) if repo_name.empty? all_repositories else find_repositories_start_with(repo_name) end end
create_package(driver, ref)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 158 def create_package(driver, ref) repo_name = driver.snippet_json["name"] package = Models::Package.create( :repo_name => repo_name, :rev_hash => driver.rev_hash(ref), :name => "#{driver.snippet_json["name"]}##{ref}", ) repo = find_repository(repo_name) repo.add_package ref driver.each_directory(ref) do |dir| package.add_directory dir.path end driver.each_file(ref) do |content| package.add_file content.path, content.data end unless package.snippet_json["dependencies"].nil? package.snippet_json["dependencies"].each do |dep_name, dep_ref| package.add_dependency dep_name, dep_ref end end package end
each_repo(&block)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 200 def each_repo(&block) Models::Repository.all.each &block end
exists?(repo_name, repo_ref = nil)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 185 def exists?(repo_name, repo_ref = nil) # not found repo return false unless Models::Repository.where(:name => repo_name).exists? repo = Models::Repository.find_by(:name => repo_name) if repo_ref.nil? true else Models::Package.where( :repo_name => repo_name, :rev_hash => repo.rev_hash[repo_ref], ).exists? end end
find_package(name, ref = nil)
click to toggle source
Find repository by repo name
@param name [String] The name of repository
# File lib/social_snippet/repository/repository_manager.rb, line 50 def find_package(name, ref = nil) repo = find_repository(name) ref ||= repo.latest_package_version || repo.current_ref raise "invalid references" unless repo.has_ref?(ref) Models::Package.find_by( :repo_name => name, :rev_hash => repo.rev_hash[ref], ) end
find_package_by_tag(tag)
click to toggle source
Find repository by tag
@param tag [::SocialSnippet::Tag] The tag of repository
# File lib/social_snippet/repository/repository_manager.rb, line 39 def find_package_by_tag(tag) if tag.has_ref? find_package(tag.repo, tag.ref) else find_package(tag.repo) end end
find_repositories_start_with(prefix)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 68 def find_repositories_start_with(prefix) Models::Repository.where(:name => /^#{prefix}.*/).map do |repo| repo.name end end
find_repository(name)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 60 def find_repository(name) Models::Repository.find_by(:name => name) end
find_repository_by_url(url)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 64 def find_repository_by_url(url) Models::Repository.find_by(:url => url) end
get_repo_name(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 120 def get_repo_name(keyword) /^[^@]*@[^<]+<([^:#>]*)/.match(keyword)[1] end
get_repo_name_prefix(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 124 def get_repo_name_prefix(keyword) /^[^@]*@[^<]+<([^:#>]*)$/.match(keyword)[1] end
get_snippet(context, tag)
click to toggle source
Get snippet by context and tag
@param context [::SocialSnippet::Context] The context of snippet @param tag [::SocialSnippet::Tag] The tag of snippet
# File lib/social_snippet/repository/repository_manager.rb, line 18 def get_snippet(context, tag) ::SocialSnippet::Snippet.new(core, resolve_snippet_path(context, tag)) end
install(url, ref, options = ::Hash.new)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 140 def install(url, ref, options = ::Hash.new) driver = core.driver_factory.clone(url) ref ||= resolve_ref_by_driver(driver) repo = update_repository(driver, url) create_package driver, ref end
is_completing_file_path?(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 136 def is_completing_file_path?(keyword) /^[^@]*@[^<]+<[^#:]+:[^>]*$/ === keyword end
is_completing_repo_name?(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 132 def is_completing_repo_name?(keyword) /^[^@]*@[^<]+<[^:#>]*$/ === keyword end
keyword_filepath(keyword)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 128 def keyword_filepath(keyword) /^[^@]*@[^<]+<[^#:]+:([^>]*)$/.match(keyword)[1] end
package_glob_path(package, path)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 87 def package_glob_path(package, path) if package.snippet_json["main"].nil? "#{path}*" else "#{package.snippet_json["main"]}/#{path}*" end end
resolve_ref_by_driver(driver)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 147 def resolve_ref_by_driver(driver) driver.latest_version || driver.current_ref end
resolve_snippet_path(context, tag)
click to toggle source
Resolve snippet path by context and tag
@param context [::SocialSnippet::Context] The context of snippet @param tag [::SocialSnippet::Tag] The tag of snippet
# File lib/social_snippet/repository/repository_manager.rb, line 26 def resolve_snippet_path(context, tag) if tag.has_repo? pkg = find_package_by_tag(tag) pkg.snippet_path tag.path else new_context = context.clone new_context.dirname + "/" + tag.filename end end
update_repository(driver, url)
click to toggle source
# File lib/social_snippet/repository/repository_manager.rb, line 151 def update_repository(driver, url) repo = Models::Repository.find_or_create_by(:url => url) repo.update_attributes! :name => driver.snippet_json["name"] driver.each_ref {|ref| repo.add_ref ref, driver.rev_hash(ref) } repo end