add pipeline resource. refs #1357
[arvados.git] / app / controllers / application_controller.rb
1 class ApplicationController < ActionController::Base
2   protect_from_forgery
3   before_filter :uncamelcase_params_hash_keys
4   before_filter :find_object_by_uuid, :except => :index
5
6   def index
7     @objects ||= model_class.all
8     render_list
9   end
10
11   def show
12     render json: @object
13   end
14
15   def create
16     @attrs = params[resource_name]
17     if @attrs.class == String
18       @attrs = uncamelcase_hash_keys(JSON.parse @attrs)
19     end
20     @object = model_class.new @attrs
21     @object.save
22     show
23   end
24
25   protected
26
27   def model_class
28     controller_name.classify.constantize
29   end
30
31   def resource_name             # params[] key used by client
32     controller_name.classify.camelcase(:lower)
33   end
34
35   def find_object_by_uuid
36     logger.info params.inspect
37     @object = model_class.where('uuid=?', params[:uuid]).first
38   end
39
40   def uncamelcase_params_hash_keys
41     uncamelcase_hash_keys(params)
42   end
43
44   def uncamelcase_hash_keys(h)
45     if h.is_a? Hash
46       nh = Hash.new
47       h.each do |k,v|
48         if k.class == String
49           nk = k.underscore
50         elsif k.class == Symbol
51           nk = k.to_s.underscore.to_sym
52         else
53           nk = k
54         end
55         nh[nk] = uncamelcase_hash_keys(v)
56       end
57       h.replace(nh)
58     end
59     h
60   end
61
62   def render_list
63     @object_list = {
64       :kind  => "orvos##{resource_name}List",
65       :etag => "",
66       :self_link => "",
67       :next_page_token => "",
68       :next_link => "",
69       :items => @objects.map { |x| x }
70     }
71     render json: @object_list
72   end
73 end