Skip to content

Commit

Permalink
Accept either XML or JSON as input format and return appropriate outp…
Browse files Browse the repository at this point in the history
…ut format
  • Loading branch information
jpallen committed Jul 2, 2011
1 parent 9eebd40 commit eb7e78b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 16 deletions.
58 changes: 44 additions & 14 deletions app/controllers/clsi_controller.rb
@@ -1,27 +1,57 @@
class ClsiController < ApplicationController
protect_from_forgery :except => [:get_token, :compile]
protect_from_forgery :except => [:compile]

def compile
request.format = :xml
xml_request = request.raw_post

begin
request_attributes = XMLParser.parse_request(xml_request)
rescue CLSI::ParseError => e
@error_type = e.class.name.demodulize
@error_message = e.message
render 'compile_parse_error' and return
respond_to do |format|
format.json {
json_request = request.raw_post

begin
@request_attributes = JSONParser.parse_request(json_request)
rescue CLSI::ParseError => e
@error_type = e.class.name.demodulize
@error_message = e.message
render :json => {
"compile" => {
"error" => {
"type" => e.class.name.demodulize,
"message" => e.message
}
}
}
return
end
}
format.all {
xml_request = request.raw_post

begin
@request_attributes = XMLParser.parse_request(xml_request)
rescue CLSI::ParseError => e
@error_type = e.class.name.demodulize
@error_message = e.message
render 'compile_parse_error.xml' and return
end
}
end
@compile = Compile.new(request_attributes)

@compile = Compile.new(@request_attributes)
@compile.unique_id
if request_attributes[:asynchronous]
if @request_attributes[:asynchronous]
spawn do
@compile.compile
end
else
@compile.compile
end
render :xml => @compile

respond_to do |format|
format.json {
render :json => @compile.to_json
}
format.all {
render :xml => @compile
}
end
end
end
2 changes: 2 additions & 0 deletions app/models/json_parser.rb
Expand Up @@ -59,6 +59,8 @@ def self.parse_request(json_request)

request[:resources] = []
for resource in resources
raise CLSI::ParseError, "resource attributes should be hashes" unless resource.is_a?(Hash)

if resource.has_key?("path")
path = resource["path"]
else
Expand Down
3 changes: 1 addition & 2 deletions config/routes.rb
Expand Up @@ -40,8 +40,7 @@
# consider removing the them or commenting them out if you're using named routes and resources.
map.compile 'clsi/compile',
:controller => 'clsi',
:action => 'compile',
:format => 'xml'
:action => 'compile'

map.compile 'oops',
:controller => 'application',
Expand Down

0 comments on commit eb7e78b

Please sign in to comment.