Class: ZoweeOptimizer
- Inherits:
-
Object
- Object
- ZoweeOptimizer
- Defined in:
- lib/util/zowee_optimizer.rb
Instance Method Summary collapse
-
#generate_var_name(path) ⇒ String
Generates a valid environment variable name from a path.
-
#initialize(initial_vars = {}) ⇒ ZoweeOptimizer
constructor
The ZoweeOptimizer class is responsible for optimizing the environment variable definitions.
-
#optimize(paths, initial_roots) ⇒ Array<String>
Optimizes a list of paths to generate a script with environment variable definitions.
Constructor Details
#initialize(initial_vars = {}) ⇒ ZoweeOptimizer
The ZoweeOptimizer class is responsible for optimizing the environment variable definitions.
It is used by the git-evars command to generate a script with shorter and more readable variable names.
4 5 6 7 8 9 10 |
# File 'lib/util/zowee_optimizer.rb', line 4 def initialize(initial_vars = {}) @defined_vars = {} initial_vars.each do |var_ref, paths| var_name = var_ref.tr("'$", '') @defined_vars[var_name] = paths.first if paths.any? end end |
Instance Method Details
#generate_var_name(path) ⇒ String
Generates a valid environment variable name from a path.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/util/zowee_optimizer.rb', line 47 def generate_var_name(path) basename = File.basename(path) return nil if basename.empty? parts = basename.split('.') name = if parts.first == 'www' && parts.length > 1 parts[1] else parts.first end.tr('-', '_') if @defined_vars.key?(name) && @defined_vars[name] != path # Collision. Try to disambiguate. parent_name = File.basename(File.dirname(path)) name = "#{parent_name}_#{name}" end # Sanitize the name name.gsub!(/[^a-zA-Z0-9_]/, '_') # Prepend underscore if it starts with a digit name = "_#{name}" if name.match?(/^[0-9]/) name end |
#optimize(paths, initial_roots) ⇒ Array<String>
Optimizes a list of paths to generate a script with environment variable definitions.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/util/zowee_optimizer.rb', line 16 def optimize(paths, initial_roots) output = [] # Find common prefixes and define intermediate variables define_intermediate_vars(paths) paths.each do |path| var_name = generate_var_name(path) next if var_name.nil? # Skip defining a var for a root that was passed in. next if initial_roots.include?("$#{var_name}") && @defined_vars[var_name] == path best_substitution = find_best_substitution(path) value = if best_substitution "$#{best_substitution[:var]}/#{path.sub("#{best_substitution[:path]}/", '')}" else path end output << "export #{var_name}=#{value}" @defined_vars[var_name] = path end (@intermediate_vars.values + output).uniq end |