Class: Origen::SiteConfig

Inherits:
Object show all
Defined in:
lib/origen/site_config.rb

Constant Summary collapse

TRUE_VALUES =
['true', 'TRUE', '1', 1]
FALSE_VALUES =
['false', 'FALSE', '0', 0]

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/origen/site_config.rb', line 122

def method_missing(method, *args, &block)
  method = method.to_s
  if method =~ /(.*)!$/
    method = Regexp.last_match(1)
    must_be_present = true
  end
  val = find_val(method)
  if must_be_present && val.nil?
    puts "No value assigned for site_config attribute '#{method}'"
    puts
    fail 'Missing site_config value!'
  end
  define_singleton_method(method) do
    find_val(method)
  end
  val
end

Instance Method Details

#add_as_highest(var, value) ⇒ Object Also known as: []=

Dynamically add a new site variable at the highest priority.



97
98
99
100
101
# File 'lib/origen/site_config.rb', line 97

def add_as_highest(var, value)
  # Don't want to override anything, so just shift in a dummy site config instance at the highest level and
  # set the value there.
  configs.prepend(var.to_s => value)
end

#add_as_lowest(var, value) ⇒ Object

Dynamically add a new site variable at the lowest priority. Essentially, this sets a new default value.



106
107
108
109
110
# File 'lib/origen/site_config.rb', line 106

def add_as_lowest(var, value)
  # Don't want to override anything, so just shift in a dummy site config at the lowest level and
  # set the value there.
  configs.append(var.to_s => value)
end

#add_site_config_as_highest(site_config_file) ⇒ Object

Adds a new site config file as the highest priority



113
114
115
# File 'lib/origen/site_config.rb', line 113

def add_site_config_as_highest(site_config_file)
  configs.prepend YAML.load_file(File.expand_path('../../../origen_site_config.yml', __FILE__))
end

#add_site_config_as_lowest(site_config_file) ⇒ Object

Adds a new site config file as the highest priority



118
119
120
# File 'lib/origen/site_config.rb', line 118

def add_site_config_as_lowest(site_config_file)
  configs.append YAML.load_file(File.expand_path('../../../origen_site_config.yml', __FILE__))
end

#clearObject



155
156
157
# File 'lib/origen/site_config.rb', line 155

def clear
  @configs.clear
end

#eval_path(path, options = {}) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/origen/site_config.rb', line 41

def eval_path(path, options = {})
  # Expand the first path. This will take care of replacing any leading ~/ with the home directory.
  if path.start_with?('\\')
    path[0] = ''
  else
    path = File.expand_path(path)
  end

  # Gsub the remaining ~ that aren't escaped.
  # If it was escaped, eat the escape character
  path.gsub!(/(?<!\\|\A)~/, "#{Etc.getlogin}")
  path.gsub!(/\\(?=~)/, '')

  append = find_val('append_dot_origen')
  append = '.origen' if append == true || append.nil?

  gem_append = find_val('append_gems')
  gem_append = 'gems' if gem_append == true || gem_append.nil?

  if append
    unless path.end_with?(append) || (path.end_with?(File.join(append, gem_append)) if gem_append)
      path = File.join(path, append)
    end
  end
  path
end

#gem_install_dirObject Also known as: user_gem_dir

Gets the gem_intall_dir. This is either site_config.home_dir/gems or the site configs gem_install_dir



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/origen/site_config.rb', line 13

def gem_install_dir
  if gems_use_tool_repo && tool_repo_install_dir && !user_install_enable
    path = eval_path(tool_repo_install_dir)
  else
    path = eval_path(find_val('user_gem_dir') || find_val('gem_install_dir') || home_dir)
  end

  append = find_val('append_gems')
  append = 'gems' if append == true || append.nil?

  if append
    unless path.end_with?(append)
      path = File.join(path, append)
    end
  end
  path
end

#get(val) ⇒ Object Also known as: []



140
141
142
# File 'lib/origen/site_config.rb', line 140

def get(val)
  find_val(val)
end

#get_all(val) ⇒ Object



145
146
147
148
149
150
151
152
153
# File 'lib/origen/site_config.rb', line 145

def get_all(val)
  ret = []
  @configs.each do |c|
    if c.key?(val)
      ret << c[val]
    end
  end
  ret
end

#home_dirObject



37
38
39
# File 'lib/origen/site_config.rb', line 37

def home_dir
  eval_path(find_val('home_dir') || '~/')
end

#rebuild!Object



159
160
161
# File 'lib/origen/site_config.rb', line 159

def rebuild!
  configs!
end

#remove_all_instances(var) ⇒ Object Also known as: purge

Dynamically remove all the instances of :var



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/origen/site_config.rb', line 81

def remove_all_instances(var)
  # Iterate though all the site configs, removing every instance of :var
  # Return an array containing the value of :var at each config,
  # from lowest priority to highest.
  # If [] is returned, it implies that there was no instancs of :var to be removed.
  ret = []
  @configs.each do |c|
    if c.key?(var)
      ret << c.delete(var)
    end
  end
  ret
end

#remove_highest(var) ⇒ Object

Dynamically remove the highest instance of :var



69
70
71
72
73
74
75
76
77
78
# File 'lib/origen/site_config.rb', line 69

def remove_highest(var)
  @configs.each do |c|
    if c.key?(var)
      return c.delete(var)
    end
  end

  # return nil if we haven't returned a value yet
  nil
end

#user_install_dirObject

Gets the user_install_dir. Like gem_install_dir, this default to somewhere home_dir, unless overridden



33
34
35
# File 'lib/origen/site_config.rb', line 33

def user_install_dir
  eval_path(find_val('user_install_dir') || home_dir)
end