Top Level Namespace

Defined Under Namespace

Modules: OpenStudio Classes: Hash

Instance Method Summary collapse

Instance Method Details

#parse_measure_xml(measure_xml_filename) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/openstudio/helpers/utils.rb', line 8

def parse_measure_xml(measure_xml_filename)
  measure_hash = {}
  xml_to_parse = File.open(measure_xml_filename)
  xml_root = REXML::Document.new(xml_to_parse).root

  # pull out some information
  measure_hash[:classname] = xml_root.elements['//measure/class_name'].text
  measure_hash[:name] = xml_root.elements['//measure/name'].text
  measure_hash[:display_name] = xml_root.elements['//measure/display_name'].text
  measure_hash[:display_name_titleized] = measure_hash[:name].titleize
  measure_hash[:measure_type] = xml_root.elements['//measure/attributes/attribute[name="Measure Type"]/value'].text
  measure_hash[:description] = xml_root.elements['//measure/description'].text
  measure_hash[:modeler_description] = xml_root.elements['//measure/modeler_description'].text
  measure_hash[:uid] = xml_root.elements['//measure/uid'].text
  measure_hash[:version_id] = xml_root.elements['//measure/version_id'].text
  measure_hash[:arguments] = []

  REXML::XPath.each(xml_root, '//measure/arguments/argument') do |arg|
    measure_hash[:arguments] << {
      name: arg.elements['name']&.text,
      display_name: arg.elements['display_name']&.text,
      variable_type: arg.elements['type']&.text.downcase,
      default_value: arg.elements['default_value']&.text,
      units: arg.elements['units']&.text || ''
    }
  end

  measure_hash
end

#typecast_value(variable_type, value, inspect_string = false) ⇒ Object

Typecast Variable Values by a string.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/openstudio/helpers/string.rb', line 7

def typecast_value(variable_type, value, inspect_string = false)
  out_value = nil
  unless value.nil?
    case variable_type.downcase
      when 'double'
        out_value = value.to_f
      when 'integer'
        out_value = value.to_i
      when 'string', 'choice'
        out_value = inspect_string ? value.inspect : value.to_s
      when 'bool', 'boolean'
        # Check if the value is already a boolean
        if !!value == value
          out_value = value
        else
          if value.casecmp('true').zero?
            out_value = true
          elsif value.casecmp('false').zero?
            out_value = false
          else
            raise "Can't cast to a bool from a value of '#{value}' of class '#{value.class}'"
          end
        end
      else
        raise "Unknown variable type of '#{@variable['type']}'"
    end
  end

  out_value
end