14988: Fixes .dup method behavior on ArvadosBase.
authorLucas Di Pentima <ldipentima@veritasgenetics.com>
Tue, 7 May 2019 20:26:33 +0000 (17:26 -0300)
committerLucas Di Pentima <ldipentima@veritasgenetics.com>
Tue, 7 May 2019 20:26:33 +0000 (17:26 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima@veritasgenetics.com>

apps/workbench/app/models/arvados_base.rb
apps/workbench/app/models/user.rb

index 9925d46128410ca0730572cbdec6622d1adb3069..a25d8ae01b232df58a63d4832a42e997de72f887 100644 (file)
@@ -104,7 +104,7 @@ class ArvadosBase
     attributes.symbolize_keys.each do |name, value|
       send("#{name}=", value)
     end
-end
+  end
 
   def self.columns
     return @discovered_columns if @discovered_columns.andand.any?
@@ -133,7 +133,14 @@ end
   end
 
   def new_record?
-    (uuid == nil) ? true : false
+    # dup method doesn't reset the uuid attr
+    @uuid.nil? || @new_record || false
+  end
+
+  def initialize_dup(other)
+    super
+    @new_record = true
+    @created_at = nil
   end
 
   def self.column(name, sql_type = nil, default = nil, null = true)
@@ -152,6 +159,8 @@ end
                 ArvadosBase::Type::Hash
               when 'Array'
                 ArvadosBase::Type::Array
+              when 'jsonb'
+                ArvadosBase::Type::Hash
               else
                 raise ArvadosBase::Error.new("Type unknown: #{sql_type}")
             end
@@ -316,7 +325,10 @@ end
       obdata.delete :uuid
       resp = arvados_api_client.api(self.class, '/' + uuid, postdata)
     else
-      postdata.merge!(@create_params) if @create_params
+      if @create_params
+        @create_params = @create_params.to_unsafe_hash if @create_params.is_a? ActionController::Parameters
+        postdata.merge!(@create_params)
+      end
       resp = arvados_api_client.api(self.class, '', postdata)
     end
     return false if !resp[:etag] || !resp[:uuid]
index 865ff6e9519cacf613b248df446fd4a1e0b24636..34e8181515c887fbe9e09659d09ebee4ab40f24f 100644 (file)
@@ -109,7 +109,7 @@ class User < ArvadosBase
     false
   end
 
-   def self.creatable?
+  def self.creatable?
     current_user and current_user.is_admin
-   end
+  end
 end