class GreenSMS::API::ModuleLoader

Public Class Methods

new() click to toggle source
# File lib/greensms/api/module_loader.rb, line 8
def initialize()
  @module_map = {}
end

Public Instance Methods

register_modules(shared_options, filters = {}) click to toggle source
# File lib/greensms/api/module_loader.rb, line 12
def register_modules(shared_options, filters = {})
  if filters.nil?
    filters = {}
  end

  current_version = shared_options["version"]
  modules = GreenSMS::MODULES

  modules.each do |module_name, module_info|
    if !@module_map.has_key?(module_name.to_sym)
      @module_map[module_name] = {}
    end

    module_versions = module_info["versions"]
    module_schema = nil

    is_static_module = filters.has_key?("load_static") && module_info.has_key?("static") && filters["load_static"] == true && module_info["static"] = true

    next if is_static_module

    module_versions.each do |version, version_functions|
      if !@module_map[module_name].has_key?(version)
        @module_map[module_name][version] = {}
      end

      version_functions.each do |function_name, definition|
        if !@module_map[module_name][version].has_key?(function_name)
          @module_map[module_name][version][function_name] = {}
        end

        module_schema = nil
        schema_exists = module_info.has_key?("schema") && module_info["schema"].has_key?(version) && module_info["schema"][version].has_key?(function_name)
        if schema_exists == true
          module_schema = module_info["schema"][version][function_name]
        end

        url_args = []
        if !module_info.has_key?("static") || module_info["static"] != true
          url_args.append(module_name)
        end
        url_args.append(function_name)

        api_url = GreenSMS.build_url(shared_options["base_url"], url_args)
        @module_map[module_name][version][function_name] = module_api(
          shared_options: shared_options, api_url: api_url, definition: definition, module_schema: module_schema, module_name: module_name, function_name: function_name,
        )

        if version == current_version
          @module_map[module_name][function_name] = @module_map[module_name][version][function_name]
        end

        if module_info.has_key?("static") && module_info["static"] == true
          @module_map[function_name] = @module_map[module_name][version][function_name]
          @module_map.delete(module_name)
        end
      end
    end
  end
  return @module_map
end

Private Instance Methods

module_api(kwargs) click to toggle source
# File lib/greensms/api/module_loader.rb, line 75
def module_api(kwargs)
  rest_client = kwargs[:shared_options]["rest_client"]
  module_schema = kwargs[:module_schema]

  request_params = {
    "url" => kwargs[:api_url],
    "method" => kwargs[:definition]["method"],
  }

  mod = GreenSMS::API::Module.new(rest_client, module_schema, request_params, kwargs[:module_name], kwargs[:function_name])
  return mod # Return the module instance
end