metadata_presenter 2.19.3 → 2.19.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2279ffc71300e31a078526283d51dd9264d7b6dc8912e714758ea099a0f4b261
4
- data.tar.gz: d1288a6835ee16441c6d267d9ac97c23178b63474b9b5b26100fd2bb93ab6836
3
+ metadata.gz: f0d20b5161033659492619628a0c1f26c1a69926193dbea87353a1b3a2a0a984
4
+ data.tar.gz: 15940e4f5bbf2656108d89a589535635d31bd2f8f813855b628ee67e4ef9ddf1
5
5
  SHA512:
6
- metadata.gz: 0ed0cc7cb93eb72ce9708daf8dbde6f4a39d40a1bc94bf55900f807debe21c78d7674e89b2385301771bbaf9a7a31a3721345f3f893a53b118cffc0918913ac9
7
- data.tar.gz: b6e2ec8a129bd962d64dc8b28811a9792d2f8458eb042cca80513647288102c7ec8050dfce3c694328273f658ccbb7a98d2b33ffb2085c7b2b72cac9be29fbd1
6
+ metadata.gz: 9b3db24698b1637328ba375d2676c903331cab7fcdc1789faeedc4b626b41f685f2a50225ea48f04c378d72be288928322eb24cccff816085dd66784c1d6377b
7
+ data.tar.gz: 47f23df2526d20da3066044b4224faee03113375c4654bce63154935b50e8df94cd588196b841a034641f591447577da8d9246dbbf2a1cd6ddb46f5c4fabba18
@@ -22,6 +22,14 @@ module MetadataPresenter
22
22
  end
23
23
  end
24
24
 
25
+ def update_count_matching_filenames(original_filename, user_data)
26
+ extname = File.extname(original_filename)
27
+ basename = File.basename(original_filename, extname)
28
+ filename_regex = /^#{Regexp.quote(basename)}(?>-\((\d)\))?#{Regexp.quote(extname)}/
29
+
30
+ user_data.select { |_k, v| v.instance_of?(Hash) && v['original_filename'] =~ filename_regex }.count
31
+ end
32
+
25
33
  private
26
34
 
27
35
  def page
@@ -72,6 +80,12 @@ module MetadataPresenter
72
80
  @page_answers.page.upload_components.each do |component|
73
81
  answer = user_data[component.id]
74
82
 
83
+ original_filename = answer.nil? ? @page_answers.send(component.id)['original_filename'] : answer['original_filename']
84
+
85
+ if original_filename.present?
86
+ @page_answers.count = update_count_matching_filenames(original_filename, user_data)
87
+ end
88
+
75
89
  @page_answers.uploaded_files.push(uploaded_file(answer, component))
76
90
  end
77
91
  end
@@ -1,7 +1,7 @@
1
1
  module MetadataPresenter
2
2
  class OfflineUploadAdapter
3
3
  include ActiveModel::Model
4
- attr_accessor :session, :file_details, :allowed_file_types
4
+ attr_accessor :session, :file_details, :allowed_file_types, :count
5
5
 
6
6
  def call
7
7
  {}
@@ -4,6 +4,7 @@ module MetadataPresenter
4
4
  include ActiveModel::Validations
5
5
  include ActionView::Helpers
6
6
  attr_reader :page, :answers, :uploaded_files, :autocomplete_items
7
+ attr_accessor :count
7
8
 
8
9
  def initialize(page, answers, autocomplete_items = nil)
9
10
  @page = page
@@ -28,7 +29,7 @@ module MetadataPresenter
28
29
  if component && component.type == 'date'
29
30
  date_answer(component.id)
30
31
  elsif component && component.type == 'upload'
31
- upload_answer(component.id)
32
+ upload_answer(component.id, count)
32
33
  elsif component && component.type == 'checkboxes'
33
34
  answers[method_name.to_s].to_a
34
35
  else
@@ -36,16 +37,16 @@ module MetadataPresenter
36
37
  end
37
38
  end
38
39
 
39
- def upload_answer(component_id)
40
+ def upload_answer(component_id, _count)
40
41
  file_details = answers[component_id.to_s]
41
42
 
42
43
  return {} unless file_details
43
44
 
44
45
  if file_details.is_a?(Hash) || file_details.is_a?(ActionController::Parameters)
45
- file_details.merge('original_filename' => sanitize(file_details['original_filename']))
46
+ file_details.merge('original_filename' => sanitize(filename(file_details['original_filename'])))
46
47
  else
47
48
  {
48
- 'original_filename' => sanitize(file_details.original_filename),
49
+ 'original_filename' => sanitize(filename(file_details.original_filename)),
49
50
  'content_type' => file_details.content_type,
50
51
  'tempfile' => file_details.tempfile.path.to_s
51
52
  }
@@ -67,5 +68,22 @@ module MetadataPresenter
67
68
  sanitize(answers["#{component_id}(#{segment})"])
68
69
  end
69
70
  end
71
+
72
+ private
73
+
74
+ def filename(path)
75
+ return sanitize(path) if path.nil?
76
+
77
+ filename = sanitize(path).gsub(/&gt;/, '').gsub(/&lt;/, '').delete('>"[]{}*?:|]/<').delete('\\')
78
+
79
+ if count.present? && count.positive?
80
+ extname = File.extname(filename)
81
+ basename = File.basename(filename, extname)
82
+
83
+ filename = "#{basename}-(#{count})#{extname}"
84
+ end
85
+
86
+ filename
87
+ end
70
88
  end
71
89
  end
@@ -3,7 +3,6 @@
3
3
  <span class="govuk-hint" id="answers-dog-picture-upload-1-hint" data-fb-default-text="<%= default_text('upload_hint') %>">
4
4
  <%= component.hint.present? ? component.hint : default_text('upload_hint') %>
5
5
  </span>
6
-
7
6
  <p><%= @page_answers.send(component.id)['original_filename'] %></p>
8
7
 
9
8
  <p>
@@ -1,3 +1,3 @@
1
1
  module MetadataPresenter
2
- VERSION = '2.19.3'.freeze
2
+ VERSION = '2.19.5'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metadata_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.19.3
4
+ version: 2.19.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - MoJ Forms
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-11 00:00:00.000000000 Z
11
+ date: 2023-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_design_system_formbuilder
@@ -216,16 +216,16 @@ dependencies:
216
216
  name: site_prism
217
217
  requirement: !ruby/object:Gem::Requirement
218
218
  requirements:
219
- - - ">="
219
+ - - '='
220
220
  - !ruby/object:Gem::Version
221
- version: '0'
221
+ version: '4.0'
222
222
  type: :development
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
- - - ">="
226
+ - - '='
227
227
  - !ruby/object:Gem::Version
228
- version: '0'
228
+ version: '4.0'
229
229
  - !ruby/object:Gem::Dependency
230
230
  name: sqlite3
231
231
  requirement: !ruby/object:Gem::Requirement