class ActiveFedora::WithMetadata::MetadataNode
def changed_attributes
def changed_attributes super.tap do |changed| changed['type'] = true if type.present? && new_record? end end
def changes_for_update
def changes_for_update ChangeSet.new(self, self, changed_attributes.keys).changes end
def create_delegating_setter(name)
def create_delegating_setter(name) file.class.delegate(name, to: :metadata_node) end
def exec_block(&block)
def exec_block(&block) class_eval(&block) end
def initialize(file)
def initialize(file) @file = file super(file.uri, ldp_source.graph) return unless self.class.type && !type.include?(self.class.type) # Workaround for https://github.com/ActiveTriples/ActiveTriples/issues/123 get_values(:type) << self.class.type end
def ldp_connection
def ldp_connection ActiveFedora.fedora.connection end
def ldp_source
def ldp_source @ldp_source ||= LdpResource.new(ldp_connection, metadata_uri) end
def metadata_uri
def metadata_uri @metadata_uri ||= if file.new_record? ::RDF::URI.new nil else raise "#{file} must respond_to described_by" unless file.respond_to? :described_by file.described_by end end
def property(name, options)
def property(name, options) parent_class.delegate name, :"#{name}=", :"#{name}_changed?", to: :metadata_node super end
def save
def save raise "Save the file first" if file.new_record? SparqlInsert.new(changes_for_update, ::RDF::URI.new(file.uri)).execute(metadata_uri) @ldp_source = nil true end
def set_value(*args)
def set_value(*args) super attribute_will_change! args.first end