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.gsub(' ', '%20') # handle spaces in filenames
  @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/preview URL 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)


150
151
152
# File 'lib/middleman-core/sitemap/resource.rb', line 150

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

#extString

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

Returns:

  • (String)


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

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)


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
130
131
132
133
# File 'lib/middleman-core/sitemap/resource.rb', line 99

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



93
94
95
# File 'lib/middleman-core/sitemap/resource.rb', line 93

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)


138
139
140
141
142
143
144
145
# File 'lib/middleman-core/sitemap/resource.rb', line 138

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