X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/aabc7a74ca16c8d72872988354e5e6d32be4fb00..9b98829c565a2aa487d21ecd7f9429c23d0cec20:/services/api/app/models/arvados_model.rb diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb index 037903c7bc..c663d21d52 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -104,10 +104,27 @@ class ArvadosModel < ActiveRecord::Base api_column_map end + def self.ignored_select_attributes + ["href", "kind", "etag"] + end + def self.columns_for_attributes(select_attributes) + if select_attributes.empty? + raise ArgumentError.new("Attribute selection list cannot be empty") + end + api_column_map = attributes_required_columns + invalid_attrs = [] + select_attributes.each do |s| + next if ignored_select_attributes.include? s + if not s.is_a? String or not api_column_map.include? s + invalid_attrs << s + end + end + if not invalid_attrs.empty? + raise ArgumentError.new("Invalid attribute(s): #{invalid_attrs.inspect}") + end # Given an array of attribute names to select, return an array of column # names that must be fetched from the database to satisfy the request. - api_column_map = attributes_required_columns select_attributes.flat_map { |attr| api_column_map[attr] }.uniq end @@ -226,7 +243,7 @@ class ArvadosModel < ActiveRecord::Base end def logged_attributes - attributes + attributes.except *Rails.configuration.unlogged_attributes end def self.full_text_searchable_columns