Module: ApiVersioning::ActionControllerExtension::InstanceMethods
- Defined in:
- app/controllers/api_versioning/action_controller_extension.rb
Instance Method Summary collapse
- #api_version ⇒ Object
- #api_version_filter(version) ⇒ Object
- #detect_api_version ⇒ Object
- #extract_api_version_from_header ⇒ Object
- #extract_api_version_from_param ⇒ Object
- #render_api_error(message, status = 400, exception = nil) ⇒ Object
- #render_json(presenters, status = 200) ⇒ Object
Instance Method Details
#api_version ⇒ Object
10 11 12 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 10 def api_version @api_version ||= detect_api_version end |
#api_version_filter(version) ⇒ Object
26 27 28 29 30 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 26 def api_version_filter(version) return nil if version.nil? matches = version.match(Api::BaseApi::API_VERSION_REGEX) matches.nil? ? nil : matches[0].to_sym end |
#detect_api_version ⇒ Object
14 15 16 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 14 def detect_api_version extract_api_version_from_param || extract_api_version_from_header end |
#extract_api_version_from_header ⇒ Object
22 23 24 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 22 def extract_api_version_from_header api_version_filter(request.headers["HTTP_X_API_VERSION"]) end |
#extract_api_version_from_param ⇒ Object
18 19 20 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 18 def extract_api_version_from_param api_version_filter(params['api_version']) end |
#render_api_error(message, status = 400, exception = nil) ⇒ Object
53 54 55 56 57 58 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 53 def render_api_error(, status=400, exception=nil) notify_api_error(exception) unless exception.nil? status_code = Rack::Utils.status_code(status) status_description = Rack::Utils::HTTP_STATUS_CODES[status_code] render :status => status, :json => { status_code: status_code, status_description: status_description, message: }.to_json end |
#render_json(presenters, status = 200) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 32 def render_json(presenters, status=200) results = [] begin presenters.each do |key, value| presenter = Api.const_get("#{key.to_s.camelize}Api").new(api_version) results << presenter.render(value) end render :status => status, :json => results.join(','), :callback => params[:callback] rescue NameError => e render_api_error "Unknown Presenter", 400, e rescue Exception => e render_api_error "Bad API Request", 400, e end end |