class Gitomator::BaseContext

Register service-factories, and create services.

Public Class Methods

new(config) click to toggle source

@param config [Hash]

# File lib/gitomator/context.rb, line 15
def initialize(config)
  @config = config
  @service2factory = {}
  @services = {}

  config.select { |_,v| v.is_a?(Hash) && v.has_key?('provider')}
    .each do |service, service_config|
      register_service(service.to_sym) do |config|
        self.send("create_#{config['provider']}_#{service}_service", config || {})
      end
    end

end

Public Instance Methods

register_service(service, &block) click to toggle source

@param service [Symbol] The service's name. @param block [Proc<Hash> -> Object] Given a config, create a service object.

# File lib/gitomator/context.rb, line 34
def register_service(service, &block)
  @service2factory[service] = block

  # Create a lazy-loader getter for the service
  unless self.respond_to? service
    self.class.send(:define_method, service) do
      @services[service] ||= @service2factory[service].call(@config[service.to_s] || {})
    end
  end
end