lib/rosette/integrations/integratable.rb
# encoding: UTF-8
module Rosette
module Integrations
# Intended to be mixed in to classes that can be integrated with. Provides
# methods to add and retrieve integration configs as well as apply
# configured integrations to the parent.
module Integratable
# Returns the current list of integration configs.
#
# @return [Array]
def integrations
@integrations ||= []
end
# Add an integration. Yields an instance of the integration's
# configurator object to the given block.
#
# @param [String] integration_id The id of the integration to add.
# @yield [config]
# @yieldparam config The integration's configurator.
# @return [void]
def add_integration(integration_id, &block)
klass = Rosette::Core::IntegrationId.resolve(integration_id)
integrations << klass.configure(&block)
end
# Retrieve the integration config by id.
#
# @param [String] integration_id The integration id.
# @return [nil, Object] The integration's configurator.
def get_integration(integration_id)
klass = Rosette::Core::IntegrationId.resolve(integration_id)
if klass
integrations.find do |integration|
integration.is_a?(klass)
end
end
rescue ArgumentError
end
# Applies the integrations to the given object.
#
# @param [Object] obj The object to apply the integrations to.
# @return [void]
def apply_integrations(obj)
integrations.each do |integration|
if integration.integrates_with?(obj)
integration.integrate(obj)
end
end
end
end
end
end