Class: EEML::Environment

Inherits:
Object
  • Object
show all
Defined in:
lib/eeml/environment.rb

Overview

An EEML environment object. Can contain a number of EEML::Data objects, as well as having other attributes.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeEnvironment

Create new Environment object



12
13
14
# File 'lib/eeml/environment.rb', line 12

def initialize
  @data_items = []
end

Class Method Details

.from_eeml(eeml) ⇒ Object

Create from an EEML document



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/eeml/environment.rb', line 17

def self.from_eeml(eeml)
  # Parse EEML
  doc = REXML::Document.new(eeml)
  # Create environment object
  env = Environment.new
  # Read data items
  REXML::XPath.each(doc, "/eeml/environment/data") do |node|
    env << EEML::Data.new(node.elements['value'].text.to_f)
  end
  # Done
  return env
end

Instance Method Details

#<<(value) ⇒ Object

Add an EEML::Data object to the environment

Raises:

  • (TypeError)


51
52
53
54
# File 'lib/eeml/environment.rb', line 51

def <<(value)
  raise TypeError.new('Only EEML::Data objects can be added to EEML::Environment objects') unless value.is_a?(EEML::Data)
  @data_items << value
end

#[](index) ⇒ Object

Access contained EEML::Data objects



62
63
64
# File 'lib/eeml/environment.rb', line 62

def [](index)
  @data_items[index]
end

#sizeObject

The number of EEML::Data objects in the environment



57
58
59
# File 'lib/eeml/environment.rb', line 57

def size
  @data_items.size
end

#to_eemlObject

Convert to EEML

Raises:



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/eeml/environment.rb', line 31

def to_eeml
  # Check that we have some data items
  raise EEML::NoData.new('EEML requires at least one data item') if size < 1
  # Create EEML
  eeml = Builder::XmlMarkup.new
  eeml.instruct!
  eeml.eeml(:xmlns => "http://www.eeml.org/xsd/005",
            :'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
            :'xsi:schemaLocation' => "http://www.eeml.org/xsd/005 http://www.eeml.org/xsd/005/005.xsd") do
    eeml.environment do
      @data_items.each_index do |i|
        eeml.data(:id => i) do
          eeml.value @data_items[i].value
        end
      end
    end
  end
end