active_storage_validations 0.9.7 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +737 -229
  3. data/config/locales/da.yml +53 -0
  4. data/config/locales/de.yml +50 -19
  5. data/config/locales/en.yml +50 -19
  6. data/config/locales/es.yml +50 -19
  7. data/config/locales/fr.yml +50 -19
  8. data/config/locales/it.yml +50 -19
  9. data/config/locales/ja.yml +50 -19
  10. data/config/locales/nl.yml +50 -19
  11. data/config/locales/pl.yml +50 -19
  12. data/config/locales/pt-BR.yml +50 -19
  13. data/config/locales/ru.yml +50 -19
  14. data/config/locales/sv.yml +53 -0
  15. data/config/locales/tr.yml +50 -19
  16. data/config/locales/uk.yml +50 -19
  17. data/config/locales/vi.yml +50 -19
  18. data/config/locales/zh-CN.yml +53 -0
  19. data/lib/active_storage_validations/analyzer/audio_analyzer.rb +58 -0
  20. data/lib/active_storage_validations/analyzer/content_type_analyzer.rb +60 -0
  21. data/lib/active_storage_validations/analyzer/image_analyzer/image_magick.rb +47 -0
  22. data/lib/active_storage_validations/analyzer/image_analyzer/vips.rb +57 -0
  23. data/lib/active_storage_validations/analyzer/image_analyzer.rb +49 -0
  24. data/lib/active_storage_validations/analyzer/null_analyzer.rb +18 -0
  25. data/lib/active_storage_validations/analyzer/shared/asv_ff_probable.rb +61 -0
  26. data/lib/active_storage_validations/analyzer/video_analyzer.rb +130 -0
  27. data/lib/active_storage_validations/analyzer.rb +87 -0
  28. data/lib/active_storage_validations/aspect_ratio_validator.rb +154 -99
  29. data/lib/active_storage_validations/attached_validator.rb +22 -5
  30. data/lib/active_storage_validations/base_comparison_validator.rb +71 -0
  31. data/lib/active_storage_validations/content_type_validator.rb +206 -25
  32. data/lib/active_storage_validations/dimension_validator.rb +105 -82
  33. data/lib/active_storage_validations/duration_validator.rb +55 -0
  34. data/lib/active_storage_validations/extensors/asv_blob_metadatable.rb +49 -0
  35. data/lib/active_storage_validations/extensors/asv_marcelable.rb +12 -0
  36. data/lib/active_storage_validations/limit_validator.rb +75 -16
  37. data/lib/active_storage_validations/matchers/aspect_ratio_validator_matcher.rb +119 -0
  38. data/lib/active_storage_validations/matchers/attached_validator_matcher.rb +48 -25
  39. data/lib/active_storage_validations/matchers/base_comparison_validator_matcher.rb +140 -0
  40. data/lib/active_storage_validations/matchers/content_type_validator_matcher.rb +94 -59
  41. data/lib/active_storage_validations/matchers/dimension_validator_matcher.rb +97 -55
  42. data/lib/active_storage_validations/matchers/duration_validator_matcher.rb +39 -0
  43. data/lib/active_storage_validations/matchers/limit_validator_matcher.rb +127 -0
  44. data/lib/active_storage_validations/matchers/processable_file_validator_matcher.rb +78 -0
  45. data/lib/active_storage_validations/matchers/shared/asv_active_storageable.rb +19 -0
  46. data/lib/active_storage_validations/matchers/shared/asv_allow_blankable.rb +28 -0
  47. data/lib/active_storage_validations/matchers/shared/asv_attachable.rb +72 -0
  48. data/lib/active_storage_validations/matchers/shared/asv_contextable.rb +49 -0
  49. data/lib/active_storage_validations/matchers/shared/asv_messageable.rb +28 -0
  50. data/lib/active_storage_validations/matchers/shared/asv_rspecable.rb +27 -0
  51. data/lib/active_storage_validations/matchers/shared/asv_validatable.rb +56 -0
  52. data/lib/active_storage_validations/matchers/size_validator_matcher.rb +17 -71
  53. data/lib/active_storage_validations/matchers/total_size_validator_matcher.rb +47 -0
  54. data/lib/active_storage_validations/matchers.rb +11 -16
  55. data/lib/active_storage_validations/processable_file_validator.rb +37 -0
  56. data/lib/active_storage_validations/railtie.rb +11 -0
  57. data/lib/active_storage_validations/shared/asv_active_storageable.rb +30 -0
  58. data/lib/active_storage_validations/shared/asv_analyzable.rb +80 -0
  59. data/lib/active_storage_validations/shared/asv_attachable.rb +204 -0
  60. data/lib/active_storage_validations/shared/asv_errorable.rb +40 -0
  61. data/lib/active_storage_validations/shared/asv_loggable.rb +11 -0
  62. data/lib/active_storage_validations/shared/asv_optionable.rb +29 -0
  63. data/lib/active_storage_validations/shared/asv_symbolizable.rb +14 -0
  64. data/lib/active_storage_validations/size_validator.rb +24 -40
  65. data/lib/active_storage_validations/total_size_validator.rb +51 -0
  66. data/lib/active_storage_validations/version.rb +1 -1
  67. data/lib/active_storage_validations.rb +20 -6
  68. metadata +127 -21
  69. data/lib/active_storage_validations/metadata.rb +0 -123
