Class: Jets::Commands::Upgrade

Inherits:
Object
  • Object
show all
Defined in:
lib/jets/commands/upgrade.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Upgrade

Returns a new instance of Upgrade.



6
7
8
# File 'lib/jets/commands/upgrade.rb', line 6

def initialize(options)
  @options = options
end

Instance Method Details

#add_dynomite_to_gemfileObject



123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/jets/commands/upgrade.rb', line 123

def add_dynomite_to_gemfile
  return unless File.exist?("app/models/application_item.rb")

  lines = IO.readlines("Gemfile")
  dynomite_found = lines.detect { |l| l =~ /dynomite/ }
  return if dynomite_found

  File.open('Gemfile', 'a') do |f|
    f.puts 'gem "dynomite"'
  end
  puts "Updated Gemfile: add dynomite gem"
end

#environment_configsObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/jets/commands/upgrade.rb', line 22

def environment_configs
  path = File.expand_path("templates/skeleton/config/environments", File.dirname(__FILE__))
  puts "path #{path}"
  Dir.glob("#{path}/*").each do |src|
    config_file = "config/environments/#{File.basename(src)}"
    dest = "#{Jets.root}/#{config_file}"

    puts "src #{src}"
    puts "dest #{dest}"
    unless File.exist?(dest)
      puts "Create: #{config_file}"
      FileUtils.mkdir_p(File.dirname(dest))
      FileUtils.cp(src, dest)
    end
  end
end

#remove_ruby_lazy_loadObject



92
93
94
95
96
97
98
# File 'lib/jets/commands/upgrade.rb', line 92

def remove_ruby_lazy_load
  app_config = "#{Jets.root}/config/application.rb"
  remove_ruby_lazy_load_for(app_config)
  Dir.glob("#{Jets.root}/config/environments/*.rb").each do |env_config|
    remove_ruby_lazy_load_for(env_config)
  end
end

#remove_ruby_lazy_load_for(path) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
# File 'lib/jets/commands/upgrade.rb', line 100

def remove_ruby_lazy_load_for(path)
  lines = IO.readlines(path)
  new_lines = lines.reject do |l|
    l =~ %r{config.ruby.lazy_load}
  end
  return unless lines != new_lines

  content = new_lines.join("")
  IO.write(path, content)
  puts "Update: #{path}"
end

#runObject



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/jets/commands/upgrade.rb', line 10

def run
  puts "Upgrading to Jets structure to latest version"
  environment_configs
  update_routes
  update_mode_setting
  update_config_ru
  remove_ruby_lazy_load
  update_webpack_binstubs
  add_dynomite_to_gemfile
  puts "Upgrade complete."
end

#update_config_ruObject



80
81
82
83
84
85
86
87
88
89
90
# File 'lib/jets/commands/upgrade.rb', line 80

def update_config_ru
  src = "#{Jets.root}/config.ru"
  return unless File.exist?(src)
  config_ru = File.read(src)
  return if config_ru.include?("Jets.boot")

  src = File.expand_path("templates/skeleton/config.ru", File.dirname(__FILE__))
  dest = src
  puts "Update: config.ru"
  FileUtils.cp(src, dest)
end

#update_mode_settingObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/jets/commands/upgrade.rb', line 60

def update_mode_setting
  application_file = "#{Jets.root}/config/application.rb"
  lines = IO.readlines(application_file)
  deprecated_code = 'config.api_generator'
  return unless lines.detect { |l| l.include?(deprecated_code) }

  puts "Update: config/application.rb"
  lines.map! do |line|
    if line.include?(deprecated_code)
      mode = Jets.config.api_generator ? 'api' : 'html'
      %Q|  config.mode = "#{mode}"\n| # assume 2 spaces for simplicity
    else
      line
    end
  end

  content = lines.join
  IO.write(application_file, content)
end

#update_routesObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/jets/commands/upgrade.rb', line 39

def update_routes
  routes_file = "#{Jets.root}/config/routes.rb"
  return unless File.exist?(routes_file)

  lines = IO.readlines(routes_file)
  deprecated_code = 'root "jets/welcome#index"'
  return unless lines.detect { |l| l.include?(deprecated_code) }

  puts "Update: config/routes.rb"
  lines.map! do |line|
    if line.include?(deprecated_code)
      %Q|  root "jets/public#show"\n| # assume 2 spaces for simplicity
    else
      line
    end
  end

  content = lines.join
  IO.write(routes_file, content)
end

#update_webpack_binstubsObject



112
113
114
115
116
117
118
119
120
121
# File 'lib/jets/commands/upgrade.rb', line 112

def update_webpack_binstubs
  return unless File.exist?("bin/webpack")
  lines = IO.readlines("bin/webpack")
  already_upgraded = lines.detect { |l| l =~ /WebpackRunner/ }
  return if already_upgraded

  update_project_file("bin/webpack")
  update_project_file("bin/webpack-dev-server")
  puts "Updated webpack binstubs."
end