Class: Nanoc::Layout

Inherits:
Object
  • Object
show all
Extended by:
Memoization
Defined in:
lib/nanoc/base/source_data/layout.rb

Overview

Represents a layout in a nanoc site. It has content, attributes, an identifier and a modification time (to speed up compilation).

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Methods included from Memoization

memoize

Constructor Details

- (Layout) initialize(raw_content, attributes, identifier, params = nil)

Creates a new layout.

Parameters:

  • raw_content (String)

    The raw content of this layout.

  • attributes (Hash)

    A hash containing this layout’s attributes.

  • identifier (String)

    This layout’s identifier.

  • params (Time, Hash) (defaults to: nil)

    Extra parameters. For backwards compatibility, this can be a Time instance indicating the time when this layout was last modified (mtime).

Options Hash (params):

  • :mtime (Time, nil) — default: nil

    The time when this layout was last modified. Deprecated; pass the modification time as the :mtime attribute instead.



36
37
38
39
40
41
42
43
44
45
# File 'lib/nanoc/base/source_data/layout.rb', line 36

def initialize(raw_content, attributes, identifier, params = nil)
  @raw_content  = raw_content
  @attributes   = attributes.symbolize_keys_recursively
  @identifier   = identifier.cleaned_identifier.freeze

  # Set mtime
  params ||= {}
  params = { :mtime => params } if params.is_a?(Time)
  @attributes.merge(:mtime => params[:mtime]) if params[:mtime]
end

Instance Attribute Details

- (Hash) attributes (readonly)

Returns This layout’s attributes

Returns:

  • (Hash)

    This layout’s attributes



15
16
17
# File 'lib/nanoc/base/source_data/layout.rb', line 15

def attributes
  @attributes
end

- (String) identifier

Returns This layout’s identifier, starting and ending with a slash

Returns:

  • (String)

    This layout’s identifier, starting and ending with a slash



19
20
21
# File 'lib/nanoc/base/source_data/layout.rb', line 19

def identifier
  @identifier
end

- (String) raw_content (readonly)

Returns The raw content of this layout

Returns:

  • (String)

    The raw content of this layout



12
13
14
# File 'lib/nanoc/base/source_data/layout.rb', line 12

def raw_content
  @raw_content
end

Instance Method Details

- (Object) ==(other)



105
106
107
# File 'lib/nanoc/base/source_data/layout.rb', line 105

def ==(other)
  self.eql?(other)
end

- (Object) [](key)

Requests the attribute with the given key.

Parameters:

  • key (Symbol)

    The name of the attribute to fetch.

Returns:

  • (Object)

    The value of the requested attribute.



52
53
54
# File 'lib/nanoc/base/source_data/layout.rb', line 52

def [](key)
  @attributes[key]
end

- (String) checksum

Returns The checksum for this object. If its contents change, the checksum will change as well.

Returns:

  • (String)

    The checksum for this object. If its contents change, the checksum will change as well.



90
91
92
93
94
# File 'lib/nanoc/base/source_data/layout.rb', line 90

def checksum
  attributes = @attributes.dup
  attributes.delete(:file)
  @raw_content.checksum + ',' + attributes.checksum
end

- (Boolean) eql?(other)

Returns:

  • (Boolean)


101
102
103
# File 'lib/nanoc/base/source_data/layout.rb', line 101

def eql?(other)
  self.class == other.class && identifier == other.identifier
end

- (void) freeze

This method returns an undefined value.

Prevents all further modifications to the layout.



69
70
71
72
73
# File 'lib/nanoc/base/source_data/layout.rb', line 69

def freeze
  attributes.freeze_recursively
  identifier.freeze
  raw_content.freeze
end

- (Object) hash



97
98
99
# File 'lib/nanoc/base/source_data/layout.rb', line 97

def hash
  self.class.hash ^ identifier.hash
end

- (Object) inspect



84
85
86
# File 'lib/nanoc/base/source_data/layout.rb', line 84

def inspect
  "<#{self.class} identifier=\"#{identifier}\">"
end

- (Object) marshal_dump



109
110
111
112
113
114
115
# File 'lib/nanoc/base/source_data/layout.rb', line 109

def marshal_dump
  [
    @raw_content,
    @attributes,
    @identifier
  ]
end

- (Object) marshal_load(source)



117
118
119
120
121
# File 'lib/nanoc/base/source_data/layout.rb', line 117

def marshal_load(source)
  @raw_content,
  @attributes,
  @identifier = *source
end

- (Object) mtime

Deprecated.

Access the modification time using layout[:mtime] instead.



124
125
126
# File 'lib/nanoc/base/source_data/layout.rb', line 124

def mtime
  self[:mtime]
end

- (Object) reference

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns an object that can be used for uniquely identifying objects.

Returns:

  • (Object)

    An unique reference to this object



80
81
82
# File 'lib/nanoc/base/source_data/layout.rb', line 80

def reference
  [ type, identifier ]
end

- (Symbol) type

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the type of this object. Will always return :layout, because this is a layout. For items, this method returns :item.

Returns:

  • (Symbol)

    :layout



62
63
64
# File 'lib/nanoc/base/source_data/layout.rb', line 62

def type
  :layout
end