Sha256: bb25717762761489183bdc295698aff7e5574bdd2b9a02988aea939defb8b270

Contents?: true

Size: 1.94 KB

Versions: 7

Compression:

Stored size: 1.94 KB

Contents

require 'rubypitaya/core/handler_base'

module RubyPitaya

  class HandlerRouter

    def initialize(handler_folder_path)
      import_handler_files(handler_folder_path)
      import_handler_classes
    end

    def import_handler_files(handler_folder_path)
      Gem.find_files("#{handler_folder_path}/*.rb").each { |path| require path }
    end

    def import_handler_classes
      handler_classes = ObjectSpace.each_object(HandlerBase.singleton_class).select do |klass|
        klass != HandlerBase
      end

      @handlers = handler_classes.map { |handler_class| handler_class.new }

      @handler_name_map = @handlers.map do |handler|
        handler_name = handler.class.to_s
        handler_name = handler_name[0].downcase + handler_name[1..-1]

        [handler_name, handler]
      end
      @handler_name_map = @handler_name_map.to_h
    end

    def call(handler_name, action_name, session, postman, redis, config, bll,
            params)
      unless @handler_name_map.include?(handler_name)
        return {
          code: StatusCodes::CODE_HANDLER_NOT_FOUNDED,
          msg: "Handler #{handler_name} not founded"
        }
      end

      unless @handler_name_map[handler_name].methods.include?(action_name.to_sym)
        return {
          code: StatusCodes::CODE_ACTION_NOT_FOUNDED,
          msg: "Handler #{handler_name} action #{action_name} not founded"
        }
      end

      handler = @handler_name_map[handler_name]

      handler.bll = bll
      handler.redis = redis
      handler.config = config
      handler.params = params
      handler.session = session
      handler.postman = postman

      if !handler.class.authenticated_action_name?(action_name)
        handler.send(action_name)
      else
        if session.authenticated?
          handler.send(action_name)
        else
          return {
            code: StatusCodes::CODE_NOT_AUTHENTICATED,
            msg: 'Not authenticated',
          }
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rubypitaya-1.4.1 ./lib/rubypitaya/core/handler_router.rb
rubypitaya-1.4.0 ./lib/rubypitaya/core/handler_router.rb
rubypitaya-1.3.1 ./lib/rubypitaya/core/handler_router.rb
rubypitaya-1.3.0 ./lib/rubypitaya/core/handler_router.rb
rubypitaya-1.2.9 ./lib/rubypitaya/core/handler_router.rb
rubypitaya-1.2.7 ./lib/rubypitaya/core/handler_router.rb
rubypitaya-1.1.0 ./lib/rubypitaya/core/handler_router.rb