Class: ScmLibraryStore
Instance Method Summary collapse
- #[](name) ⇒ Object
- #[]=(name, value) ⇒ Object
- #each(&block) ⇒ Object
- #has_key?(key) ⇒ Boolean
- #keys ⇒ Object
- #primary_branch(name) ⇒ Object
- #primary_fork(name) ⇒ Object
- #sorted_by_project(filter = '') ⇒ Object
- #sorted_versions(name) ⇒ Object
- #values ⇒ Object
Instance Method Details
#[](name) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/scm_router.rb', line 27 def [](name) path = File.join(REPOS_PATH, project_dirname(name)) return unless File.directory?(path) Dir.entries(path).map do |dir| next nil if dir =~ /^\.\.?$/ yfile = File.join(path, dir, '.yardoc') if File.exist?(File.join(yfile, 'complete')) YARD::Server::LibraryVersion.new(name, dir, yfile, :github) else nil end end.compact end |
#[]=(name, value) ⇒ Object
41 42 43 |
# File 'lib/scm_router.rb', line 41 def []=(name, value) # read-only db end |
#each(&block) ⇒ Object
65 66 67 |
# File 'lib/scm_router.rb', line 65 def each(&block) keys.zip(values).each(&block) end |
#has_key?(key) ⇒ Boolean
45 46 47 |
# File 'lib/scm_router.rb', line 45 def has_key?(key) self[key] ? true : false end |
#keys ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/scm_router.rb', line 49 def keys dirs = [] Dir.entries(REPOS_PATH).each do |project| next unless dir_valid?(project) Dir.entries(File.join(REPOS_PATH, project)).each do |username| next unless dir_valid?(project, username) dirs << "#{username}/#{project}" end end dirs end |
#primary_branch(name) ⇒ Object
76 77 78 79 80 |
# File 'lib/scm_router.rb', line 76 def primary_branch(name) File.read(File.join(REPOS_PATH, name, '.primary_branch')).strip rescue Errno::ENOENT nil end |
#primary_fork(name) ⇒ Object
69 70 71 72 73 74 |
# File 'lib/scm_router.rb', line 69 def primary_fork(name) project = name.split('/', 2).last File.read(File.join(REPOS_PATH, project, '.master_fork')).strip rescue Errno::ENOENT nil end |
#sorted_by_project(filter = '') ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/scm_router.rb', line 82 def sorted_by_project(filter = '') projects = {} Dir.glob("#{REPOS_PATH}/#{filter}*", File::FNM_CASEFOLD).each do |project| project = File.basename(project) next unless dir_valid?(project) primary = primary_fork(project) Dir.entries(File.join(REPOS_PATH, project)).each do |username| next unless dir_valid?(project, username) projects[project] ||= {} projects[project][username] = sorted_versions("#{username}/#{project}") end projects[project] = projects[project].sort_by do |name, libs| ["#{name}/#{project}" == primary ? 0 : 1, name.downcase] end end projects.sort_by {|name, users| name.downcase } end |
#sorted_versions(name) ⇒ Object
100 101 102 103 |
# File 'lib/scm_router.rb', line 100 def sorted_versions(name) main_branch = primary_branch(name) self[name].sort_by {|lib| [lib.version == main_branch ? 0 : 1, File.ctime(lib.source_path)] } end |
#values ⇒ Object
61 62 63 |
# File 'lib/scm_router.rb', line 61 def values keys.map {|key| self[key] } end |