Sha256: 8a897de33c350fa27ba46ac4a414f0e81dfa3c079142d965291a931459ece8c4

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

module Crystal
  VERSION = '0.0.1'
  
  class << self
    inject \
      :config => Crystal::Config, 
      :router => Crystal::Router
    
    def load_environment
      $LOAD_PATH << config.root unless $LOAD_PATH.include? config.root
    end
    
    def build_common_app builder
      Crystal::Adapter.build_common_app builder      
    end
    
    def run      
      app = Crystal::Adapter.parse_config
      load_environment      
      Crystal::Adapter.run app
    end
    
    def call request, response, params
      klass, method = router.select_class request
      method ||= config.default_method
      
      raise "The remote class #{klass} must be a Crystal::Remote!" unless klass.is? Crystal::Remote
      raise "No method '#{method}' for remote class #{klass}!" unless klass.instance_methods.include? method
      raise "You try to call protected method '#{method}' for remote class '#{klass}'!" unless klass.public_instance_methods.include? method
      
      Micon.activate :request, {} do
        Micon[:request], Micon[:response], Micon[:params] = request, response, params
        controller = klass.new
        Micon[:controller] = controller
        controller.send method
      end        
    end
      
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
crystal-0.0.10 lib/crystal/core/crystal.rb