Class: Traim::Application
- Inherits:
-
Object
- Object
- Traim::Application
- Defined in:
- lib/traim.rb
Instance Method Summary collapse
- #application(name = :default) ⇒ Object
- #compile(&block) ⇒ Object
- #default_actions ⇒ Object
- #helpers(&block) ⇒ Object
-
#initialize(name = :default) ⇒ Application
constructor
A new instance of Application.
- #logger ⇒ Object
- #namespace(name, &block) ⇒ Object
- #render(request, controller) ⇒ Object
- #resources(name, &block) ⇒ Object
- #route(request, seg = nil) ⇒ Object
- #run(seg, inbox, request) ⇒ Object
- #to_json(resources, controller) ⇒ Object
Constructor Details
#initialize(name = :default) ⇒ Application
Returns a new instance of Application.
61 62 63 64 65 |
# File 'lib/traim.rb', line 61 def initialize(name = :default) @name = name @resources = {} @applications = {} end |
Instance Method Details
#application(name = :default) ⇒ Object
76 77 78 79 |
# File 'lib/traim.rb', line 76 def application(name = :default) logger.debug("Lunch application #{name}") app = @applications[name] ||= Application.new(name) end |
#compile(&block) ⇒ Object
183 184 185 186 |
# File 'lib/traim.rb', line 183 def compile(&block) logger.debug("Compile application: #{@name}") instance_eval(&block) end |
#default_actions ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/traim.rb', line 131 def default_actions @default_actions ||= begin actions = {} actions["POST"] = lambda do create_record(params) end actions["GET"] = lambda do find_record(id) end actions["PUT"] = lambda do result = update_record(id, params) result end actions["DELETE"] = lambda do delete_record(id) end actions end end |
#helpers(&block) ⇒ Object
81 82 83 |
# File 'lib/traim.rb', line 81 def helpers(&block) @helper = Helper.new(block) end |
#namespace(name, &block) ⇒ Object
71 72 73 74 |
# File 'lib/traim.rb', line 71 def namespace(name, &block) logger.debug("application namespace #{name}") application(name).compile(&block) end |
#render(request, controller) ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/traim.rb', line 168 def render(request, controller) raise NotImplementedError unless method_block = controller.actions(request.request_method) method_block[:block] = default_actions[request.request_method] if method_block[:block].nil? if (method_block[:options][:permit]) if not_permmited_payload = request.params.detect { |key, value| !method_block[:options][:permit].include?(key) } raise BadRequestError.new(message: "Not permitted payload: #{not_permmited_payload}") end end controller.params = request.params controller.execute(method_block[:block]) [controller.status, controller.headers, [to_json(@resources, controller)]] end |
#resources(name, &block) ⇒ Object
67 68 69 |
# File 'lib/traim.rb', line 67 def resources(name, &block) @resources[name] = Resource.new(block, @helper) end |
#route(request, seg = nil) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/traim.rb', line 85 def route(request, seg = nil) inbox = {} seg ||= Seg.new(request.path_info) seg.capture(:segment, inbox) segment = inbox[:segment].to_sym if app = @applications[segment] app.route(request, seg) else controller = run(seg, inbox, request) render(request, controller) end end |
#run(seg, inbox, request) ⇒ Object
99 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 |
# File 'lib/traim.rb', line 99 def run(seg, inbox, request) controller = nil begin segment = inbox[:segment].to_sym if controller.nil? raise BadRequestError unless @resource = @resources[segment] controller = @resource.build_controller(request) next end if controller.id.nil? if collection = @resource.collections[segment] controller.instance_eval(&collection) break else controller.id = segment.to_s.to_i next end end if member = @resource.members[segment] controller.instance_eval(&member) break end raise BadRequestError end while seg.capture(:segment, inbox) controller end |
#to_json(resources, controller) ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/traim.rb', line 151 def to_json(resources, controller) if controller.is_collection? hash = controller.map_record do |object, controller| @resource.to_hash(controller, resources) end JSON.dump(hash) else new_hash = {} if controller.errors.size == 0 new_hash = @resource.to_hash(controller, resources) else new_hash = controller.errors. end JSON.dump(new_hash) end end |