lib/scrivito/basic_widget.rb in scrivito_sdk-1.1.1 vs lib/scrivito/basic_widget.rb in scrivito_sdk-1.2.0.rc1

- old
+ new

@@ -53,10 +53,47 @@ computed_classes = assert_classes(valid_container_classes, '.valid_container_classes') computed_classes.nil? || computed_classes.include?(container_class) end + # @api beta + def self.embeds(attribute_name) + @embedding_attribute = attribute_name + nil + end + + # @api beta + def self.embeds? + !!@embedding_attribute || !!superclass.try(:embeds?) + end + + # @api beta + def self.embedding_attribute + raise ScrivitoError, "#{self} has no embedding attribute" unless embeds? + + if @embedding_attribute + unless attribute_definition = attribute_definitions[@embedding_attribute] + raise ScrivitoError, %{Unknown attribute: "#{@embedding_attribute}"} + end + + unless attribute_definition.reference? + raise ScrivitoError, %{Embedding attribute "#{@embedding_attribute}" must be a reference} + end + + attribute_definition + else + superclass.embedding_attribute + end + end + + def self.as_json + super.merge( + embeds: embeds?, + embeddingAttribute: @embedding_attribute, + ) + end + attr_accessor :container, :container_attribute_name attr_writer :obj, :id attr_reader :attributes_to_be_saved @@ -359,9 +396,14 @@ if persisted? super else raise_not_persisted_error end + end + + def contained_widgets + referenced = referenced_widgets + referenced + referenced.map { |widget| widget.contained_widgets }.flatten end private def workspace