Sha256: eae7934a8eb887f5b870a1a438da9ccd05edd59b2af80e54b3953ac1ec4c270b

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

module Rad
  module AbstractController
    inherit Filters
    inherit AbstractController::Render, AbstractController::Micelaneous
    
    inject(
      workspace: :workspace,
      logger: :logger,
      config: :config
    )
    
    def params
      workspace.params
    end    
    
    # def response
    #   workspace.response
    # end
    
    module ClassMethods
      inject(
        workspace: :workspace,
        logger: :logger,
        config: :config
      )
      
      def controller_name
        self.namespace ? "#{self.namespace.name}::#{self.alias}" : self.alias        
      end
      
      def controller_context_class
        unless @controller_context_class
          parent_context_class = nil
          ancestors[1..-1].each do |anc|            
            break if parent_context_class = anc.respond_to(:controller_context_class)
          end
          parent_context_class ||= Rad::ControllerContext

          class_name = "#{self.name}::#{self.name.split('::').last}ControllerContext"

          # raise "Tempate context #{class_name} already defined!" if Object.const_defined? class_name
          eval "class #{class_name} < #{parent_context_class}; end", TOPLEVEL_BINDING, __FILE__, __LINE__
          @controller_context_class = class_name.constantize
        end
        @controller_context_class
      end

      def helper *args
        args.to_a.each do |mod| 
          mod.must_be.a Module
          controller_context_class.inherit mod
        end 
      end
      
      def helper_method *args
        args = args.first if args.size == 1 and args.first.is_a?(Array)
        # args.each{|m| m.to_s.must_be.in self.instance_methods}
        args.each do |m|          
          controller_context_class.delegate m, to: :controller
        end      
      end
    end    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rad_core-0.0.13 lib/rad/controller/abstract_controller.rb