Class: Procodile::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/procodile/config.rb

Constant Summary collapse

COLORS =
[35, 31, 36, 32, 33, 34]

Instance Method Summary collapse

Constructor Details

#initialize(root, procfile = nil) ⇒ Config

Returns a new instance of Config.



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/procodile/config.rb', line 11

def initialize(root, procfile = nil)
  @root = root
  @procfile_path = procfile
  unless File.file?(procfile_path)
    raise Error, "Procfile not found at #{procfile_path}"
  end
  FileUtils.mkdir_p(pid_root)

  @processes = process_list.each_with_index.each_with_object({}) do |((name, command), index), hash|
    hash[name] = create_process(name, command, COLORS[index.divmod(COLORS.size)[1]])
  end
end

Instance Method Details

#app_nameObject



66
67
68
# File 'lib/procodile/config.rb', line 66

def app_name
  @app_name ||= local_options['app_name'] || options['app_name'] || 'Procodile'
end

#console_commandObject



70
71
72
# File 'lib/procodile/config.rb', line 70

def console_command
  local_options['console_command'] || options['console_command']
end

#environment_variablesObject



102
103
104
# File 'lib/procodile/config.rb', line 102

def environment_variables
  (options['env'] || {}).merge(local_options['env'] || {})
end

#local_optionsObject



90
91
92
# File 'lib/procodile/config.rb', line 90

def local_options
  @local_options ||= load_local_options_from_file
end

#local_options_pathObject



145
146
147
# File 'lib/procodile/config.rb', line 145

def local_options_path
  procfile_path + ".local"
end

#local_process_optionsObject



94
95
96
# File 'lib/procodile/config.rb', line 94

def local_process_options
  @local_process_options ||= local_options['processes'] || {}
end

#log_pathObject



114
115
116
117
118
119
120
121
122
123
# File 'lib/procodile/config.rb', line 114

def log_path
  log_path = local_options['log_path'] || options['log_path']
  if log_path
    File.expand_path(log_path, self.root)
  elsif log_path.nil? && self.log_root
    File.join(self.log_root, 'procodile.log')
  else
    File.expand_path("procodile.log", self.root)
  end
end

#log_rootObject



125
126
127
128
129
130
131
# File 'lib/procodile/config.rb', line 125

def log_root
  if log_root = (local_options['log_root'] || options['log_root'])
    File.expand_path(log_root, self.root)
  else
    nil
  end
end

#optionsObject



82
83
84
# File 'lib/procodile/config.rb', line 82

def options
  @options ||= load_options_from_file
end

#options_for_process(name) ⇒ Object



98
99
100
# File 'lib/procodile/config.rb', line 98

def options_for_process(name)
  (process_options[name] || {}).merge(local_process_options[name] || {})
end

#options_pathObject



141
142
143
# File 'lib/procodile/config.rb', line 141

def options_path
  procfile_path + ".options"
end

#pid_rootObject



106
107
108
# File 'lib/procodile/config.rb', line 106

def pid_root
  @pid_root ||= File.expand_path(local_options['pid_root'] || options['pid_root'] || 'pids', self.root)
end

#process_listObject



78
79
80
# File 'lib/procodile/config.rb', line 78

def process_list
  @process_list ||= load_process_list_from_file
end

#process_optionsObject



86
87
88
# File 'lib/procodile/config.rb', line 86

def process_options
  @process_options ||= options['processes'] || {}
end

#processesObject



74
75
76
# File 'lib/procodile/config.rb', line 74

def processes
  @processes ||= {}
end

#procfile_pathObject



137
138
139
# File 'lib/procodile/config.rb', line 137

def procfile_path
  @procfile_path || File.join(@root, 'Procfile')
end

#reloadObject



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
# File 'lib/procodile/config.rb', line 24

def reload
  @process_list = nil
  @options = nil
  @process_options = nil
  @local_options = nil
  @local_process_options = nil

  if @processes
    process_list.each do |name, command|
      if process = @processes[name]
        process.removed = false
        # This command is already in our list. Add it.
        if process.command != command
          process.command = command
          Procodile.log nil, 'system', "#{name} command has changed. Updated."
        end
        process.options = options_for_process(name)
      else
        Procodile.log nil, 'system', "#{name} has been added to the Procfile. Adding it."
        @processes[name] = create_process(name, command, COLORS[@processes.size.divmod(COLORS.size)[1]])
      end
    end

    removed_processes = @processes.keys - process_list.keys
    removed_processes.each do |process_name|
      if p = @processes[process_name]
        p.removed = true
        @processes.delete(process_name)
        Procodile.log nil, 'system', "#{process_name} has been removed to the Procfile. It will be removed when it is stopped."
      end
    end
  end
end

#rootObject



58
59
60
# File 'lib/procodile/config.rb', line 58

def root
  local_options['root'] || options['root'] || @root
end

#sock_pathObject



133
134
135
# File 'lib/procodile/config.rb', line 133

def sock_path
  File.join(pid_root, 'procodile.sock')
end

#supervisor_pid_pathObject



110
111
112
# File 'lib/procodile/config.rb', line 110

def supervisor_pid_path
  File.join(pid_root, 'procodile.pid')
end

#userObject



62
63
64
# File 'lib/procodile/config.rb', line 62

def user
  local_options['user'] || options['user']
end