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_cached_json(caching_keys, expires_in, presenters, status = 200) ⇒ Object
- #render_json(presenters, status = 200) ⇒ Object
- #render_presenters(presenters) ⇒ Object
- #render_results(results) ⇒ 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
82 83 84 85 86 87 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 82 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_cached_json(caching_keys, expires_in, presenters, status = 200) ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 45 def render_cached_json(caching_keys, expires_in, presenters, status=200) results = Rails.cache.fetch(caching_keys, expires_in: expires_in) do render_presenters(presenters) end render_results results end |
#render_json(presenters, status = 200) ⇒ Object
77 78 79 80 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 77 def render_json(presenters, status=200) results = render_presenters(presenters) render_results results end |
#render_presenters(presenters) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 32 def render_presenters(presenters) results = [] presenters.each do |key, value| presenter = Api.const_get("#{key.to_s.camelize}Api").new(api_version) results << presenter.render(value) end results.join(',') end |
#render_results(results) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/controllers/api_versioning/action_controller_extension.rb', line 55 def render_results(results) begin render status: status, json: results, callback: params[:callback] rescue NameError => e if Rails.production? || Rails.test? render_api_error "Unknown Presenter", 400, e else raise e end rescue Exception => e if Rails.production? || Rails.test? render_api_error "Bad API Request", 400, e else raise e end end end |