Class: Helmet::API

Inherits:
Goliath::API
  • Object
show all
Defined in:
lib/helmet/api.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.settingsObject

Returns the value of attribute settings.



12
13
14
# File 'lib/helmet/api.rb', line 12

def settings
  @settings
end

Class Method Details

.before(route, opts = {}, &block) ⇒ Object



14
15
16
# File 'lib/helmet/api.rb', line 14

def before(route, opts = {}, &block)
  @before_filters.add(route, opts, &block)
end

.before_filtersObject



22
23
24
# File 'lib/helmet/api.rb', line 22

def before_filters
  @before_filters
end

.connect(route, opts = {}, &block) ⇒ Object



41
# File 'lib/helmet/api.rb', line 41

def connect(route, opts = {}, &block) register_route(:CONNECT, route, opts, &block); end

.delete(route, opts = {}, &block) ⇒ Object



42
# File 'lib/helmet/api.rb', line 42

def delete(route, opts = {}, &block) register_route(:DELETE, route, opts, &block); end

.get(route, opts = {}, &block) ⇒ Object



35
36
37
38
39
# File 'lib/helmet/api.rb', line 35

def get(route, opts = {}, &block) 
  register_route(:GET, route, opts, &block);
  # HttpRouter already include head
  # register_route('HEAD', route, opts, &block);
end

.get_helpersObject



31
32
33
# File 'lib/helmet/api.rb', line 31

def get_helpers
  @helpers
end

.helpers(&block) ⇒ Object

include methods to the helper



27
28
29
# File 'lib/helmet/api.rb', line 27

def helpers(&block)
  @helpers.module_exec(&block)
end

.inherited(klass) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/helmet/api.rb', line 65

def inherited(klass)
  klass.init
  
  # setup basic middlewares
  setup_middlewares klass

  # compute public/ views folder
  base = File.expand_path(File.dirname(caller.first[/^[^:]*/]))
  
  klass.settings[:public_folder]  = File.join(base, 'public')
  klass.settings[:views_folder]   = File.join(base, 'views')

  super # update Goliath::Application.app_class
end

.initObject



80
81
82
83
84
85
86
87
88
89
90
# File 'lib/helmet/api.rb', line 80

def init
  # Handle application routes
  @routes          = HttpRouter.new

  # Handle before filters
  @before_filters  = HttpRouter.new

  @settings        = {}
  
  @helpers         = Module.new
end

.post(route, opts = {}, &block) ⇒ Object

def head(route, opts = {}, &block) register_route(:HEAD, route, opts, &block); end def options(route, opts = {}, &block) register_route(:OPTIONS, route, opts, &block); end



45
# File 'lib/helmet/api.rb', line 45

def post(route, opts = {}, &block) register_route(:POST, route, opts, &block); end

.put(route, opts = {}, &block) ⇒ Object



46
# File 'lib/helmet/api.rb', line 46

def put(route, opts = {}, &block) register_route(:PUT, route, opts, &block); end

.register_route(method, route, opts = {}, &block) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/helmet/api.rb', line 48

def register_route(method, route, opts = {}, &block)       
  case method
  when :GET
    @routes.get(route, opts, &block)
  when :CONNECT
    @routes.connect(route, opts, &block)
  when :DELETE
    @routes.delete(route, opts, &block)
  when :OPTIONS
    @routes.options(route, opts, &block)
  when :POST
    @routes.post(route, opts, &block)
  when :PUT
    @routes.put(route, opts, &block)
  end
end

.routesObject



18
19
20
# File 'lib/helmet/api.rb', line 18

def routes
  @routes
end

Instance Method Details

#response(env) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/helmet/api.rb', line 100

def response(env)
  # request handler
  handler = Handler.new(env, self.class)
  
  # include Helpers
  handler.extend(self.class.get_helpers)

  catch(:halt) do
    # evaluate any route match
    filters = self.class.before_filters.recognize(env).first 

    filters.each do |f|
      # include route params into env
      route_params = f.params
      env.params.merge! route_params
      
      handler.handle! &f.route.dest
      
      # remove after usage
      env.params.delete_if {|k,v| route_params[k] == v}
    end if filters

    routes_recognized = self.class.routes.recognize(env).first 
    if routes_recognized
      # Use the first matched route
      http_router_response = routes_recognized.first
      # Bind params to the env
      env.params.merge! http_router_response.params
      handler.handle! &http_router_response.route.dest
    else
      handler.handle! do
        status 404
        'not found!'
      end
    end
  end
  
  handler.response.format_response
end