Skip to content

Instantly share code, notes, and snippets.

@cjcolvar
Created August 8, 2013 17:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cjcolvar/6186776 to your computer and use it in GitHub Desktop.
Save cjcolvar/6186776 to your computer and use it in GitHub Desktop.
Adding field_changed? methods to AF delegations
diff --git a/lib/active_fedora/delegating.rb b/lib/active_fedora/delegating.rb
index d2a3a29..d805514 100644
--- a/lib/active_fedora/delegating.rb
+++ b/lib/active_fedora/delegating.rb
@@ -72,6 +72,7 @@ module ActiveFedora
if ds_specs.has_key? to.to_s
create_delegate_reader(fields.first, options)
create_delegate_setter(fields.first, options)
+ create_delegate_changed?(fields.first, options)
else
super(*methods)
end
@@ -101,6 +102,7 @@ module ActiveFedora
args.merge!({:to=>datastream})
create_delegate_reader(f, args)
create_delegate_setter(f, args)
+ create_delegate_changed?(f, args)
end
end
@@ -147,12 +149,23 @@ module ActiveFedora
terminology = args[:at] || [field]
ds.send(:update_indexed_attributes, {terminology => v})
end
+ ds.changed_attributes["#{field}"] = nil if self[field] != v
end
define_method "#{field}=".to_sym do |v|
self[field]=v
end
end
+ def create_delegate_changed?(field, args)
+ self.delegates[field] ||= {}
+ self.delegates[field][:changed] = lambda do
+ ds = self.send(args[:to])
+ ds.changed_attributes.has_key? "#{field}"
+ end
+ define_method "#{field}_changed?".to_sym do
+ instance_exec &self.class.delegates[field][:changed]
+ end
+ end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment