module Occi::Core::Helpers::MixinSelector

Introduces mixin-based helpers to every receiver class. Provides methods to access mixin sub-sets defined by dependencies.

@author Boris Parak <parak@cesnet.cz>

Public Instance Methods

dependent_term(mixin) click to toggle source

@see `dependent_terms`

# File lib/occi/core/helpers/mixin_selector.rb, line 47
def dependent_term(mixin)
  [select_mixin(mixin)].compact.map(&:term).first
end
dependent_term!(mixin) click to toggle source

@see `dependent_term`

# File lib/occi/core/helpers/mixin_selector.rb, line 52
def dependent_term!(mixin)
  select_mixin!(mixin).term
end
dependent_terms(mixin) click to toggle source

Returns a list of term of mixins dependent on the given mixin.

@param mixin [Occi::Core::Mixin] parent mixin @return [Array] terms of mixins

# File lib/occi/core/helpers/mixin_selector.rb, line 42
def dependent_terms(mixin)
  select_mixins(mixin).map(&:term)
end
select_mixin(filter) click to toggle source

Selects at most one mixin defined by the given dependence. This dependence must be provided as `filter` and be an instance of `Occi::Core::Mixin` or its subclass.

@param filter [Occi::Core::Mixin] mixin to filter by @return [Occi::Core::Mixin] found mixin @return [NilClass] if such mixin is not found

# File lib/occi/core/helpers/mixin_selector.rb, line 27
def select_mixin(filter)
  mixins.detect { |m| m.depends?(filter) }
end
select_mixin!(filter) click to toggle source

Selects exactly one mixin or raises an error. @see `select_mixin`

# File lib/occi/core/helpers/mixin_selector.rb, line 33
def select_mixin!(filter)
  select_mixin(filter)              || raise(Occi::Core::Errors::InstanceLookupError, "Mixin dependent on #{filter} not found")
end
select_mixins(filter) click to toggle source

Selects a set of mixins defined by a common dependence. This dependence must be provided as `filter` and be an instance of `Occi::Core::Mixin` or its subclass.

@param filter [Occi::Core::Mixin] mixin to filter by @return [Set] found mixins

# File lib/occi/core/helpers/mixin_selector.rb, line 16
def select_mixins(filter)
  Set.new(mixins.select { |m| m.depends?(filter) })
end