Class: NcsNavigator::Mdes::TransmissionTable

Inherits:
Object
  • Object
show all
Defined in:
lib/ncs_navigator/mdes/transmission_table.rb

Overview

One table in the MDES.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ TransmissionTable

Returns a new instance of TransmissionTable.



37
38
39
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 37

def initialize(name)
  @name = name
end

Instance Attribute Details

#child_instrument_table=(value) (writeonly)

This method returns an undefined value.



35
36
37
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 35

def child_instrument_table=(value)
  @child_instrument_table = value
end

#nameString (readonly)

Returns the machine name of the table. This is also the name of the XML element in the VDR export.

Returns:

  • (String)

    the machine name of the table. This is also the name of the XML element in the VDR export.



24
25
26
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 24

def name
  @name
end

#variablesArray<Variable>

Returns the variables that make up this table. (A relational model might call these the columns of this table.).

Returns:

  • (Array<Variable>)

    the variables that make up this table. (A relational model might call these the columns of this table.)



30
31
32
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 30

def variables
  @variables
end

Class Method Details

.from_element(element, options = {}) ⇒ TransmissionTable

Creates a new instance from an xs:element describing the table.

Returns:



11
12
13
14
15
16
17
18
19
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 11

def self.from_element(element, options={})
  log = options[:log] || NcsNavigator::Mdes.default_logger

  new(element['name']).tap do |table|
    table.variables = element.
      xpath('xs:complexType/xs:sequence/xs:element', SourceDocuments.xmlns).
      collect { |col_elt| Variable.from_element(col_elt, options) }
  end
end

Instance Method Details

#[](variable_name) ⇒ Variable

Search for a variable by name.

Parameters:

  • variable_name (String)

    the name of the variable to look for.

Returns:

  • (Variable)

    the variable with the given name, if any



50
51
52
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 50

def [](variable_name)
  variables.find { |c| c.name == variable_name }
end

#child_instrument_table?true, ...

Is this a child instrument data table? (As opposed to a parent instrument data table or neither.)

This reports the type of participant whose p_id should go in this table's p_id variable.

Return values:

  • true: The p_id should be a child's p_id.
  • false: The p_id should be a parent's p_id.
  • nil: The table isn't an instrument data table, or it doesn't have a p_id variable, or the childness of the p_id isn't known.

Returns:

  • (true, false, nil)


138
139
140
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 138

def child_instrument_table?
  @child_instrument_table
end

#diff(other_table, options = {}) ⇒ Differences::Entry?

Computes the differences between this table and the other.

Returns:



171
172
173
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 171

def diff(other_table, options={})
  Differences::Entry.compute(self, other_table, DIFF_CRITERIA, options)
end

#inspectString

Provides a briefer inspection for cleaner IRB use.

Returns:

  • (String)


58
59
60
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 58

def inspect
  "\#<#{self.class} name=#{name.inspect}>"
end

#instrument_table?true, false

Is this an instrument table (i.e., a table for storing results from an instrument)? Every table is either an instrument table or an operational table (never both).

This is not explicitly derivable from the MDES, so this method (and the related methods #operational_table? and #primary_instrument_table?) use this heuristic:

  • If this table contains a variable named instrument_version and is not the instrument table itself, it is a primary instrument table (and so is an instrument table).
  • If this table is not a primary instrument table, but one of its #variables references a table that is a primary instrument table, then this is an instrument table.
  • Similarly, if one of this table's variables references a table which is an instrument table according to the second definition, then this table is an instrument table as well. This continues for any depth of reference.

If none of these conditions are met, then this table is an operational table.

Returns:

  • (true, false)


98
99
100
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 98

def instrument_table?
  instrument_table_predicate_with_stack([])
end

#operational_table?true, false

Is this an operational table (i.e., a table for storing operational data about a participant, household, staff member, or other study management concept)? Every table is either an operational table or an instrument table (never both).

Returns:

  • (true, false)

See Also:



119
120
121
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 119

def operational_table?
  !instrument_table?
end

#parent_instrument_table?true, ...

Is this a parent instrument data table? (As opposed to a child instrument data table or neither.)

This reports the type of participant whose p_id should go in this table's p_id variable.

Return values:

  • true: The p_id should be a parent's p_id.
  • false: The p_id should be a child's p_id.
  • nil: The table isn't an instrument data table, or it doesn't have a p_id variable, or the childness of the p_id isn't known.

Returns:

  • (true, false, nil)


157
158
159
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 157

def parent_instrument_table?
  child_instrument_table?.nil? ? nil : !child_instrument_table?
end

#primary_instrument_table?true, false

Is this a primary instrument table (i.e., is this the table for an instrument that stores all single-valued responses for one execution of that instrument and to which all other instrument tables for that instrument refer [directly or indirectly])?

Returns:

  • (true, false)


69
70
71
# File 'lib/ncs_navigator/mdes/transmission_table.rb', line 69

def primary_instrument_table?
  self.name != 'instrument' && variables.any? { |v| v.name == 'instrument_version' }
end