Class: Strata::CLI::Generators::Project

Inherits:
Group
  • Object
show all
Includes:
API::ConnectionErrorHandler
Defined in:
lib/strata/cli/generators/project.rb

Constant Summary collapse

BASE_SERVER_URL =
"http://localhost:3000"

Instance Method Summary collapse

Methods included from API::ConnectionErrorHandler

#with_connection_error_handling

Methods inherited from Group

exit_on_failure?, source_root

Instance Method Details

#completion_messageObject



118
119
120
121
122
123
124
125
# File 'lib/strata/cli/generators/project.rb', line 118

def completion_message
  say "\n✔ Strata project '#{uid}' is ready!", :green
  say "\nNext steps:", :yellow
  say "  1. cd #{uid}", :cyan
  say "  2. strata datasource add      # To add more datasources", :cyan
  say "  3. strata create table      # Start adding tables", :cyan
  say "\n"
end

#create_datasources_fileObject



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/strata/cli/generators/project.rb', line 81

def create_datasources_file
  return if cloned_from_git?

  template "datasources.yml", "#{uid}/datasources.yml"

  return unless options.key?(:datasource)

  options[:datasource].each do |ds|
    raise DWH::ConfigError, "Unsupported datasource #{ds}" unless DWH.adapter?(ds.to_sym)

    Datasource.new([ds.downcase.strip], options.merge({"path" => uid})).invoke_all
  end
end

#create_project_fileObject



65
66
67
68
69
# File 'lib/strata/cli/generators/project.rb', line 65

def create_project_file
  return if cloned_from_git?

  template "project.yml", "#{uid}/project.yml"
end

#create_project_structureObject



53
54
55
56
57
58
59
# File 'lib/strata/cli/generators/project.rb', line 53

def create_project_structure
  return if cloned_from_git?

  empty_directory uid
  empty_directory File.join(uid, "models")
  empty_directory File.join(uid, "tests")
end

#create_strata_config_fileObject



61
62
63
# File 'lib/strata/cli/generators/project.rb', line 61

def create_strata_config_file
  template "strata.yml", "#{uid}/.strata"
end

#fetch_and_clone_if_availableObject



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/strata/cli/generators/project.rb', line 40

def fetch_and_clone_if_available
  return unless options.key?(:source)

  project_info = fetch_project_info
  @project_id = project_info["id"]
  @project_info = project_info

  return unless project_info["git_url"] && !project_info["git_url"].empty?

  @cloned_from_git = true
  clone_project(project_info["git_url"])
end

#initialize_gitObject



95
96
97
98
99
100
101
102
# File 'lib/strata/cli/generators/project.rb', line 95

def initialize_git
  return if cloned_from_git?

  inside uid do
    run "git init", verbose: false, capture: true
    create_file ".gitignore", ".strata\n"
  end
end

#persist_project_id_if_neededObject



71
72
73
74
75
76
77
78
79
# File 'lib/strata/cli/generators/project.rb', line 71

def persist_project_id_if_needed
  # Persist project_id after project.yml exists (either from clone or creation)
  return unless @project_id

  project_yml_path = File.join(uid, "project.yml")
  return unless File.exist?(project_yml_path)

  persist_project_id_to_project_yml
end

#setup_datasourceObject



104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/strata/cli/generators/project.rb', line 104

def setup_datasource
  return if cloned_from_git?
  return if options.key?(:datasource) # Already specified via CLI option

  say "\n", :white
  say_status :setup, "Let's configure your first datasource", :cyan

  # Change into the project directory and run the existing add command
  inside(uid) do
    require_relative "../sub_commands/datasource"
    SubCommands::Datasource.new.add
  end
end

#validate_optionsObject



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/strata/cli/generators/project.rb', line 26

def validate_options
  if options.key?(:source)
    unless options.key?(:api_key)
      raise Strata::CommandError,
        "API key is required when using --source option. Use --api-key option."
    end
  else
    unless @name && !@name.to_s.strip.empty?
      raise Strata::CommandError,
        "PROJECT_NAME is required when not using --source option."
    end
  end
end