Class: Lono::Blueprint::New

Inherits:
Sequence
  • Object
show all
Includes:
Helper, Utils::Generators::Tree
Defined in:
lib/lono/blueprint/new.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helper

#user_info

Class Method Details

.cli_optionsObject



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/lono/blueprint/new.rb', line 13

def self.cli_options
  [
    [:bundle, type: :boolean, default: true, desc: "Runs bundle install on the project"],
    [:demo, type: :boolean, default: true, desc: "Include demo template"],
    [:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
    [:from_new, type: :boolean, desc: "Called from `lono new` command."],
    [:import, type: :boolean, desc: "Flag for lono code import"],
    [:project_name, default: '', desc: "Only used with from_new internally"],
    [:type, default: "dsl", desc: "Blueprint type: dsl or erb"],
  ]
end

.source_rootObject



8
9
10
11
# File 'lib/lono/blueprint/new.rb', line 8

def self.source_root
  templates = File.expand_path("../../templates", File.dirname(__FILE__))
  "#{templates}/blueprint"
end

Instance Method Details

#create_app_folderObject



58
59
60
61
62
63
64
65
66
67
# File 'lib/lono/blueprint/new.rb', line 58

def create_app_folder
  return if @options[:import]

  if @demo
    directory "../blueprint_types/#{@options[:type]}", "#{@cwd}/#{blueprint_name}"
  else
    empty_directory "#{@cwd}/#{blueprint_name}/app/templates"
    create_file "#{@cwd}/#{blueprint_name}/app/templates/#{blueprint_name}.rb"
  end
end

#create_empty_directoriesObject



69
70
71
72
73
# File 'lib/lono/blueprint/new.rb', line 69

def create_empty_directories
  # Note: Not using Lono::Core::Config::PATHS.keys to create all of them because
  # think it is more common to not have all the folders. Instead create them explicitly.
  empty_directory "#{@cwd}/#{blueprint_name}/app/templates"
end

#create_licenseObject



75
76
77
78
# File 'lib/lono/blueprint/new.rb', line 75

def create_license
  return unless ENV['LONO_LICENSE_FILE']
  copy_file ENV['LONO_LICENSE_FILE'], "#{@cwd}/#{blueprint_name}/LICENSE.txt"
end

#create_projectObject



53
54
55
56
# File 'lib/lono/blueprint/new.rb', line 53

def create_project
  puts "=> Creating new blueprint called #{blueprint_name}."
  directory ".", "#{@cwd}/#{blueprint_name}", directory_options
end

#create_readmeObject



80
81
82
83
# File 'lib/lono/blueprint/new.rb', line 80

def create_readme
  return unless ENV['LONO_README_FILE']
  template ENV['LONO_README_FILE'], "#{@cwd}/#{blueprint_name}/README.md"
end

#reset_current_dirObject

Reason: So ‘lono code import` prints out the params values with relative paths when the config files are generated.



114
115
116
# File 'lib/lono/blueprint/new.rb', line 114

def reset_current_dir
  FileUtils.cd(@old_dir)
end

#set_cwdObject

for specs



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/lono/blueprint/new.rb', line 30

def set_cwd
  @cwd = "#{Lono.root}/app/blueprints"

  if options[:from_new]
    # At this point @cwd will have the project_name from `lono new`
    # Yup, it's confusing.  Here's an example to explain:
    #
    #   lono new my-infra - sets @cwd = my-infra
    #
    # Then within the new Thor::Group this is called
    #
    #   Lono::Blueprint::New.start(["ec2", "--from-new"])
    #
    # So @cwd = my-infra/blueprints
    @cwd = "#{options[:project_name]}/app/blueprints"
  end
end

#set_destination_rootObject

After this commands are executed with the newly created project



86
87
88
89
90
91
# File 'lib/lono/blueprint/new.rb', line 86

def set_destination_root
  destination_root = "#{@cwd}/#{blueprint_name}"
  self.destination_root = destination_root
  @old_dir = Dir.pwd # for reset_current_dir
  FileUtils.cd(self.destination_root)
end

#set_variablesObject



48
49
50
51
# File 'lib/lono/blueprint/new.rb', line 48

def set_variables
  @demo = @options[:demo]
  @demo = false if ENV["LONO_ORG"] # overrides --demo CLI option
end

#treeObject



108
109
110
# File 'lib/lono/blueprint/new.rb', line 108

def tree
  tree_structure("blueprint")
end

#welcome_messageObject



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/lono/blueprint/new.rb', line 93

def welcome_message
  return if options[:from_new] || options[:import]
  puts <<~EOL
    #{"="*64}
    Congrats 🎉 You have successfully created a lono blueprint.

    Cd into your blueprint and check things out.

        cd #{blueprint_name}

    More info: https://lono.cloud/docs/core/blueprints

  EOL
end