Module: CloudCheckr::API::Controllers
- Defined in:
- lib/cloud_checkr/api/controllers.rb
Class Method Summary collapse
-
.build_controller_classes! ⇒ Object
Returns a [Hash] with controller name and class.
Class Method Details
.build_controller_classes! ⇒ Object
Returns a [Hash] with controller name and class
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/cloud_checkr/api/controllers.rb', line 8 def self.build_controller_classes! endpoints_path = File.join(File.dirname(__FILE__), 'endpoints.yml') endpoints_schemas = YAML.load_file(endpoints_path) controllers = {} # Define a controller class for each controller name endpoints_schemas.each do |schema| controller_name = schema['controller_name'].to_sym controller_class_name = schema['controller_name'].split('_').collect(&:capitalize).join + 'Controller' controller_class = Class.new(::CloudCheckr::API::Controller) do method_names = [] # Define a method for each API call schema['api_calls'].each do |api_call| method_name = api_call['method_name'].to_sym required_params = api_call['param_names'].lazy.select{|name| name.include?('(required)')}.map{|name| name.gsub(/\([^\)]+\)/, '').to_sym}.to_a if api_call['method_name'].start_with?('get_') define_method(method_name) do |params = {}, headers = nil, &request_builder| @client.get(controller_name, method_name, params, headers, &request_builder) end else define_method(method_name) do |params = {}, headers = nil, &request_builder| @client.post(controller_name, method_name, params, headers, &request_builder) end end method_names << method_name end define_method(:api_calls){ method_names } end # Register the class within the Controllers module self.const_set(controller_class_name, controller_class) controllers[controller_name] = controller_class end controllers end |