module Scrivito # # This class represents an attribute definition. # # @api public # class AttributeDefinition # # @!attribute [r] name # @api public # @return [String] the name of the attribute. # # @!attribute [r] type # @api public # @return [String] the type of the attribute. # attr_reader :name, :type def initialize(name, type, options = {}) @name, @type, @options = name.to_s, type.to_s, options.with_indifferent_access assert_valid_options end # # Allowed values for an attribute. # # @api public # @return [Array] allowed values if +type+ is +enum+ or +multienum+ or an empty array # otherwise. If no values have been specified, an empty array is returned. # def values if type == 'enum' || type == 'multienum' @options[:values] || [] else [] end end def widgetlist? type == 'widgetlist' end private def assert_valid_options if (values = @options[:values]) && values.include?('') raise ScrivitoError, %{Empty string is not allowed as value for #{type} attribute "#{name}".} end end end end