X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/374a802e502d044973fd21ca68d2f6ab707bd770..d63601c63f651ab9fe4fefb5a7e8d76bf0495da3:/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 38bd5cfb34..aed0309591 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -42,7 +42,13 @@ class ArvadosModel < ActiveRecord::Base class AlreadyLockedError < StandardError def http_status - 403 + 422 + end + end + + class InvalidStateTransitionError < StandardError + def http_status + 422 end end @@ -233,7 +239,7 @@ class ArvadosModel < ActiveRecord::Base end def logged_attributes - attributes.except *Rails.configuration.unlogged_attributes + attributes.except(*Rails.configuration.unlogged_attributes) end def self.full_text_searchable_columns @@ -265,6 +271,18 @@ class ArvadosModel < ActiveRecord::Base protected + def self.deep_sort_hash(x) + if x.is_a? Hash + x.sort.collect do |k, v| + [k, deep_sort_hash(v)] + end.to_h + elsif x.is_a? Array + x.collect { |v| deep_sort_hash(v) } + else + x + end + end + def ensure_ownership_path_leads_to_user if new_record? or owner_uuid_changed? uuid_in_path = {owner_uuid => true, uuid => true} @@ -472,7 +490,7 @@ class ArvadosModel < ActiveRecord::Base end def foreign_key_attributes - attributes.keys.select { |a| a.match /_uuid$/ } + attributes.keys.select { |a| a.match(/_uuid$/) } end def skip_uuid_read_permission_check @@ -487,7 +505,7 @@ class ArvadosModel < ActiveRecord::Base foreign_key_attributes.each do |attr| attr_value = send attr if attr_value.is_a? String and - attr_value.match /^[0-9a-f]{32,}(\+[@\w]+)*$/ + attr_value.match(/^[0-9a-f]{32,}(\+[@\w]+)*$/) begin send "#{attr}=", Collection.normalize_uuid(attr_value) rescue @@ -512,7 +530,7 @@ class ArvadosModel < ActiveRecord::Base end def self.uuid_like_pattern - "_____-#{uuid_prefix}-_______________" + "#{Rails.configuration.uuid_prefix}-#{uuid_prefix}-_______________" end def self.uuid_regex @@ -566,13 +584,12 @@ class ArvadosModel < ActiveRecord::Base unless uuid.is_a? String return nil end - resource_class = nil uuid.match HasUuid::UUID_REGEX do |re| return uuid_prefixes[re[1]] if uuid_prefixes[re[1]] end - if uuid.match /.+@.+/ + if uuid.match(/.+@.+/) return Email end @@ -618,7 +635,7 @@ class ArvadosModel < ActiveRecord::Base end def log_destroy - log_change('destroy') do |log| + log_change('delete') do |log| log.fill_properties('old', etag(@old_attributes), @old_logged_attributes) log.update_to nil end