Class: Lotus::Generators::Application::Container

Inherits:
Lotus::Generators::Abstract show all
Defined in:
lib/lotus/generators/application/container.rb

Overview

Since:

  • 0.1.0

Instance Method Summary collapse

Constructor Details

#initialize(command) ⇒ Container

Returns a new instance of Container.

Since:

  • 0.1.0



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/lotus/generators/application/container.rb', line 10

def initialize(command)
  super

  @slice_generator      = Slice.new(command)
  @database_config      = DatabaseConfig.new(options[:database], app_name)
  @lotus_head           = options.fetch(:lotus_head)
  @test                 = options[:test]
  @lotus_model_version  = '~> 0.5'

  cli.class.source_root(source)
end

Instance Method Details

#startObject

Since:

  • 0.1.0



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
48
49
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/lotus/generators/application/container.rb', line 22

def start
  opts      = {
    app_name:             app_name,
    lotus_head:           @lotus_head,
    test:                 @test,
    database:             @database_config.engine,
    database_config:      @database_config.to_hash,
    lotus_model_version:  @lotus_model_version,
  }

  templates = {
    'lotusrc.tt'               => '.lotusrc',
    '.env.tt'                  => '.env',
    '.env.development.tt'      => '.env.development',
    '.env.test.tt'             => '.env.test',
    'Gemfile.tt'               => 'Gemfile',
    'config.ru.tt'             => 'config.ru',
    'config/environment.rb.tt' => 'config/environment.rb',
    'lib/app_name.rb.tt'       => "lib/#{ app_name }.rb",
    'lib/config/mapping.rb.tt' => 'lib/config/mapping.rb',
  }

  empty_directories = [
    "lib/#{ app_name }/entities",
    "lib/#{ app_name }/repositories",
    "lib/#{ app_name }/mailers"
  ]

  empty_directories << if @database_config.sql?
    "db/migrations"
  else
    "db"
  end

  case options[:test]
  when 'rspec'
    templates.merge!(
      'Rakefile.rspec.tt'           => 'Rakefile',
      'rspec.rspec.tt'              => '.rspec',
      'spec_helper.rb.rspec.tt'     => 'spec/spec_helper.rb',
      'features_helper.rb.rspec.tt' => 'spec/features_helper.rb',
      'capybara.rb.rspec.tt'        => 'spec/support/capybara.rb'
    )
  else # minitest (default)
    templates.merge!(
      'Rakefile.minitest.tt'           => 'Rakefile',
      'spec_helper.rb.minitest.tt'     => 'spec/spec_helper.rb',
      'features_helper.rb.minitest.tt' => 'spec/features_helper.rb'
    )
  end

  if @database_config.sql?
    templates.merge!(
      'schema.sql.tt' => 'db/schema.sql'
    )
  end

  empty_directories << [
    "spec/#{ app_name }/entities",
    "spec/#{ app_name }/repositories",
    "spec/#{ app_name }/mailers",
    "spec/support"
  ]

  templates.each do |src, dst|
    cli.template(source.join(src), target.join(dst), opts)
  end

  empty_directories.flatten.each do |dir|
    gitkeep = '.gitkeep'
    cli.template(source.join(gitkeep), target.join(dir, gitkeep), opts)
  end

  unless git_dir_present?
    cli.template(source.join(@database_config.type == :file_system ? 'gitignore.tt' : '.gitignore'), target.join('.gitignore'), opts)
    cli.run("git init #{Shellwords.escape(target)}", capture: true)
  end

  @slice_generator.start
end