Class: Molt::CLI::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/molt/cli/create_module.rb

Class Method Summary collapse

Class Method Details

.create_module(module_name, template_set, options, xcode = false) ⇒ Object



8
9
10
11
12
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/molt/cli/create_module.rb', line 8

def self.create_module(module_name, template_set, options, xcode = false)
  config = Molt::Configuration.load_or_initialize
  if !xcode
    config = Molt::Configuration.apply_cli_overrides config, options, module_name, template_set
  else
    config = Molt::Configuration.config_for_xcode config, options, module_name, template_set
  end
  rows = table_rows_for config, xcode

  sets = ""
  models = ""

  [Molt::MOLT_GLOBAL, Molt::MOLT_PROJECT ].each do |path|
    if Dir.exist? "#{path}/template_sets/#{template_set}"
      sets = "#{path}/template_sets"
      models = "#{path}/models"
      Liquid::Template.file_system = Liquid::LocalFileSystem.new("#{path}/partials/", '_%s.liquid')
    end
  end

  Dir["#{sets}/#{template_set}/**/*swift.liquid"].each do |template_file|
    template_base_folder = File.dirname(template_file).gsub(/#{sets}\/#{template_set}/, "")

    destination_folder = "#{options.output_folder}/#{module_name}#{template_base_folder}" if !xcode
    destination_folder = File.expand_path("~/Library/Developer/Xcode/Templates/File Templates/Molt/#{template_set.gsub(/_/, " ")}.xctemplate") if xcode

    base_file = File.basename(template_file.gsub(/.liquid$/, ""))
    output_file = "#{destination_folder}/#{module_name}#{base_file}" if !xcode
    output_file = "#{destination_folder}/___FILEBASENAME___#{base_file}" if xcode
    rows << [template_file.gsub(/#{sets}\//, ""), output_file.blue]

    if options.do_it
      FileUtils.mkdir_p destination_folder
      FileUtils.cp Dir.glob("#{Molt::ROOT}/sample_configs/Template*"), destination_folder if xcode
      Molt::Exporter.liquify(template: template_file, output_file: output_file, config: config)
    end
  end

  if options.create_model && options.model
    Dir["#{models}/**/*swift.liquid"].each do |template_file|
      destination_folder = "#{options.output_folder}/#{module_name}/Models"

      base_file = File.basename(template_file.gsub(/.liquid$/, ""))
      base_file = base_file.gsub(/Entity/, options.model)
      base_file = base_file.gsub(/Model/, "#{options.model}Model")
      output_file = "#{destination_folder}/#{base_file}"
      rows << [template_file.gsub(/#{models}\//, ""), output_file.blue]

      if options.do_it
        FileUtils.mkdir_p destination_folder
        Molt::Exporter.liquify(template: template_file, output_file: output_file, config: config)
      end
    end
  end
  output_table_with rows
  if !options.do_it
    puts "\nThat was just a dry-run. If this looks good to you, don't forget to add --do-it".green
  end
end