lib/scrivito/attribute_content.rb in scrivito_sdk-0.17.0 vs lib/scrivito/attribute_content.rb in scrivito_sdk-0.18.0
- old
+ new
@@ -38,11 +38,12 @@
prepare_attribute_value(raw_value, attribute_type, attribute_name)
end
end
def has_custom_attribute?(name)
- data_from_cms.has_custom_attribute?(name.to_s)
+ name = name.to_s
+ name != 'blob' && data_from_cms.has_custom_attribute?(name)
end
alias_method :has_attribute?, :has_custom_attribute?
# @return [String]
def type_of_attribute(field_name)
@@ -52,11 +53,16 @@
# Returns the value of an internal or external attribute specified by its name.
# Passing an invalid key will not raise an error, but return +nil+.
# @api public
def [](key)
key = key.to_s
- has_attribute?(key) ? read_attribute(key) : nil
+
+ if key == '_obj_class'
+ obj_class
+ else
+ has_attribute?(key) ? read_attribute(key) : nil
+ end
end
# Hook method to control which widget classes should be available for this page.
# Override it to allow only certain classes or none.
# Must return either +NilClass+, or +Array+.
@@ -83,12 +89,12 @@
Modification::DELETED
else
cms_data_in_revision = cms_data_for_revision(revision)
if cms_data_in_revision
- other_value = cms_data_in_revision.unchecked_value_of(attribute_name.to_s)
- if data_from_cms.unchecked_value_of(attribute_name.to_s) == other_value
+ other_value = cms_data_in_revision.value_without_default_of(attribute_name.to_s)
+ if data_from_cms.value_without_default_of(attribute_name.to_s) == other_value
Modification::UNMODIFIED
else
Modification::EDITED
end
else # I am deleted in both revisions!
@@ -100,10 +106,26 @@
def update_data(data)
self.data_from_cms = data
@attribute_cache = {}
end
+ # Returns the obj class name of this object.
+ # @api public
+ # @return [String]
+ def obj_class_name
+ data_from_cms.value_of('_obj_class')
+ end
+
+ # Returns the obj class of this object.
+ # @api public
+ # @return [ObjClass]
+ def obj_class
+ if obj_class_data = CmsBackend.instance.find_obj_class_data_by_name(revision, obj_class_name)
+ ObjClass.new(obj_class_data, revision.workspace)
+ end
+ end
+
private
attr_writer :data_from_cms
def data_from_cms
@@ -138,11 +160,11 @@
def build_links(link_definitions)
if link_definitions.present?
link_definitions = link_definitions.map(&:with_indifferent_access)
object_ids = link_definitions.map { |link_data| link_data[:destination] }.compact.uniq
- objects = object_ids.empty? ? [] : Obj.find(object_ids)
+ objects = object_ids.empty? ? [] : BasicObj.find(object_ids)
link_definitions.each_with_object([]) do |link_data, links|
obj = objects.detect { |o| o && o.id == link_data[:destination] }
link = Link.new(link_data.merge(obj: obj))
links << link if link.resolved?
end
@@ -151,20 +173,20 @@
end
end
def build_link(attribute_value)
return unless attribute_value
-
+
if attribute_value['destination']
build_internal_link(attribute_value)
else
build_external_link(attribute_value)
end
end
def build_internal_link(attribute_value)
properties = {
- obj: Obj.find(attribute_value['destination']),
+ obj: BasicObj.find(attribute_value['destination']),
title: attribute_value['title'],
query: attribute_value['query'],
fragment: attribute_value['fragment'],
target: attribute_value['target'],
}