module Carioca::Services

module Services @note this module is a namespace Carioca::Services

namespace Services for Registry AND buitlins

Public Class Methods

discover_builtins() click to toggle source

class method returning the [Carioca::Services::Registry]@list complement for builtins service found for a carioca gem version @note do not use directly for generale purpose (expert/hacks only) @return [Hash] the [Carioca::Services::Registry]@list complement

# File lib/carioca/services.rb, line 80
def Services::discover_builtins
  if Gem::Specification.respond_to?(:find_by_name)
    begin
      spec = Gem::Specification.find_by_name('carioca')
    rescue LoadError
      spec = nil
    end
  else
    spec = Gem.searcher.find('carioca')
  end

  if spec then
    if Gem::Specification.respond_to?(:find_by_name)
      res = spec.lib_dirs_glob.split('/')
    else
      res = Gem.searcher.lib_dirs_for(spec).split('/')
    end
    res.pop
    services_path = res.join('/').concat('/lib/carioca/services')
  else
    services_path = "./lib/carioca/services"
  end

  map = Dir["#{services_path}/*"]
  map.delete_if { |item| not File::file?(item) }
  map.delete_if { |item| File::basename(item) == 'logger.rb' }

  res = {}
  map.each do |file|
    Services::validate_service(file,res)
  end
  return res
end
search_builtins(_name) click to toggle source

class method returning full path in Carioca gem for builtin services files according to installed gem path. @note do not use directly for generale purpose (expert/hacks only) @param [String] _name the name of a service @return [String,false] the full path filename orfalse if not found

# File lib/carioca/services.rb, line 18
def Services::search_builtins(_name)
  if Gem::Specification.respond_to?(:find_by_name)
    begin
    spec = Gem::Specification.find_by_name('carioca')
    rescue LoadError
      spec = nil
    end
  else
    spec = Gem.searcher.find('carioca')
end
  if spec then
    if Gem::Specification.respond_to?(:find_by_name)

      res = spec.lib_dirs_glob.split('/')
    else
      res = Gem.searcher.lib_dirs_for(spec).split('/')
    end
    res.pop
    services_path = res.join('/').concat('/lib/carioca/services')
  else
    services_path = "./lib/carioca/services"
  end
  _file ="#{services_path}/#{_name}.rb"
  if ( File::exist? _file or File::exist? "lib/#{_file}" ) then
    return _file
  else
    return false
  end
end
search_file_in_gem(_gem,_file) click to toggle source

class method returning the path of a file in gem if exist or false @note do not use directly for generale purpose (expert/hacks only) @return [String|FalseClass] the full path of a service file

# File lib/carioca/services.rb, line 51
def Services::search_file_in_gem(_gem,_file)
  if Gem::Specification.respond_to?(:find_by_name)
    begin
    spec = Gem::Specification.find_by_name(_gem)
    rescue LoadError
      spec = nil
    end
  else
    spec = Gem.searcher.find(_gem)
  end
  if spec then
    if Gem::Specification.respond_to?(:find_by_name)
      res = spec.lib_dirs_glob.split('/')
    else
      res = Gem.searcher.lib_dirs_for(spec).split('/')
    end
    res.pop
    services_path = res.join('/').concat("/#{_file}")
    return services_path if File::exist?(services_path)
    return false
  else
    return false
  end
end
validate_service(file,res) click to toggle source
# File lib/carioca/services.rb, line 114
def Services::validate_service(file,res)
    init_options =  {}
    if open(file).grep(/^# \$BUILTIN/).size > 0 then
      service = open(file).grep(/# \$SERVICE/).first.split[2]
      resource = open(file).grep(/# \$RESOURCE/).first.split[2]
      desc = open(file).grep(/# \$DESCRIPTION/).first
      desc = desc.split(' ')
      desc.shift(2)
      description= desc.join(' ')
      open(file).grep(/# \$INIT_OPTIONS/).each do |opt|
        prev = opt.split
        init_options[prev[2].to_sym] = prev[4]
      end
      distributed = (open(file).grep(/# \$DISTRIBUTED/))? true : false
      req = open(file).grep(/# \$REQUIRES/)
      if req.empty? then
        requires = []
      else
        requires = req.split
        requires.shift
      end

    end
    unless service.nil? or resource.nil? or description.nil? then
      res[resource] = { :service => service, :type => :builtin, :description => description, :resource => resource}
      res[resource][:init_options] = init_options unless init_options.empty?
    end
end