Class: Groundskeeper::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/groundskeeper/project.rb

Overview

Accesses project details stored in the home directory.

Constant Summary collapse

DETAILS_PATH =
"~/.project_details/projects.yml"
SERVERS_PATH =
"../../servers.yml"
JIRA_PREFIX_KEY =
"jira_prefix"
PROJECT_NAME_KEY =
"name"
SOURCE_CONTROL_USERNAME_KEY =
"scm_username"
FULL_DNS_KEY =
"full_dns"
RVM_RUBY_VERSION_KEY =
"ruby_version"
DB_ENV_VARIABLES_KEY =
"db_env_variables"
SENTRY_DSN_KEY =
"sentry_dsn"
SENTRY_PUBLIC_DSN_KEY =
"sentry_public_dsn"
SSL_CERTIFICATE_FILE_KEY =
"SSLCertificateFile"
SSL_CERTIFICATE_CHAIN_FILE_KEY =
"SSLCertificateChainFile"
SSL_CERTIFICATE_KEY_FILE_KEY =
"SSLCertificateKeyFile"
WHENEVER_KEY =
"uses_whenever"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(projects_yaml:, servers_yaml:, repository_name:) ⇒ Project

Returns a new instance of Project.



40
41
42
43
44
45
# File 'lib/groundskeeper/project.rb', line 40

def initialize(projects_yaml:, servers_yaml:, repository_name:)
  projects = YAML.safe_load(projects_yaml) || {}
  @details = projects[repository_name] || {}
  @servers = YAML.safe_load(servers_yaml) || {}
  @repo_name = repository_name
end

Instance Attribute Details

#details ⇒ Object (readonly)

Returns the value of attribute details.



9
10
11
# File 'lib/groundskeeper/project.rb', line 9

def details
  @details
end

#repo_name ⇒ Object (readonly)

Returns the value of attribute repo_name.



9
10
11
# File 'lib/groundskeeper/project.rb', line 9

def repo_name
  @repo_name
end

#servers ⇒ Object (readonly)

Returns the value of attribute servers.



9
10
11
# File 'lib/groundskeeper/project.rb', line 9

def servers
  @servers
end

Class Method Details

.available_applications ⇒ Object



34
35
36
37
38
# File 'lib/groundskeeper/project.rb', line 34

def self.available_applications
  yaml = Document.new(DETAILS_PATH).read
  projects = YAML.safe_load(yaml) || {}
  projects.keys.join(", ")
end

.build(repository_name) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/groundskeeper/project.rb', line 26

def self.build(repository_name)
  new(
    projects_yaml: Document.new(DETAILS_PATH).read,
    servers_yaml: Document.new(SERVERS_PATH).read,
    repository_name: repository_name
  )
end

Instance Method Details

#db_env_variables(stage) ⇒ Object



63
64
65
# File 'lib/groundskeeper/project.rb', line 63

def db_env_variables(stage)
  details.dig(DB_ENV_VARIABLES_KEY, stage.to_s) || ""
end

#deploy_to ⇒ Object



103
104
105
# File 'lib/groundskeeper/project.rb', line 103

def deploy_to
  "/var/www/apps/#{repo_name}"
end

#full_dns(stage) ⇒ Object



59
60
61
# File 'lib/groundskeeper/project.rb', line 59

def full_dns(stage)
  details.dig(FULL_DNS_KEY, stage.to_s) || ""
end

#jira_prefix ⇒ Object



51
52
53
# File 'lib/groundskeeper/project.rb', line 51

def jira_prefix
  details[JIRA_PREFIX_KEY] || ""
end

#project_name ⇒ Object



47
48
49
# File 'lib/groundskeeper/project.rb', line 47

def project_name
  details[PROJECT_NAME_KEY] || ""
end

#repo_url ⇒ Object



99
100
101
# File 'lib/groundskeeper/project.rb', line 99

def repo_url
  "[email protected]:#{source_control_username}/#{repo_name}.git"
end

#rvm_ruby_version ⇒ Object



67
68
69
# File 'lib/groundskeeper/project.rb', line 67

def rvm_ruby_version
  details[RVM_RUBY_VERSION_KEY] || ""
end

#sentry_dsn ⇒ Object



71
72
73
# File 'lib/groundskeeper/project.rb', line 71

def sentry_dsn
  details[SENTRY_DSN_KEY] || ""
end

#sentry_public_dsn ⇒ Object



75
76
77
# File 'lib/groundskeeper/project.rb', line 75

def sentry_public_dsn
  details[SENTRY_PUBLIC_DSN_KEY] || ""
end

#server_config(stage) ⇒ Object



95
96
97
# File 'lib/groundskeeper/project.rb', line 95

def server_config(stage)
  servers[full_dns(stage)]
end

#source_control_username ⇒ Object



55
56
57
# File 'lib/groundskeeper/project.rb', line 55

def source_control_username
  details[SOURCE_CONTROL_USERNAME_KEY] || ""
end

#ssl_certificate_chain_file(stage) ⇒ Object



83
84
85
# File 'lib/groundskeeper/project.rb', line 83

def ssl_certificate_chain_file(stage)
  details.dig(SSL_CERTIFICATE_CHAIN_FILE_KEY, stage.to_s) || ""
end

#ssl_certificate_file(stage) ⇒ Object



79
80
81
# File 'lib/groundskeeper/project.rb', line 79

def ssl_certificate_file(stage)
  details.dig(SSL_CERTIFICATE_FILE_KEY, stage.to_s) || ""
end

#ssl_certificate_key_file(stage) ⇒ Object



87
88
89
# File 'lib/groundskeeper/project.rb', line 87

def ssl_certificate_key_file(stage)
  details.dig(SSL_CERTIFICATE_KEY_FILE_KEY, stage.to_s) || ""
end

#tags ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/groundskeeper/project.rb', line 107

def tags
  api_url = "https://api.github.com/repos/" \
            "#{source_control_username}/#{repo_name}/tags"
  authorization_header = "Authorization: token #{ENV['GITHUB_API_TOKEN']}"
  response = JSON.parse(`curl -s -H "#{authorization_header}" #{api_url}`)
  unless response.is_a?(Array)
    message = response["message"]
    puts "Failed to obtain response: #{message}"
    return []
  end
  response.map { |h| h["name"] }
end

#uses_whenever? ⇒ Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/groundskeeper/project.rb', line 91

def uses_whenever?
  details[WHENEVER_KEY] == true
end