Class: Traim::Router
- Inherits:
-
Object
- Object
- Traim::Router
- Defined in:
- lib/traim.rb
Class Method Summary collapse
Instance Method Summary collapse
- #action(name) ⇒ Object
- #create(&block) ⇒ Object
- #created ⇒ Object
- #default_actions ⇒ Object
- #destory(&block) ⇒ Object
- #headers(key, value) ⇒ Object
-
#initialize(resources) ⇒ Router
constructor
A new instance of Router.
- #logger ⇒ Object
- #model ⇒ Object
- #no_cotent ⇒ Object
-
#ok ⇒ Object
status code sytax suger.
- #record ⇒ Object
- #render(request) ⇒ Object
- #resources(name) ⇒ Object
- #run(seg, inbox) ⇒ Object
- #show(&block) ⇒ Object
- #status ⇒ Object
- #to_json ⇒ Object
- #update(&block) ⇒ Object
Constructor Details
#initialize(resources) ⇒ Router
Returns a new instance of Router.
147 148 149 150 151 |
# File 'lib/traim.rb', line 147 def initialize(resources) @status = nil @resources = resources @headers = {} end |
Class Method Details
.resources ⇒ Object
153 |
# File 'lib/traim.rb', line 153 def self.resources; @resources ||= {} end |
Instance Method Details
#action(name) ⇒ Object
212 213 214 215 216 217 |
# File 'lib/traim.rb', line 212 def action(name) raise NotImplementedError unless action = @resource.actions[name] action[:block] = default_actions[name] if action[:block].nil? action end |
#create(&block) ⇒ Object
160 |
# File 'lib/traim.rb', line 160 def create(&block); @resource.action(:create, &block) end |
#created ⇒ Object
140 |
# File 'lib/traim.rb', line 140 def created; @status = 201 end |
#default_actions ⇒ Object
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/traim.rb', line 219 def default_actions @default_actions ||= begin actions = {} delegator = @resource.model_delegator actions["POST"] = lambda do |params| delegator.create(params["payload"]) end actions["GET"] = lambda do |params| delegator.show(params["id"]) end actions["PUT"] = lambda do |params| result = delegator.update(params["id"], params["payload"]) result end actions["DELETE"] = lambda do |params| delegator.delete(@id) end actions end end |
#destory(&block) ⇒ Object
162 |
# File 'lib/traim.rb', line 162 def destory(&block); @resource.action(:destory, &block) end |
#headers(key, value) ⇒ Object
143 144 145 |
# File 'lib/traim.rb', line 143 def headers(key, value) @headers[key] = value end |
#model ⇒ Object
240 |
# File 'lib/traim.rb', line 240 def model; @resource.model end |
#no_cotent ⇒ Object
141 |
# File 'lib/traim.rb', line 141 def no_cotent; @status = 204 end |
#ok ⇒ Object
status code sytax suger
139 |
# File 'lib/traim.rb', line 139 def ok; @status = 200 end |
#record ⇒ Object
241 |
# File 'lib/traim.rb', line 241 def record; @record; end |
#render(request) ⇒ Object
243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/traim.rb', line 243 def render(request) method_block = action(request.request_method) payload = request.params if (method_block[:options][:permit]) if not_permmited_payload = payload.detect { |key, value| !method_block[:options][:permit].include?(key) } raise BadRequestError.new(message: "Not permitted payload: #{not_permmited_payload}") end end params = {"payload" => payload} params["id"] = @id unless @id.nil? @result = @resource.execute(params, &method_block[:block]) [status, @headers, [to_json]] end |
#resources(name) ⇒ Object
155 156 157 |
# File 'lib/traim.rb', line 155 def resources(name) @resources[name] end |
#run(seg, inbox) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/traim.rb', line 164 def run(seg, inbox) begin segment = inbox[:segment].to_sym if @resource.nil? raise BadRequestError unless @resource = resources(segment) next end if @id.nil? && !defined?(@collection_name) if collection = @resource.collections[segment] @collection_name = segment return instance_eval(&collection) else @id = segment.to_s.to_i @record = @resource.model_delegator.show(@id) next end end if !defined?(@member_name) if member = @resource.members[segment] @member_name = segment return instance_eval(&member) end end raise BadRequestError end while seg.capture(:segment, inbox) end |
#show(&block) ⇒ Object
159 |
# File 'lib/traim.rb', line 159 def show(&block); @resource.action(:show, &block) end |
#status ⇒ Object
135 |
# File 'lib/traim.rb', line 135 def status; @status || ok end |
#to_json ⇒ Object
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/traim.rb', line 195 def to_json if @result.kind_of?(ActiveRecord::Relation) hash = @result.map do |object| @resource.to_hash(object, @resources) end JSON.dump(hash) else new_hash = {} if @result.errors.size == 0 new_hash = @resource.to_hash(@result, @resources) else new_hash = @result.errors. end JSON.dump(new_hash) end end |
#update(&block) ⇒ Object
161 |
# File 'lib/traim.rb', line 161 def update(&block); @resource.action(:update, &block) end |