Commit 5fb5c16f0db065e1adced925e2d379c2e41928bc
1 parent
f26b61cd
Exists in
master
and in
1 other branch
use YAJL directly to render responses to problems API rather than using RABL
Showing
7 changed files
with
52 additions
and
40 deletions
Show diff stats
Gemfile
Gemfile.lock
| ... | ... | @@ -193,9 +193,6 @@ GEM |
| 193 | 193 | coderay (~> 1.0.5) |
| 194 | 194 | method_source (~> 0.7.1) |
| 195 | 195 | slop (>= 2.4.4, < 3) |
| 196 | - rabl (0.6.13) | |
| 197 | - activesupport (>= 2.3.14) | |
| 198 | - multi_json (~> 1.0) | |
| 199 | 196 | rack (1.4.1) |
| 200 | 197 | rack-cache (1.2) |
| 201 | 198 | rack (>= 0.4) |
| ... | ... | @@ -325,7 +322,6 @@ DEPENDENCIES |
| 325 | 322 | oruen_redmine_client |
| 326 | 323 | pivotal-tracker |
| 327 | 324 | pry |
| 328 | - rabl | |
| 329 | 325 | rack-ssl-enforcer |
| 330 | 326 | rails (= 3.2.6) |
| 331 | 327 | rails_autolink (~> 1.0.9) | ... | ... |
app/controllers/api/v1/problems_controller.rb
| 1 | 1 | class Api::V1::ProblemsController < ApplicationController |
| 2 | + respond_to :json, :xml | |
| 2 | 3 | |
| 3 | 4 | def index |
| 4 | 5 | if params.key?(:start_date) && params.key?(:end_date) |
| ... | ... | @@ -8,6 +9,12 @@ class Api::V1::ProblemsController < ApplicationController |
| 8 | 9 | else |
| 9 | 10 | @problems = Problem.all |
| 10 | 11 | end |
| 12 | + | |
| 13 | + respond_to do |format| | |
| 14 | + format.html { render json: ProblemPresenter.new(@problems) } # render JSON if no extension specified on path | |
| 15 | + format.json { render json: ProblemPresenter.new(@problems) } | |
| 16 | + format.xml { render xml: ProblemPresenter.new(@problems) } | |
| 17 | + end | |
| 11 | 18 | end |
| 12 | 19 | |
| 13 | 20 | end | ... | ... |
| ... | ... | @@ -0,0 +1,42 @@ |
| 1 | +class ProblemPresenter | |
| 2 | + | |
| 3 | + def initialize(model_or_collection) | |
| 4 | + @model_or_collection = model_or_collection | |
| 5 | + end | |
| 6 | + | |
| 7 | + def to_xml(options={}) | |
| 8 | + as_json(options).to_xml(options) | |
| 9 | + end | |
| 10 | + | |
| 11 | + def to_json(options={}) | |
| 12 | + Yajl.dump(as_json(options)) | |
| 13 | + end | |
| 14 | + | |
| 15 | + def as_json(options={}) | |
| 16 | + if collection? | |
| 17 | + @model_or_collection.map { |model| model_as_json(model, options) } | |
| 18 | + else | |
| 19 | + model_as_json(@model_or_collection, options) | |
| 20 | + end | |
| 21 | + end | |
| 22 | + | |
| 23 | + def collection? | |
| 24 | + @model_or_collection.respond_to?(:each) | |
| 25 | + end | |
| 26 | + | |
| 27 | + def model_as_json(problem, options={}) | |
| 28 | + { | |
| 29 | + app_id: problem.app_id, | |
| 30 | + app_name: problem.app_name, | |
| 31 | + environment: problem.environment, | |
| 32 | + message: problem.message, | |
| 33 | + where: problem.where, | |
| 34 | + first_notice_at: problem.first_notice_at, | |
| 35 | + last_notice_at: problem.last_notice_at, | |
| 36 | + resolved: problem.resolved, | |
| 37 | + resolved_at: problem.resolved_at, | |
| 38 | + notices_count: problem.notices_count | |
| 39 | + } | |
| 40 | + end | |
| 41 | + | |
| 42 | +end | ... | ... |
app/views/api/v1/problems/index.rabl
config/initializers/rabl.rb
| ... | ... | @@ -1,20 +0,0 @@ |
| 1 | -Rabl.configure do |config| | |
| 2 | - # Commented as these are defaults | |
| 3 | - # config.cache_all_output = false | |
| 4 | - # config.cache_sources = Rails.env != 'development' # Defaults to false | |
| 5 | - # config.cache_engine = Rabl::CacheEngine.new # Defaults to Rails cache | |
| 6 | - # config.escape_all_output = false | |
| 7 | - # config.json_engine = nil # Any multi\_json engines | |
| 8 | - # config.msgpack_engine = nil # Defaults to ::MessagePack | |
| 9 | - # config.bson_engine = nil # Defaults to ::BSON | |
| 10 | - # config.plist_engine = nil # Defaults to ::Plist::Emit | |
| 11 | - # config.include_json_root = true | |
| 12 | - # config.include_msgpack_root = true | |
| 13 | - # config.include_bson_root = true | |
| 14 | - # config.include_plist_root = true | |
| 15 | - # config.include_xml_root = false | |
| 16 | - # config.include_child_root = true | |
| 17 | - # config.enable_json_callbacks = false | |
| 18 | - # config.xml_options = { :dasherize => true, :skip_types => false } | |
| 19 | - # config.view_paths = [] | |
| 20 | -end |
config/routes.rb
| ... | ... | @@ -37,13 +37,13 @@ Errbit::Application.routes.draw do |
| 37 | 37 | delete :unlink_issue |
| 38 | 38 | end |
| 39 | 39 | end |
| 40 | - | |
| 40 | + | |
| 41 | 41 | resources :deploys, :only => [:index] |
| 42 | 42 | end |
| 43 | 43 | |
| 44 | 44 | namespace :api do |
| 45 | 45 | namespace :v1 do |
| 46 | - resources :problems, :only => [:index] | |
| 46 | + resources :problems, :only => [:index], :defaults => { :format => 'json' } | |
| 47 | 47 | end |
| 48 | 48 | end |
| 49 | 49 | ... | ... |