module Mspire::Paramable

Attributes

cv_params[RW]
ref_param_groups[RW]
user_params[RW]

Public Class Methods

new() click to toggle source
# File lib/mspire/paramable.rb, line 98
def initialize
  @cv_params = []
  @user_params = []
  @ref_param_groups = []
end

Public Instance Methods

accessionable_params() click to toggle source
# File lib/mspire/paramable.rb, line 39
def accessionable_params
  cv_params + ref_param_groups.flat_map(&:params)
end
describe!(*args) click to toggle source

Expects arguments describing a single CV::Param, Mspire::UserParam, or Mspire::Mzml::ReferenceableParamGroup

obj.describe! 'MS:1000130'  # a positive scan
obj.describe! CV::Param['MS:1000130']  # same behavior

# base peak intensity, units=number of counts
obj.describe! "MS:1000505", 1524.5865478515625, 'MS:1000131'

returns self

# File lib/mspire/paramable.rb, line 173
def describe!(*args)
  return self if args.first.nil?
  case (arg=args.first)
  when String
    @cv_params << Mspire::CV::Param[ *args ]
  when Mspire::Mzml::ReferenceableParamGroup
    @ref_param_groups << arg
  else
    if arg.is_a?(Mspire::UserParam)
      @user_params << arg
    else
      @cv_params << arg
    end
  end
  self
end
describe_from_xml!(xml_node, ref_hash=nil) click to toggle source

takes a node with children that are cvParam, userParam or referenceableParamGroupRef and a hash containing referenceableParamGroup objects indexed by id. The only time ref_hash should be left nil is for the referenceableParamGroup itself.

All param elements are required to appear before other elements, so the code walks through each child node to see if it is a paramable element. The first child node that is not paramable is returned (or nil if none)

returns the next child node after the paramable elements or nil if none

# File lib/mspire/paramable.rb, line 141
def describe_from_xml!(xml_node, ref_hash=nil)
  return nil unless (child_n = xml_node.child) 
  loop do
    array = 
      case child_n.name
      when 'referenceableParamGroupRef'
        @ref_param_groups << ref_hash[child_n[:ref]]
      when 'cvParam'
        @cv_params << Mspire::CV::Param[ child_n[:accession], child_n[:value] ]
      when 'userParam'
        @user_params << Mspire::UserParam.new(child_n[:name], child_n[:value], child_n[:type])
      else # assumes that the above precede any following children as per the spec
        break 
      end
    if (unit_acc = child_n[:unitAccession])
      array.last.unit = ::CV::Param.new(child_n[:unitCvRef], unit_acc, child_n[:unitName])
    end
    break unless child_n = child_n.next
  end
  child_n
end
describe_many!(array) click to toggle source

takes an array of values, each of which is fed into describe! returns self.

# File lib/mspire/paramable.rb, line 112
def describe_many!(array)
  array.each do |arg|
    if arg.is_a?(Array)
      describe!(*arg)
    else
      describe!(arg)
    end
  end
  self
end
describe_self_from_xml!(xml_node, ref_hash=nil) click to toggle source

reads the paramable nodes and returns self. Use this if your element does not have anything besides paramable elements.

# File lib/mspire/paramable.rb, line 125
def describe_self_from_xml!(xml_node, ref_hash=nil)
  describe_from_xml!(xml_node, ref_hash)
  self
end
each_accessionable_param(&block) click to toggle source
# File lib/mspire/paramable.rb, line 32
def each_accessionable_param(&block)
  return enum_for __method__ unless block
  cv_params.each(&block)
  ref_param_groups.flat_map(&:params).each(&block)
  nil
end
each_param(&block) click to toggle source
# File lib/mspire/paramable.rb, line 18
def each_param(&block)
  return enum_for __method__ unless block
  cv_params.each(&block)
  ref_param_groups.flat_map(&:params).each(&block)
  user_params.each(&block)
  nil
end
fetch(name) click to toggle source

returns the value if the param exists by that name. Returns true if the param exists but has no value. returns false if no param

# File lib/mspire/paramable.rb, line 72
def fetch(name)
  param = each_param.find {|param| param.name == name}
  if param
    param.value || true
  else
    false
  end
end
fetch_by_acc(acc)
Alias for: fetch_by_accession
fetch_by_accession(acc) click to toggle source

returns the value if the param exists with that accession. Returns true if the param exists but has no value. returns false if no param with that accession.

# File lib/mspire/paramable.rb, line 84
def fetch_by_accession(acc)
  param = accessionable_params.find {|v| v.accession == acc }
  if param
    param.value || true
  else
    false
  end
end
Also aliased as: fetch_by_acc
param?(name) click to toggle source
# File lib/mspire/paramable.rb, line 94
def param?(name)
  params.any? {|param| param.name == name }
end
param_by_acc(acc)
Alias for: param_by_accession
param_by_accession(acc) click to toggle source
# File lib/mspire/paramable.rb, line 105
def param_by_accession(acc)
  each_accessionable_param.find {|v| v.accession == acc }
end
Also aliased as: param_by_acc
params() click to toggle source
# File lib/mspire/paramable.rb, line 14
def params
  cv_params + ref_param_groups.flat_map(&:params) + user_params 
end
params?() click to toggle source
# File lib/mspire/paramable.rb, line 26
def params?
  cv_params.size > 0 || 
    ref_param_groups.any? {|group| group.params.size > 0 } || 
    user_params.size > 0
end
reject!(&block) click to toggle source

returns self

# File lib/mspire/paramable.rb, line 51
def reject!(&block)
  cv_params.reject!(&block)
  ref_param_groups.each {|group| group.reject!(&block) }
  user_params.reject!(&block)
  self
end
replace!(*describe_args, &block) click to toggle source

yields each current param. If the return value is not false or nil, it is deleted (i.e., any true value and it is deleted). Then adds the given parameter or makes a new one by accession number.

# File lib/mspire/paramable.rb, line 46
def replace!(*describe_args, &block)
  reject!(&block).describe!(*describe_args)
end
replace_many!(describe_many_arg, &block) click to toggle source
# File lib/mspire/paramable.rb, line 58
def replace_many!(describe_many_arg, &block)
  reject!(&block).describe_many!(describe_many_arg)
end
to_xml(xml) click to toggle source

iterates over @params and calls .to_xml on each object.

# File lib/mspire/paramable.rb, line 191
def to_xml(xml)
  [:ref_param_groups, :cv_params, :user_params].each do |kind|
    self.send(kind).each do |obj|
      obj.to_xml(xml)
    end
  end
  xml
end