module Mspire::Paramable
Attributes
Public Class Methods
# File lib/mspire/paramable.rb, line 98 def initialize @cv_params = [] @user_params = [] @ref_param_groups = [] end
Public Instance Methods
# File lib/mspire/paramable.rb, line 39 def accessionable_params cv_params + ref_param_groups.flat_map(&:params) end
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
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
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
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
# 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
# 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
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
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
# File lib/mspire/paramable.rb, line 94 def param?(name) params.any? {|param| param.name == name } end
# File lib/mspire/paramable.rb, line 105 def param_by_accession(acc) each_accessionable_param.find {|v| v.accession == acc } end
# File lib/mspire/paramable.rb, line 14 def params cv_params + ref_param_groups.flat_map(&:params) + user_params end
# 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
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
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
# File lib/mspire/paramable.rb, line 58 def replace_many!(describe_many_arg, &block) reject!(&block).describe_many!(describe_many_arg) end
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