Noah C0 Coverage Information - RCov

lib/noah/app.rb

Name Total Lines Lines of Code Total Coverage Code Coverage
lib/noah/app.rb 317 275
81.07%
79.27%

Key

Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.

Coverage Details

1 require 'sinatra/base'
2 require 'sinatra/namespace'
3 require 'ohm'
4 require 'ohm/contrib'
5 
6 require File.join(File.dirname(__FILE__), 'helpers')
7 require File.join(File.dirname(__FILE__), 'models')
8 
9 module Noah
10   class App < Sinatra::Base
11     register ::Sinatra::Namespace
12 
13     helpers Noah::SinatraHelpers
14 
15     configure do
16       set :app_file, __FILE__
17       set :root, File.expand_path(File.join(File.dirname(__FILE__), "..",".."))
18       set :server, %w[thin mongrel webrick]
19       set :logging, true
20       set :raise_errors, false
21       set :show_exceptions, false
22     end
23 
24     configure(:development) do
25       begin
26         require 'sinatra/reloader'
27         register Sinatra::Reloader
28         also_reload File.join(File.dirname(__FILE__), 'models.rb')
29         also_reload File.join(File.dirname(__FILE__), 'helpers.rb')
30       rescue LoadError
31         puts "sinatra-reloader gem missing. reloading disabled"
32       end
33     end
34 
35     before do
36       content_type "application/json"
37     end
38 
39     get '/' do
40       content_type "text/html"
41 
42       haml :index, :format => :html5
43     end
44 
45     not_found do
46       content_type "application/json"
47       erb :'404'
48     end
49 
50     error do
51       content_type "application/json"
52       erb :'500'
53     end
54 
55     namespace "/h" do
56 
57       get '/:hostname/:servicename/?' do |hostname, servicename|
58         h = host_service(hostname, servicename)
59         if h.nil?
60           halt 404
61         else
62           h.to_json
63         end
64       end
65 
66       get '/:hostname/?' do |hostname|
67         h = host(:name => hostname)
68         if h.nil?
69           halt 404
70         else
71           h.to_json
72         end
73       end
74 
75       get '/?' do
76         hosts.map {|h| h.to_hash}
77         if hosts.size == 0
78           halt 404
79         else
80           hosts.to_json
81         end
82       end
83 
84       put '/:hostname/?' do |hostname|
85         required_params = ["name", "status"]
86         data = JSON.parse(request.body.read)
87         (data.keys.sort == required_params.sort && data['name'] == hostname) ? (host = ::Host.find_or_create(:name => data['name'], :status => data['status'])) : (raise "Missing Parameters")
88         if host.valid?
89           r = {"result" => "success","id" => "#{host.id}","status" => "#{host.status}", "name" => "#{host.name}", "new_record" => host.is_new?}
90           r.to_json
91         else
92           raise "#{host.errors}"
93         end
94       end
95 
96       delete '/:hostname/?' do |hostname|
97         host = ::Host.find(:name => hostname).first
98         if host
99           services = []
100           Service.find(:host_id => host.id).sort.each {|x| services << x; x.delete} if host.services.size > 0
101           host.delete
102           r = {"result" => "success", "id" => "#{host.id}", "name" => "#{hostname}", "service_count" => "#{services.size}"}
103           r.to_json
104         else
105           halt 404
106         end
107       end
108 
109     end
110 
111     namespace "/s" do
112 
113       get '/:servicename/:hostname/?' do |servicename, hostname|
114         hs = host_service(hostname, servicename)
115         if hs.nil?
116           halt 404
117         else  
118           hs.to_json
119         end  
120       end
121 
122       get '/:servicename/?' do |servicename|
123         s = services(:name => servicename)
124         s.map {|x| x.to_hash}
125         if s.empty?
126           halt 404
127         else  
128           s.to_json
129         end  
130       end
131 
132       get '/?' do
133         if services.empty?
134           halt 404
135         else
136           services.map {|s| s.to_hash}
137           services.to_json
138         end  
139       end
140 
141       put '/:servicename/?' do |servicename|
142         required_params = ["status", "host", "name"]
143         data = JSON.parse(request.body.read)
144         if data.keys.sort == required_params.sort
145           h = ::Host.find(:name => data['host']).first || (raise "Invalid Host")
146           service = ::Service.find_or_create(:name => servicename, :status => data['status'], :host => h)
147           if service.valid?
148             action = service.is_new? ? "create" : "update"
149             service.save
150             r = {"action" => action, "result" => "success", "id" => service.id, "host" => h.name, "name" => service.name}
151             r.to_json
152           else
153             raise "#{service.errors}"
154           end
155         else
156           raise "Missing Parameters"
157         end  
158       end
159 
160       delete '/:servicename/:hostname/?' do |servicename, hostname|
161         host = ::Host.find(:name => hostname).first || (halt 404)
162         service = ::Service.find(:name => servicename, :host_id => host.id).first || (halt 404)
163         if host && service
164           service.delete
165           r = {"action" => "delete", "result" => "success", "id" => service.id, "host" => host.name, "service" => servicename}
166           r.to_json
167         else
168           halt 404
169         end  
170       end  
171 
172     end
173 
174     namespace "/a" do
175 
176       get '/:appname/:config/?' do |appname, config|
177         app = ::Application.find(:name => appname).first
178         if app.nil?
179           halt 404
180         else  
181           c = ::Configuration.find(:name => config, :application_id => app.id).first
182           c.to_json
183         end  
184       end
185 
186       get '/:appname/?' do |appname|
187         app = ::Application.find(:name => appname).first
188         if app.nil?
189           halt 404
190         else
191           app.to_json
192         end
193       end
194 
195       put '/:appname/?' do |appname|
196         required_params = ["name"]
197         data = JSON.parse(request.body.read)
198         if data.keys.sort == required_params.sort && data['name'] == appname
199           app = ::Application.find_or_create(:name => appname)
200         else
201           raise "Missing Parameters"
202         end  
203         if app.valid?
204           action = app.is_new? ? "create" : "update"
205           app.save
206           r = {"result" => "success","id" => app.id, "action" => action, "name" => app.name }
207           r.to_json
208         else
209           raise "#{app.errors}"
210         end
211       end
212 
213       delete '/:appname/?' do |appname|
214         app = ::Application.find(:name => appname).first
215         if app.nil?
216           halt 404
217         else
218           configurations = []
219           ::Configuration.find(:application_id => app.id).sort.each {|x| configurations << x; x.delete} if app.configurations.size > 0
220           app.delete
221           r = {"result" => "success", "action" => "delete", "id" => "#{app.id}", "name" => "#{appname}", "configurations" => "#{configurations.size}"}
222           r.to_json
223         end
224       end
225 
226       get '/?' do
227         apps = []
228         ::Application.all.sort.each {|a| apps << a.to_hash}
229         if apps.empty?
230           halt 404
231         else  
232           apps.to_json
233         end  
234       end
235 
236     end
237 
238     namespace '/c' do
239 
240       # Need to move this out to configuration.
241       # Maybe bootstrap them from itself?
242       content_type_mapping = {
243                 :yaml => "text/x-yaml",
244                 :json => "application/json",
245                 :xml => "text/xml",
246                 :string => "text/plain"
247       }
248 
249       get '/:appname/:element/?' do |appname, element|
250         a = ::Application.find(:name => appname).first
251         if a.nil?
252           halt 404
253         else  
254           c = ::Configuration.find(:name => element, :application_id => a.id).first
255           content_type content_type_mapping[c.format.to_sym] if content_type_mapping[c.format.to_sym]
256           c.body
257         end  
258       end
259 
260       get '/:appname/?' do |appname|
261         config = []
262         a = ::Application.find(:name => appname).first
263         if a.nil?
264           halt 404
265         else  
266           ::Configuration.find(:application_id => a.id).sort.each {|c| config << c.to_hash}
267           config.to_json
268         end  
269       end
270 
271       get '/?' do
272         configs = []
273         ::Configuration.all.sort.each {|c| configs << c.to_hash}
274         if configs.empty?
275           halt 404
276         else  
277           configs.to_json
278         end  
279       end
280 
281       put '/:appname/:element?' do |appname, element|
282         app = ::Application.find_or_create(:name => appname)
283         config = ::Configuration.find_or_create(:name => element, :application_id => app.id)
284         required_params = ["format", "body"]
285         data = JSON.parse(request.body.read)
286         data.keys.sort == required_params.sort  ? (config.format = data["format"]; config.body = data["body"]) : (raise "Missing Parameters")
287         if config.valid?
288           config.save
289           action = config.is_new? ? "create" : "update"
290           dependency_action = app.is_new? ? "created" : "updated"
291           r = {"result" => "success","id" => "#{config.id}", "action" => action, "dependencies" => dependency_action, "application" => app.name, "item" => config.name}
292           r.to_json
293         else
294           raise "#{config.errors}"
295         end
296       end
297 
298       delete '/:appname/:element?' do |appname, element|
299         app = ::Application.find(:name => appname).first
300         if app
301           config = ::Configuration.find(:name=> element, :application_id => app.id).first
302           if config
303             config.delete
304             r = {"result" => "success", "id" => "#{config.id}", "action" => "delete", "application" => "#{app.name}", "item" => "#{element}"}
305             r.to_json
306           else
307             halt 404
308           end
309         else
310           halt 404
311         end
312       end
313 
314     end
315   #  run! if app_file == $0
316   end
317 end

Generated on 2011-02-08 01:54:21 -0500 with rcov 0.9.8