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


129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/origen/site_config.rb', line 129

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.


104
105
106
107
108
# File 'lib/origen/site_config.rb', line 104

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.


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

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


120
121
122
# File 'lib/origen/site_config.rb', line 120

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


125
126
127
# File 'lib/origen/site_config.rb', line 125

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

#clearObject


162
163
164
# File 'lib/origen/site_config.rb', line 162

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
67
68
69
70
71
72
73
# File 'lib/origen/site_config.rb', line 41

def eval_path(path, options = {})
  # Any leading ~ should be expanded with whatever ~/ points to. This needs to be done now because later ~ will be replaced with just the username.
  path = path.sub(/^~/, File.expand_path('~/'))

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

  # Now, expand the entire path for any other OS-specific symbols.
  # One note, if we still have a leading '~', that means it was escaped at the beginning. So, what we'll do for this is let it expand
  # then replace the leading File.expand_path('~/') with just '~', pretty much the opposite of path.sub(/^~/, File.expand_path('~/'))
  # Note, we can't just take it out, expand, then add it back  because expanding the path on Windows will expand to
  # C:\, or D:\ or whatever, so need to do this 'expand, then unexpand' method.
  if path.start_with?('~')
    path = File.expand_path(path).sub(/^#{Regexp.quote(File.expand_path('~/'))}/, '~')
  else
    path = File.expand_path(path)
  end

  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: []


147
148
149
# File 'lib/origen/site_config.rb', line 147

def get(val)
  find_val(val)
end

#get_all(val) ⇒ Object


152
153
154
155
156
157
158
159
160
# File 'lib/origen/site_config.rb', line 152

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


166
167
168
# File 'lib/origen/site_config.rb', line 166

def rebuild!
  configs!
end

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

Dynamically remove all the instances of :var


88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/origen/site_config.rb', line 88

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


76
77
78
79
80
81
82
83
84
85
# File 'lib/origen/site_config.rb', line 76

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