aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/custom_field.rb
diff options
context:
space:
mode:
authorZog2018-04-16 19:49:54 +0200
committerZog2018-04-16 19:49:54 +0200
commit34cf69c9cdebe5846426e6c69ab919d9c5a640a4 (patch)
treef011e16471c8f2839532cee019991bfaad3a45d0 /app/models/custom_field.rb
parentcf63f8f32ecaa6f1bccc70a68e4c6d4d8794373b (diff)
downloadchouette-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.rb37
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