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 Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root) ⇒ Config

Returns a new instance of Config.



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

def initialize(root)
  @root = root
  unless File.exist?(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 Attribute Details

#rootObject (readonly)

Returns the value of attribute root.



10
11
12
# File 'lib/procodile/config.rb', line 10

def root
  @root
end

Instance Method Details

#app_nameObject



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

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

#environment_variablesObject



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

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

#local_environment_variablesObject



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

def local_environment_variables
  @local_environment_variables ||= local_options['env'] || {}
end

#local_optionsObject



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

def local_options
  @local_options ||= File.exist?(local_options_path) ? YAML.load_file(local_options_path) : {}
end

#local_process_optionsObject



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

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

#log_pathObject



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

def log_path
  @log_path ||= File.expand_path(local_options['log_path'] || options['log_path'] || 'procodile.log', @root)
end

#optionsObject



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

def options
  @options ||= File.exist?(options_path) ? YAML.load_file(options_path) : {}
end

#options_for_process(name) ⇒ Object



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

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

#pid_rootObject



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

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

#process_listObject



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

def process_list
  @process_list ||= YAML.load_file(procfile_path) || {}
end

#process_optionsObject



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

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

#processesObject



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

def processes
  @processes ||= {}
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

#sock_pathObject



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

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