Class: ScmLibraryStore

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/scm_router.rb

Instance Method Summary collapse

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

Returns:

  • (Boolean)


45
46
47
# File 'lib/scm_router.rb', line 45

def has_key?(key)
  self[key] ? true : false
end

#keysObject



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

#valuesObject



61
62
63
# File 'lib/scm_router.rb', line 61

def values
  keys.map {|key| self[key] }
end