Class: Wire::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/wire/model/project.rb

Overview

Defines a project with model elements (zones, networks, …) as open structs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target_dir) ⇒ Project

set up empty project. Sets target_dir



20
21
22
23
# File 'lib/wire/model/project.rb', line 20

def initialize(target_dir)
  @target_dir = target_dir
  @data = {}
end

Instance Attribute Details

#dataObject

target_dir is the directory where model files are stores data is a [Hash] of all model objects



17
18
19
# File 'lib/wire/model/project.rb', line 17

def data
  @data
end

#target_dirObject

target_dir is the directory where model files are stores data is a [Hash] of all model objects



17
18
19
# File 'lib/wire/model/project.rb', line 17

def target_dir
  @target_dir
end

Instance Method Details

#calc_statsObject

calculates count statistics on project returns:

  • Hash], key => element type, value => [int

    count



66
67
68
69
70
71
72
73
74
# File 'lib/wire/model/project.rb', line 66

def calc_stats
  result = {}

  @data.each do |element_name, element_data|
    result[element_name] = element_data.size
  end

  result
end

#element?(element_name) ⇒ Boolean

check if we have a model element (i.e. zones) params: element_name Name of model element part, i.e. ‘backend-zone’

Returns:

  • (Boolean)


36
37
38
# File 'lib/wire/model/project.rb', line 36

def element?(element_name)
  @data.key? element_name.to_sym
end

#get_element(element_name) ⇒ Object

retrieve element hash, raise ArgumentError if it does not exist. params: element_name Name of model element part, i.e. ‘backend-zone’



44
45
46
47
48
49
# File 'lib/wire/model/project.rb', line 44

def get_element(element_name)
  fail(
      ArgumentError, "Element #{element_name} not found"
  ) unless element?(element_name)
  @data[element_name.to_sym]
end

#merge_element(element_name, element_data) ⇒ Object

merge in hash data Params: element_name Name of model element part, i.e. ‘zones’ element_data [Hash] of model element data



29
30
31
# File 'lib/wire/model/project.rb', line 29

def merge_element(element_name, element_data)
  @data.merge!({ element_name.to_sym => element_data })
end

#vartmp_dirObject

return project’s var/tmp directory, will be configurable in the future



53
54
55
56
57
58
59
60
61
# File 'lib/wire/model/project.rb', line 53

def vartmp_dir
  # as of now, use .state in target dir
  state_dir = File.join(@target_dir, '.state')
  unless File.directory? state_dir
    FileUtils.mkdir_p state_dir
    $log.debug "created state dir #{state_dir}"
  end
  state_dir
end