Class: GemDocs::Repo

Inherits:
Object
  • Object
show all
Defined in:
lib/gem_docs/repo.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root: nil, host: nil, user: nil, name: nil, module_name: nil, branch: 'master', workflow_dir: nil, workflow_name: nil) ⇒ Repo

Returns a new instance of Repo.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/gem_docs/repo.rb', line 8

def initialize(root: nil, host: nil,
  user: nil,
  name: nil,
  module_name: nil,
  branch: 'master',
  workflow_dir: nil,
  workflow_name: nil)
  @root = root
  @host = host
  @user = user
  @module_name = module_name
  @name = name
  @branch = branch
  @workflow_dir = workflow_dir
  @workflow_name = workflow_name
end

Instance Attribute Details

#branchObject

Returns the value of attribute branch.



6
7
8
# File 'lib/gem_docs/repo.rb', line 6

def branch
  @branch
end

#hostObject

Returns the value of attribute host.



5
6
7
# File 'lib/gem_docs/repo.rb', line 5

def host
  @host
end

#module_nameObject

Returns the value of attribute module_name.



5
6
7
# File 'lib/gem_docs/repo.rb', line 5

def module_name
  @module_name
end

#nameObject

Returns the value of attribute name.



5
6
7
# File 'lib/gem_docs/repo.rb', line 5

def name
  @name
end

#rootObject

Returns the value of attribute root.



5
6
7
# File 'lib/gem_docs/repo.rb', line 5

def root
  @root
end

#userObject

Returns the value of attribute user.



5
6
7
# File 'lib/gem_docs/repo.rb', line 5

def user
  @user
end

#workflow_dirObject

Returns the value of attribute workflow_dir.



6
7
8
# File 'lib/gem_docs/repo.rb', line 6

def workflow_dir
  @workflow_dir
end

#workflow_nameObject

Returns the value of attribute workflow_name.



6
7
8
# File 'lib/gem_docs/repo.rb', line 6

def workflow_name
  @workflow_name
end

Class Method Details

.from_gemspecObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/gem_docs/repo.rb', line 30

def from_gemspec
  spec = load_gemspec(gemspec_path)

  url =
    spec.["source_code_uri"] ||
    spec.["homepage_uri"] ||
    spec.homepage

  abort "No repository URL found in gemspec metadata" unless url

  # root = File.dirname(File.expand_path(path))
  root = GemDocs.project_root
  meta = parse_url(url)
  name = GemDocs.config.repo_name ||
         spec.name ||
         meta[:name] ||
         File.basename(Dir['*.gemspec'].first) ||
         File.basename(root)
  host = GemDocs.config.repo_host ||
         meta[:host]
  user = GemDocs.config.repo_user ||
         meta[:user]
  mname = to_module(name)
  branch = GemDocs.config.repo_branch ||
           repo_default_branch(root:)
  wdir, wname = workflow_dir_name
  new(
    root: root,
    host: host,
    user: user,
    name: name,
    module_name: mname,
    branch: branch,
    workflow_dir: wdir,
    workflow_name: wname,
  )
end

.to_module(name) ⇒ Object



92
93
94
# File 'lib/gem_docs/repo.rb', line 92

def to_module(name)
  name.split(/[-_]/).map(&:capitalize).join('')
end

.workflow_dir_nameObject



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/gem_docs/repo.rb', line 68

def workflow_dir_name
  if GemDocs.config.repo_workflow_name && GemDocs.config.repo_workflow_dir
    workflow_file = File.join(
      GemDocs.project_root,
      GemDocs.config.repo_workflow_dir,
      GemDocs.config.repo_workflow_name,
    )
    return [File.dirname(workflow_file), File.dirname(workflow_file)] if File.readable?(workflow_file)
  end

  dir = File.join(GemDocs.project_root, ".github/workflows")
  return unless Dir.exist?(dir)

  workflows =
    Dir.children(dir)
      .select { |f| f.match?(/\A.+\.ya?ml\z/) }
      .sort
  return if workflows.empty?

  fname = workflows.find { |f| f =~ /\A[A-Za-z][^\.]*\.ya?ml\z/i } || workflows.first
  # File.join(dir, fname)
  [dir, fname]
end

Instance Method Details

#workflowObject



25
26
27
# File 'lib/gem_docs/repo.rb', line 25

def workflow
  workflow_name.to_s
end