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