Module: ApiVersioning::ActionControllerExtension::InstanceMethods

Defined in:
app/controllers/api_versioning/action_controller_extension.rb

Instance Method Summary collapse

Instance Method Details

#api_versionObject



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_versionObject



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_headerObject



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_paramObject



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(message, 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: 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