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'], }