Module: Strata::CLI::Helpers::ProjectHelper

Defined in:
lib/strata/cli/helpers/project_helper.rb

Class Method Summary collapse

Class Method Details

.persist_git_url_if_missing(project_yml_path: "project.yml") ⇒ Object

Persists git URL to project.yml file if missing



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/strata/cli/helpers/project_helper.rb', line 78

def persist_git_url_if_missing(project_yml_path: "project.yml")
  return false unless File.exist?(project_yml_path)

  project_config = YAML.safe_load_file(project_yml_path, permitted_classes: [Date, Time], aliases: true) || {}
  return false if project_config["git"] && !project_config["git"].to_s.strip.empty?

  git_remote = Utils::Git.git_remote_url
  return false unless git_remote

  normalized_url = git_remote.chomp("/").chomp(".git")
  project_yml_content = File.read(project_yml_path)

  begin
    if /^(\s*)git:\s*$/.match?(project_yml_content)
      updated_content = project_yml_content.gsub(/^(\s*)git:\s*$/, "\\1git: #{normalized_url}")
      File.write(project_yml_path, updated_content)
    else
      File.open(project_yml_path, "a") do |f|
        f.puts "\n" unless project_yml_content.end_with?("\n")
        f.puts "git: #{normalized_url}"
      end
    end

    true
  rescue Errno::EACCES => e
    raise Strata::CommandError, "Permission denied writing to #{project_yml_path}: #{e.message}"
  rescue Errno::ENOSPC => e
    raise Strata::CommandError, "Disk full: #{e.message}"
  rescue => e
    raise Strata::CommandError, "Failed to write to #{project_yml_path}: #{e.message}"
  end
end

.persist_project_id_to_yml(project_id, project_yml_path: "project.yml") ⇒ Object

Persists project_id to project.yml file



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/strata/cli/helpers/project_helper.rb', line 13

def persist_project_id_to_yml(project_id, project_yml_path: "project.yml")
  return false unless project_id && !project_id.to_s.strip.empty?
  return false unless File.exist?(project_yml_path)

  project_config = YAML.safe_load_file(project_yml_path, permitted_classes: [Date, Time], aliases: true) || {}
  return false if project_config["project_id"] && !project_config["project_id"].to_s.strip.empty?

  project_yml_content = File.read(project_yml_path)

  begin
    if /^#\s*project_id:\s*$/.match?(project_yml_content)
      updated_content = project_yml_content.gsub(/^#\s*project_id:\s*$/, "project_id: #{project_id}")
      File.write(project_yml_path, updated_content)
    else
      warning_comment = <<~YAML
        # WARNING: Do not change this project_id. It links this project to the Strata server.
        # Changing it may result in creating a new project or deployment failures.
        project_id: #{project_id}
      YAML

      File.open(project_yml_path, "a") do |f|
        f.puts "\n" unless project_yml_content.end_with?("\n")
        f.puts warning_comment
      end
    end

    true
  rescue Errno::EACCES => e
    raise Strata::CommandError, "Permission denied writing to #{project_yml_path}: #{e.message}"
  rescue Errno::ENOSPC => e
    raise Strata::CommandError, "Disk full: #{e.message}"
  rescue => e
    raise Strata::CommandError, "Failed to write to #{project_yml_path}: #{e.message}"
  end
end

.persist_server_to_project_yml(server, project_yml_path: "project.yml") ⇒ Object

Persists server URL to project.yml (updates existing or appends)



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/strata/cli/helpers/project_helper.rb', line 50

def persist_server_to_project_yml(server, project_yml_path: "project.yml")
  return false unless server && !server.to_s.strip.empty?
  return false unless File.exist?(project_yml_path)

  project_yml_content = File.read(project_yml_path)

  begin
    if /^server:\s*.+$/m.match?(project_yml_content)
      updated_content = project_yml_content.gsub(/^(\s*)server:\s*.+$/, "\\1server: #{server}")
      File.write(project_yml_path, updated_content)
    else
      File.open(project_yml_path, "a") do |f|
        f.puts "\n" unless project_yml_content.end_with?("\n")
        f.puts "server: #{server}"
      end
    end

    true
  rescue Errno::EACCES => e
    raise Strata::CommandError, "Permission denied writing to #{project_yml_path}: #{e.message}"
  rescue Errno::ENOSPC => e
    raise Strata::CommandError, "Disk full: #{e.message}"
  rescue => e
    raise Strata::CommandError, "Failed to write to #{project_yml_path}: #{e.message}"
  end
end