Module: Rbcli::Config

Defined in:
lib/rbcli/features/userconfig.rb

Class Method Summary collapse

Class Method Details

.add_categorized_defaults(name, description, config) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/rbcli/features/userconfig.rb', line 76

def self.add_categorized_defaults name, description, config
  @categorized_defaults ||= {}
  @categorized_defaults[name.to_sym] = {
      description: description,
      config: config
  }

  @config_defaults ||= {}
  @config_defaults[name.to_sym] = {}
  config.each do |k, v|
    @config_defaults[name.to_sym][k.to_sym] = v[:value]
  end
  @loaded = false
end

.add_default(name, description: nil, default: nil) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/rbcli/features/userconfig.rb', line 91

def self.add_default name, description: nil, default: nil
  @config_individual_lines ||= []
  text = "#{name.to_s}: #{default}".ljust(30) + " # #{description}"
  @config_individual_lines.push text unless @config_individual_lines.include? text
  @config_defaults[name.to_sym] = default
  @loaded = false
end

.add_defaults(filename = nil, text: nil) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/rbcli/features/userconfig.rb', line 99

def self.add_defaults filename=nil, text: nil
  filename = File.expand_path filename
  return unless filename and File.exists? filename
  @config_text ||= ''
  @config_text += "\n" unless @config_text.empty?
  File.readlines(filename).each do |line|
    if line.start_with? '---' or line.start_with? '...'
      @config_text << "\n" unless @config_text.empty?
    else
      @config_text << line unless @config_text.include? line
    end
  end if filename and File.exists? filename
  @config_text << "\n\n" << text if text

  @config_defaults ||= {}
  @config_defaults.deep_merge! YAML.safe_load(@config_text, [], [], true).deep_symbolize!
  @loaded = false
end

.configObject



132
133
134
135
# File 'lib/rbcli/features/userconfig.rb', line 132

def self.config
  self.load unless @loaded
  (@config.nil?) ? @config_defaults : @config
end

.generate_userconf(filename) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/rbcli/features/userconfig.rb', line 137

def self.generate_userconf filename
  filepath = File.expand_path "#{(filename) ? filename : "#{Dir.pwd}/config.yml"}"
  FileUtils.touch filepath
  File.write filepath, @config_text
  File.open(filepath, 'a') do |f|
    f.puts "# Individual Settings"
    @config_individual_lines.each { |l| f.puts l }
  end if @config_individual_lines


  if @categorized_defaults
    text = ''
    @categorized_defaults.each do |name, opts|
      text += "\n# #{opts[:description]}\n"
      text += "#{name.to_s}:\n"
      opts[:config].each do |opt, v|
        text += "  #{opt.to_s}: #{(v[:value].nil?) ? '~' : v[:value]}".ljust(30) + " # #{v[:description]}\n"
      end
    end
    File.open(filepath, 'a') do |f|
      f.puts text
    end
  end
end

.loadObject



118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/rbcli/features/userconfig.rb', line 118

def self.load
  if (! @config_file.nil?) and File.exists? @config_file
    @config = YAML.safe_load(File.read(@config_file), [], [], true).deep_symbolize!
    @config.deep_merge! @config_defaults if @merge_defaults
  elsif @userfile_required
    puts "User's config file not found at #{@config_file}. Please run this tool with the `--generate-config` option to generate it."
    exit 1
  else
    @config = @config_defaults
  end
  @loaded = true
  @config
end

.set_userfile(filename, merge_defaults: true, required: false) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/rbcli/features/userconfig.rb', line 68

def self.set_userfile filename, merge_defaults: true, required: false
  return if filename.nil?
  @config_file = File.expand_path filename
  @merge_defaults = merge_defaults
  @userfile_required = required
  @loaded = false
end