@@ -16,19 +16,19 @@ class AssetFieldType < FieldType
16
16
17
17
def metadata = ( metadata_hash )
18
18
@metadata = metadata_hash . deep_symbolize_keys
19
- Paperclip ::HasAttachedFile . define_on ( self . class , :asset , metadata )
19
+ @existing_data = metadata_hash [ :existing_data ]
20
+ Paperclip ::HasAttachedFile . define_on ( self . class , :asset , existing_metadata )
20
21
end
21
22
22
23
def data = ( data_hash )
23
- @existing_data = data_hash . deep_symbolize_keys [ :existing_data ]
24
24
self . asset = data_hash . deep_symbolize_keys [ :asset ]
25
25
end
26
26
27
27
def data
28
28
{
29
29
'asset' : {
30
30
'file_name' : asset_file_name ,
31
- 'url' : url ,
31
+ 'url' : asset . url ,
32
32
'dimensions' : dimensions ,
33
33
'content_type' : asset_content_type ,
34
34
'file_size' : asset_file_size ,
@@ -115,7 +115,21 @@ def validate_asset_content_type
115
115
attachment_content_type_validator . validate_each ( self , :asset , asset )
116
116
end
117
117
118
- def url
119
- @existing_data . empty? ? asset . url : @existing_data [ :asset ] [ :url ]
118
+ def existing_metadata
119
+ metadata . except! ( :existing_data )
120
+
121
+ unless @existing_data . empty?
122
+ metadata [ :path ] = updated_url ( @existing_data [ 'asset' ] [ 'url' ] )
123
+ end
124
+
125
+ metadata
126
+ end
127
+
128
+ def updated_url ( path )
129
+ # Take the parse path of the existing URL and drop the first '/',
130
+ # that will be added later and we don't want to duplicate it
131
+ # Then remove the old file extension and replace it with the paperclipp'd new one
132
+ new_path = URI . parse ( path ) . path . slice ( 1 ..-1 )
133
+ new_path . gsub ( File . extname ( path ) , ".:extension" )
120
134
end
121
135
end
0 commit comments