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