@@ -1,123 +0,0 @@
1
- module ActiveStorageValidations
2
- class Metadata
3
- attr_reader :file
4
-
5
- def initialize(file)
6
- require_image_processor
7
- @file = file
8
- end
9
-
10
- def image_processor
11
- Rails.application.config.active_storage.variant_processor
12
- end
13
-
14
- def require_image_processor
15
- if image_processor == :vips
16
- require 'vips' unless defined?(Vips)
17
- else
18
- require 'mini_magick' unless defined?(MiniMagick)
19
- end
20
- end
21
-
22
- def metadata
23
- read_image do |image|
24
- if rotated_image?(image)
25
- { width: image.height, height: image.width }
26
- else
27
- { width: image.width, height: image.height }
28
- end
29
- end
30
- end
31
-
32
- private
33
-
34
- def read_image
35
- is_string = file.is_a?(String)
36
- if is_string || file.is_a?(ActiveStorage::Blob)
37
- blob =
38
- if is_string
39
- if Rails.gem_version < Gem::Version.new('6.1.0')
40
- ActiveStorage::Blob.find_signed(file)
41
- else
42
- ActiveStorage::Blob.find_signed!(file)
43
- end
44
- else
45
- file
46
- end
47
-
48
- tempfile = Tempfile.new(["ActiveStorage-#{blob.id}-", blob.filename.extension_with_delimiter])
49
- tempfile.binmode
50
-
51
- blob.download do |chunk|
52
- tempfile.write(chunk)
53
- end
54
-
55
- tempfile.flush
56
- tempfile.rewind
57
-
58
- image = if image_processor == :vips && Vips::get_suffixes.include?(File.extname(tempfile.path))
59
- Vips::Image.new_from_file(tempfile.path)
60
- else
61
- MiniMagick::Image.new(tempfile.path)
62
- end
63
- else
64
- image = if image_processor == :vips && Vips::get_suffixes.include?(File.extname(read_file_path))
65
- Vips::Image.new_from_file(read_file_path)
66
- else
67
- MiniMagick::Image.new(read_file_path)
68
- end
69
- end
70
-
71
- if image && valid_image?(image)
72
- yield image
73
- else
74
- logger.info "Skipping image analysis because ImageMagick or Vips doesn't support the file"
75
- {}
76
- end
77
- rescue LoadError, NameError
78
- logger.info "Skipping image analysis because the mini_magick or ruby-vips gem isn't installed"
79
- {}
80
- rescue MiniMagick::Error => error
81
- logger.error "Skipping image analysis due to an ImageMagick error: #{error.message}"
82
- {}
83
- rescue Vips::Error => error
84
- logger.error "Skipping image analysis due to a Vips error: #{error.message}"
85
- {}
86
- ensure
87
- image = nil
88
- end
89
-
90
- def valid_image?(image)
91
- image_processor == :vips ? image.avg : image.valid?
92
- rescue Vips::Error
93
- false
94
- end
95
-
96
- def rotated_image?(image)
97
- if image_processor == :vips
98
- image.get('exif-ifd0-Orientation').include?('Right-top') ||
99
- image.get('exif-ifd0-Orientation').include?('Left-bottom')
100
- else
101
- %w[ RightTop LeftBottom ].include?(image["%[orientation]"])
102
- end
103
- rescue Vips::Error # field "exif-ifd0-Orientation" not found
104
- false
105
- end
106
-
107
- def read_file_path
108
- case file
109
- when ActionDispatch::Http::UploadedFile, Rack::Test::UploadedFile
110
- file.path
111
- when Hash
112
- File.open(file.fetch(:io)).path
113
- else
114
- raise "Something wrong with params."
115
- end
116
- end
117
-
118
- def logger
119
- Rails.logger
120
- end
121
-
122
- end
123
- end