class Noah::App content_type_mapping = { :yaml => "text/x-yaml", :json => "application/json", :xml => "text/xml", :string => "text/plain" } get '/configurations/:configname/?', :provides => :json do |configname| c = Noah::Configuration.find(:name => configname).first (halt 404) if c.nil? c.to_json end get '/configurations/:configname/?' do |configname| c = Noah::Configuration.find(:name => configname).first (halt 404) if c.nil? content_type content_type_mapping[c.format.to_sym] if content_type_mapping[c.format.to_sym] #response.headers['Content-Disposition'] = "attachment; filename=#{configname}" c.body end # GET all configurations get '/configurations/?' do configs = Noah::Configurations.all.to_hash (halt 404) if configs.size == 0 configs.to_json end # Add configuration object to a custom link hierarchy put '/configurations/:configname/link' do |configname| required_params = ["link_name"] data = JSON.parse(request.body.read) (data.keys.sort == required_params.sort) ? (a = Noah::Configuration.find(:name => configname).first) : (raise "Missing Parameters") a.nil? ? (halt 404) : (a.link! data["link_name"]) a.to_json end # Add a tag to a configuration object put '/configurations/:configname/tag' do |configname| required_params = ["tags"] data = JSON.parse(request.body.read) (data.keys.sort == required_params.sort) ? (c=Noah::Configuration.find(:name=>configname).first) : (raise "Missing Parameters") c.nil? ? (halt 404) : (c.tag!(data['tags'])) c.to_json end # Delete a tag[s] from a configuration object delete '/configurations/:configname/tag' do |configname| required_params = ["tags"] data = JSON.parse(request.body.read) (data.keys.sort == required_params.sort) ? (c=Noah::Configuration.find(:name=>configname).first) : (raise "Missing Parameters") c.nil? ? (halt 404) : (c.untag!(data['tags'])) c.to_json end # Add a watch to a configuration object put '/configurations/:configname/watch' do |configname| required_params = ["endpoint"] data = JSON.parse(request.body.read) (data.keys.sort == required_params.sort) ? (c = Noah::Configuration.find(:name => configname).first) : (raise "Missing Parameters") c.nil? ? (halt 404) : (w = c.watch!(:endpoint => data['endpoint'])) w.to_json end # Attach a configuration object to an application object put '/configurations/:configname/?' do |configname| required_params = ["format", "body"] data = JSON.parse(request.body.read) data.keys.sort == required_params.sort ? config=Noah::Configuration.find_or_create(:name => configname) : (raise "Missing Parameters") config.body = data["body"] config.format = data["format"] if config.valid? config.save action = config.is_new? ? "create" : "update" r = {"result" => "success","id" => "#{config.id}", "action" => action, "item" => config.name} r.to_json else raise "#{format_errors(config)}" end end delete '/configurations/:configname/?' do |configname| cfg = Noah::Configuration.find(:name => configname).first (halt 404) if cfg.nil? cfg.delete r = {"result" => "success", "id" => cfg.id, "action" => "delete", "affected_applications" => cfg.affected_applications, "item" => cfg.name} r.to_json end end