Module: ManageIQ::API::Common::ApplicationControllerMixins::Parameters
- Defined in:
- lib/manageiq/api/common/application_controller_mixins/parameters.rb
Class Method Summary collapse
Instance Method Summary collapse
- #all_attributes_for_index ⇒ Object
- #check_if_openapi_enabled ⇒ Object
- #filtered ⇒ Object
- #pagination_limit ⇒ Object
- #pagination_offset ⇒ Object
- #params_for_create ⇒ Object
- #params_for_list ⇒ Object
- #params_for_polymorphic_subcollection ⇒ Object
- #params_for_update ⇒ Object
- #permitted_params ⇒ Object
- #primary_collection_model ⇒ Object
- #query_sort_by ⇒ Object
- #safe_params_for_list ⇒ Object
- #subcollection_foreign_key ⇒ Object
- #subcollection_foreign_key_using_through_relation ⇒ Object
- #through_relation_klass ⇒ Object
- #through_relation_name ⇒ Object
Class Method Details
.included(other) ⇒ Object
7 8 9 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 7 def self.included(other) other.include(OpenapiEnabled) end |
Instance Method Details
#all_attributes_for_index ⇒ Object
83 84 85 86 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 83 def all_attributes_for_index check_if_openapi_enabled api_doc_definition.all_attributes + [subcollection_foreign_key_using_through_relation] end |
#check_if_openapi_enabled ⇒ Object
110 111 112 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 110 def check_if_openapi_enabled raise ArgumentError, "Openapi not enabled" unless self.class.openapi_enabled end |
#filtered ⇒ Object
88 89 90 91 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 88 def filtered check_if_openapi_enabled ManageIQ::API::Common::Filter.new(model, safe_params_for_list[:filter], api_doc_definition).apply end |
#pagination_limit ⇒ Object
93 94 95 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 93 def pagination_limit safe_params_for_list[:limit] end |
#pagination_offset ⇒ Object
97 98 99 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 97 def pagination_offset safe_params_for_list[:offset] end |
#params_for_create ⇒ Object
11 12 13 14 15 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 11 def params_for_create check_if_openapi_enabled # We already validate this with OpenAPI validator, that validates every request, so we shouldn't do it again here. body_params.permit! end |
#params_for_list ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 43 def params_for_list check_if_openapi_enabled safe_params = safe_params_for_list.slice(*all_attributes_for_index) if safe_params[subcollection_foreign_key_using_through_relation] # If this is a through relation, we need to replace the :foreign_key by the foreign key with right table # information. So e.g. :container_images with :tags subcollection will have {:container_image_id => ID} and we need # to replace it with {:container_images_tags => {:container_image_id => ID}}, where :container_images_tags is the # name of the mapping table. safe_params[through_relation_klass.table_name.to_sym] = { subcollection_foreign_key_using_through_relation => safe_params.delete(subcollection_foreign_key_using_through_relation) } end safe_params end |
#params_for_polymorphic_subcollection ⇒ Object
32 33 34 35 36 37 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 32 def params_for_polymorphic_subcollection return {} unless subcollection? return {} unless reflection = primary_collection_model&.reflect_on_association(request_path_parts["subcollection_name"]) return {} unless as = reflection.[:as] {"#{as}_type" => primary_collection_model.name, "#{as}_id" => request_path_parts["primary_collection_id"]} end |
#params_for_update ⇒ Object
105 106 107 108 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 105 def params_for_update check_if_openapi_enabled body_params.permit(*api_doc_definition.all_attributes - api_doc_definition.read_only_attributes) end |
#permitted_params ⇒ Object
23 24 25 26 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 23 def permitted_params check_if_openapi_enabled api_doc_definition.all_attributes + [:limit, :offset, :sort_by] + [subcollection_foreign_key] end |
#primary_collection_model ⇒ Object
39 40 41 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 39 def primary_collection_model @primary_collection_model ||= request_path_parts["primary_collection_name"].singularize.classify.safe_constantize end |
#query_sort_by ⇒ Object
101 102 103 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 101 def query_sort_by safe_params_for_list[:sort_by] end |
#safe_params_for_list ⇒ Object
17 18 19 20 21 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 17 def safe_params_for_list check_if_openapi_enabled # :limit & :offset can be passed in for pagination purposes, but shouldn't show up as params for filtering purposes @safe_params_for_list ||= params.merge(params_for_polymorphic_subcollection).permit(*permitted_params, :filter => {}, :sort_by => []) end |
#subcollection_foreign_key ⇒ Object
28 29 30 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 28 def subcollection_foreign_key "#{request_path_parts["primary_collection_name"].singularize}_id" end |
#subcollection_foreign_key_using_through_relation ⇒ Object
77 78 79 80 81 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 77 def subcollection_foreign_key_using_through_relation return unless through_relation_klass subcollection_foreign_key end |
#through_relation_klass ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 59 def through_relation_klass check_if_openapi_enabled return unless subcollection? return unless reflection = primary_collection_model&.reflect_on_association(request_path_parts["subcollection_name"]) return unless through = reflection.[:through] primary_collection_model&.reflect_on_association(through).klass end |
#through_relation_name ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/manageiq/api/common/application_controller_mixins/parameters.rb', line 68 def through_relation_name check_if_openapi_enabled # Through relation name taken from the subcollection model side, so we can use this for table join. return unless through_relation_klass return unless through_relation_association = model.reflect_on_all_associations.detect { |x| !x.polymorphic? && x.klass == through_relation_klass } through_relation_association.name end |