diff options
| author | Zog | 2018-04-16 19:49:54 +0200 |
|---|---|---|
| committer | Zog | 2018-04-16 19:49:54 +0200 |
| commit | 34cf69c9cdebe5846426e6c69ab919d9c5a640a4 (patch) | |
| tree | f011e16471c8f2839532cee019991bfaad3a45d0 /app/models/custom_field.rb | |
| parent | cf63f8f32ecaa6f1bccc70a68e4c6d4d8794373b (diff) | |
| download | chouette-core-34cf69c9cdebe5846426e6c69ab919d9c5a640a4.tar.bz2 | |
Refs #6477; Use custom fields values in checksum calculation6477-use-custom-fields-in-checksums
Diffstat (limited to 'app/models/custom_field.rb')
| -rw-r--r-- | app/models/custom_field.rb | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb index 65eabb205..88783b5b4 100644 --- a/app/models/custom_field.rb +++ b/app/models/custom_field.rb @@ -63,6 +63,10 @@ class CustomField < ApplicationModel @raw_value end + def checksum + @raw_value + end + def input form_helper @input ||= begin klass_name = field_type && "CustomField::Instance::#{field_type.classify}::Input" @@ -187,9 +191,10 @@ class CustomField < ApplicationModel custom_field_code = self.code _attr_name = attr_name _uploader_name = uploader_name + _digest_name = digest_name owner.send :define_singleton_method, "read_uploader" do |attr| if attr.to_s == _attr_name - custom_field_values[custom_field_code] + custom_field_values[custom_field_code] && custom_field_values[custom_field_code]["path"] else read_attribute attr end @@ -197,16 +202,28 @@ class CustomField < ApplicationModel owner.send :define_singleton_method, "write_uploader" do |attr, val| if attr.to_s == _attr_name - custom_field_values[custom_field_code] = val + self.custom_field_values[custom_field_code] ||= {} + self.custom_field_values[custom_field_code]["path"] = val + self.custom_field_values[custom_field_code]["digest"] = self.send _digest_name else write_attribute attr, val end end owner.send :define_singleton_method, "#{_attr_name}_will_change!" do + self.send "#{_digest_name}=", nil custom_field_values_will_change! end + owner.send :define_singleton_method, _digest_name do + val = instance_variable_get "@#{_digest_name}" + if val.nil? && (file = send(_uploader_name)).present? + val = CustomField::Instance::Attachment.digest(file) + instance_variable_set "@#{_digest_name}", val + end + val + end + _extension_whitelist = options["extension_whitelist"] owner.send :define_singleton_method, "#{_uploader_name}_extension_whitelist" do @@ -215,7 +232,15 @@ class CustomField < ApplicationModel unless owner.class.uploaders.has_key? _uploader_name.to_sym owner.class.mount_uploader _uploader_name, CustomFieldAttachmentUploader, mount_on: "custom_field_#{code}_raw_value" + owner.class.send :attr_accessor, _digest_name end + + digest = @raw_value && @raw_value["digest"] + owner.send "#{_digest_name}=", digest + end + + def self.digest file + Digest::SHA256.file(file.path).hexdigest end def preprocess_value_for_assignment val @@ -226,6 +251,10 @@ class CustomField < ApplicationModel end end + def checksum + owner.send digest_name + end + def value owner.send "custom_field_#{code}" end @@ -242,6 +271,10 @@ class CustomField < ApplicationModel "custom_field_#{code}" end + def digest_name + "#{uploader_name}_digest" + end + def display_value render_partial end |
