Sha256: 0a811d8fba39e3e757a3176b054b2fe7af10ba26090f62732b2535b0b2b63b66

Contents?: true

Size: 1.19 KB

Versions: 36

Compression:

Stored size: 1.19 KB

Contents

module Nanoc
  module MutableDocumentViewMixin
    # @api private
    class DisallowedAttributeValueError < Nanoc::Error
      attr_reader :value

      def initialize(value)
        @value = value
      end

      def message
        "The #{value.class} cannot be stored inside an attribute. Store its identifier instead."
      end
    end

    # Sets the value for the given attribute.
    #
    # @param [Symbol] key
    #
    # @see Hash#[]=
    def []=(key, value)
      disallowed_value_classes = Set.new([
        Nanoc::Int::Item,
        Nanoc::Int::Layout,
        Nanoc::ItemWithRepsView,
        Nanoc::LayoutView,
      ])
      if disallowed_value_classes.include?(value.class)
        raise DisallowedAttributeValueError.new(value)
      end

      unwrap.attributes[key] = value
    end

    # Sets the identifier to the given argument.
    #
    # @param [String, Nanoc::Identifier] arg
    def identifier=(arg)
      unwrap.identifier = Nanoc::Identifier.from(arg)
    end

    # Updates the attributes based on the given hash.
    #
    # @param [Hash] hash
    #
    # @return [self]
    def update_attributes(hash)
      hash.each { |k, v| unwrap.attributes[k] = v }
      self
    end
  end
end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
nanoc-4.5.4 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.5.3 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.5.2 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.5.1 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.5.0 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.7 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.6 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.5 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.4 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.3 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.2 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.1 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.4.0 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.3.8 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.3.7 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.3.6 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.3.5 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.3.4 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.3.3 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb
nanoc-4.3.2 lib/nanoc/base/views/mixins/mutable_document_view_mixin.rb