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"
SENTRY_PROJECT_KEY =
"sentry_project"
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



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

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

#detailsObject (readonly)

Returns the value of attribute details.



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

def details
  @details
end

#repo_nameObject (readonly)

Returns the value of attribute repo_name.



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

def repo_name
  @repo_name
end

#serversObject (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_applicationsObject



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

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

.build(repository_name) ⇒ Object



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

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



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

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

#deploy_toObject



108
109
110
# File 'lib/groundskeeper/project.rb', line 108

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

#full_dns(stage) ⇒ Object



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

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

#jira_prefixObject



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

def jira_prefix
  details[JIRA_PREFIX_KEY] || ""
end

#project_nameObject



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

def project_name
  details[PROJECT_NAME_KEY] || ""
end

#repo_urlObject



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

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

#rvm_ruby_versionObject



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

def rvm_ruby_version
  details[RVM_RUBY_VERSION_KEY] || ""
end

#sentry_dsnObject



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

def sentry_dsn
  details[SENTRY_DSN_KEY] || ""
end

#sentry_projectObject



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

def sentry_project
  details[SENTRY_PROJECT_KEY] || ""
end

#sentry_public_dsnObject



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

def sentry_public_dsn
  details[SENTRY_PUBLIC_DSN_KEY] || ""
end

#server_config(stage) ⇒ Object



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

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

#source_control_usernameObject



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

def source_control_username
  details[SOURCE_CONTROL_USERNAME_KEY] || ""
end

#ssl_certificate_chain_file(stage) ⇒ Object



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

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

#ssl_certificate_file(stage) ⇒ Object



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

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

#ssl_certificate_key_file(stage) ⇒ Object



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

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

#tagsObject



112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/groundskeeper/project.rb', line 112

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



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

def uses_whenever?
  details[WHENEVER_KEY] == true
end