Class: Middleman::Sitemap::Resource

Inherits:
Object
  • Object
show all
Includes:
Extensions::ContentType, Extensions::Traversal
Defined in:
lib/middleman-core/sitemap/resource.rb

Overview

Sitemap Resource class

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Extensions::ContentType

#content_type

Methods included from Extensions::Traversal

#children, #directory_index?, #eponymous_directory?, #eponymous_directory_path, #parent, #siblings

Constructor Details

#initialize(store, path, source_file = nil) ⇒ Resource

Initialize resource with parent store and URL

Parameters:



40
41
42
43
44
45
46
47
48
# File 'lib/middleman-core/sitemap/resource.rb', line 40

def initialize(store, path, source_file=nil)
  @store       = store
  @app         = @store.app
  @path        = path
  @source_file = source_file
  @destination_path = @path

  @local_metadata = { options: {}, locals: {}, page: {}, blocks: [] }
end

Instance Attribute Details

#appMiddleman::Application (readonly)



13
14
15
# File 'lib/middleman-core/sitemap/resource.rb', line 13

def app
  @app
end

#destination_pathString

The output path for this resource

Returns:

  • (String)


26
27
28
# File 'lib/middleman-core/sitemap/resource.rb', line 26

def destination_path
  @destination_path
end

#pathString (readonly)

The source path of this resource (relative to the source directory, without template extensions)

Returns:

  • (String)


22
23
24
# File 'lib/middleman-core/sitemap/resource.rb', line 22

def path
  @path
end

#storeMiddleman::Sitemap::Store (readonly)



17
18
19
# File 'lib/middleman-core/sitemap/resource.rb', line 17

def store
  @store
end

Instance Method Details

#add_metadata(metadata = {}, &block) ⇒ Object

Merge in new metadata specific to this resource.

Parameters:

  • metadata (Hash) (defaults to: {})

    A metadata block like provides_metadata_for_path takes



76
77
78
79
80
81
# File 'lib/middleman-core/sitemap/resource.rb', line 76

def (={}, &block)
   = .dup
  @local_metadata[:blocks] += .delete(:blocks) if .key?(:blocks)
  @local_metadata.deep_merge!()
  @local_metadata[:blocks] += [block] if block_given?
end

#binary?Boolean

Whether the source file is binary.

Returns:

  • (Boolean)


146
147
148
# File 'lib/middleman-core/sitemap/resource.rb', line 146

def binary?
  ::Middleman::Util.binary?(source_file)
end

#extString

Extension of the path (i.e. ‘.js’)

Returns:

  • (String)


85
86
87
# File 'lib/middleman-core/sitemap/resource.rb', line 85

def ext
  File.extname(path)
end

#metadataHash

Get the metadata for both the current source_file and the current path

Returns:

  • (Hash)


59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/middleman-core/sitemap/resource.rb', line 59

def 
  result = store.(path).dup

  file_meta = store.(source_file).dup
  result[:blocks] += file_meta.delete(:blocks) if file_meta.key?(:blocks)
  result.deep_merge!(file_meta)

  local_meta = @local_metadata.dup
  result[:blocks] += local_meta.delete(:blocks) if local_meta.key?(:blocks)
  result.deep_merge!(local_meta)

  result[:blocks] = result[:blocks].flatten.compact
  result
end

#render(opts = {}, locs = {}, &block) ⇒ String

Render this resource

Returns:

  • (String)


95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/middleman-core/sitemap/resource.rb', line 95

def render(opts={}, locs={}, &block)
  return app.template_data_for_file(source_file) unless template?

  relative_source = Pathname(source_file).relative_path_from(Pathname(app.root))

  instrument 'render.resource', path: relative_source, destination_path: destination_path  do
    md   = .dup
    opts = md[:options].deep_merge(opts)

    # Pass "renderer_options" hash from frontmatter along to renderer
    if md[:page]['renderer_options']
      opts[:renderer_options] = {}
      md[:page]['renderer_options'].each do |k, v|
        opts[:renderer_options][k.to_sym] = v
      end
    end

    locs = md[:locals].deep_merge(locs)

    # Forward remaining data to helpers
    app.data.store('page', md[:page]) if md.key?(:page)

    blocks = Array(md[:blocks]).dup
    blocks << block if block_given?

    app.current_path ||= destination_path

    # Certain output file types don't use layouts
    unless opts.key?(:layout)
      opts[:layout] = false if %w(.js .json .css .txt).include?(ext)
    end

    app.render_template(source_file, locs, opts, blocks)
  end
end

#request_pathObject



89
90
91
# File 'lib/middleman-core/sitemap/resource.rb', line 89

def request_path
  destination_path
end

#source_fileString

Set the on-disk source file for this resource attr_reader :source_file

Returns:

  • (String)


32
33
34
# File 'lib/middleman-core/sitemap/resource.rb', line 32

def source_file
  @source_file || get_source_file
end

#template?Boolean

Whether this resource has a template file

Returns:

  • (Boolean)


52
53
54
55
# File 'lib/middleman-core/sitemap/resource.rb', line 52

def template?
  return false if source_file.nil?
  !::Tilt[source_file].nil?
end

#urlString

A path without the directory index - so foo/index.html becomes just foo. Best for linking.

Returns:

  • (String)


134
135
136
137
138
139
140
141
# File 'lib/middleman-core/sitemap/resource.rb', line 134

def url
  url_path = destination_path
  if app.strip_index_file
    url_path = url_path.sub(/(^|\/)#{Regexp.escape(app.index_file)}$/,
                            app.trailing_slash ? '/' : '')
  end
  File.join(app.respond_to?(:http_prefix) ? app.http_prefix : '/', url_path)
end