From 5fb5c16f0db065e1adced925e2d379c2e41928bc Mon Sep 17 00:00:00 2001 From: Robert Lail Date: Mon, 27 Aug 2012 12:57:18 -0500 Subject: [PATCH] use YAJL directly to render responses to problems API rather than using RABL --- Gemfile | 3 +-- Gemfile.lock | 4 ---- app/controllers/api/v1/problems_controller.rb | 7 +++++++ app/presenters/problem_presenter.rb | 42 ++++++++++++++++++++++++++++++++++++++++++ app/views/api/v1/problems/index.rabl | 12 ------------ config/initializers/rabl.rb | 20 -------------------- config/routes.rb | 4 ++-- 7 files changed, 52 insertions(+), 40 deletions(-) create mode 100644 app/presenters/problem_presenter.rb delete mode 100644 app/views/api/v1/problems/index.rabl delete mode 100644 config/initializers/rabl.rb diff --git a/Gemfile b/Gemfile index 88d8a4a..30fe171 100644 --- a/Gemfile +++ b/Gemfile @@ -38,8 +38,7 @@ platform :ruby do end gem 'ri_cal' -gem 'rabl' -gem 'yajl-ruby' +gem 'yajl-ruby', :require => "yajl" group :development, :test do gem 'rspec-rails', '~> 2.6' diff --git a/Gemfile.lock b/Gemfile.lock index ab2383b..723bf73 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -193,9 +193,6 @@ GEM coderay (~> 1.0.5) method_source (~> 0.7.1) slop (>= 2.4.4, < 3) - rabl (0.6.13) - activesupport (>= 2.3.14) - multi_json (~> 1.0) rack (1.4.1) rack-cache (1.2) rack (>= 0.4) @@ -325,7 +322,6 @@ DEPENDENCIES oruen_redmine_client pivotal-tracker pry - rabl rack-ssl-enforcer rails (= 3.2.6) rails_autolink (~> 1.0.9) diff --git a/app/controllers/api/v1/problems_controller.rb b/app/controllers/api/v1/problems_controller.rb index 8012bec..28a0e19 100644 --- a/app/controllers/api/v1/problems_controller.rb +++ b/app/controllers/api/v1/problems_controller.rb @@ -1,4 +1,5 @@ class Api::V1::ProblemsController < ApplicationController + respond_to :json, :xml def index if params.key?(:start_date) && params.key?(:end_date) @@ -8,6 +9,12 @@ class Api::V1::ProblemsController < ApplicationController else @problems = Problem.all end + + respond_to do |format| + format.html { render json: ProblemPresenter.new(@problems) } # render JSON if no extension specified on path + format.json { render json: ProblemPresenter.new(@problems) } + format.xml { render xml: ProblemPresenter.new(@problems) } + end end end diff --git a/app/presenters/problem_presenter.rb b/app/presenters/problem_presenter.rb new file mode 100644 index 0000000..412e0f6 --- /dev/null +++ b/app/presenters/problem_presenter.rb @@ -0,0 +1,42 @@ +class ProblemPresenter + + def initialize(model_or_collection) + @model_or_collection = model_or_collection + end + + def to_xml(options={}) + as_json(options).to_xml(options) + end + + def to_json(options={}) + Yajl.dump(as_json(options)) + end + + def as_json(options={}) + if collection? + @model_or_collection.map { |model| model_as_json(model, options) } + else + model_as_json(@model_or_collection, options) + end + end + + def collection? + @model_or_collection.respond_to?(:each) + end + + def model_as_json(problem, options={}) + { + app_id: problem.app_id, + app_name: problem.app_name, + environment: problem.environment, + message: problem.message, + where: problem.where, + first_notice_at: problem.first_notice_at, + last_notice_at: problem.last_notice_at, + resolved: problem.resolved, + resolved_at: problem.resolved_at, + notices_count: problem.notices_count + } + end + +end diff --git a/app/views/api/v1/problems/index.rabl b/app/views/api/v1/problems/index.rabl deleted file mode 100644 index c22aa1a..0000000 --- a/app/views/api/v1/problems/index.rabl +++ /dev/null @@ -1,12 +0,0 @@ -collection @problems - -attributes :app_id, - :app_name, - :environment, - :message, - :where, - :first_notice_at, - :last_notice_at, - :resolved, - :resolved_at, - :notice_count diff --git a/config/initializers/rabl.rb b/config/initializers/rabl.rb deleted file mode 100644 index 0b89116..0000000 --- a/config/initializers/rabl.rb +++ /dev/null @@ -1,20 +0,0 @@ -Rabl.configure do |config| - # Commented as these are defaults - # config.cache_all_output = false - # config.cache_sources = Rails.env != 'development' # Defaults to false - # config.cache_engine = Rabl::CacheEngine.new # Defaults to Rails cache - # config.escape_all_output = false - # config.json_engine = nil # Any multi\_json engines - # config.msgpack_engine = nil # Defaults to ::MessagePack - # config.bson_engine = nil # Defaults to ::BSON - # config.plist_engine = nil # Defaults to ::Plist::Emit - # config.include_json_root = true - # config.include_msgpack_root = true - # config.include_bson_root = true - # config.include_plist_root = true - # config.include_xml_root = false - # config.include_child_root = true - # config.enable_json_callbacks = false - # config.xml_options = { :dasherize => true, :skip_types => false } - # config.view_paths = [] -end diff --git a/config/routes.rb b/config/routes.rb index 5c5f5be..1d48329 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -37,13 +37,13 @@ Errbit::Application.routes.draw do delete :unlink_issue end end - + resources :deploys, :only => [:index] end namespace :api do namespace :v1 do - resources :problems, :only => [:index] + resources :problems, :only => [:index], :defaults => { :format => 'json' } end end -- libgit2 0.21.2