Class: Middleman::Sitemap::Resource
- Inherits:
-
Object
- Object
- Middleman::Sitemap::Resource
- Includes:
- Extensions::Traversal
- Defined in:
- lib/middleman-core/sitemap/resource.rb
Overview
Sitemap Resource class
Instance Attribute Summary collapse
- #app ⇒ Middleman::Application readonly
-
#path ⇒ String
readonly
The source path of this resource (relative to the source directory, without template extensions).
- #store ⇒ Middleman::Sitemap::Store readonly
Instance Method Summary collapse
-
#add_metadata(metadata = {}, &block) ⇒ Object
Merge in new metadata specific to this resource.
-
#binary? ⇒ Boolean
Whether the source file is binary.
-
#destination_path ⇒ String
Get the output/preview URL for this resource.
-
#destination_path=(path) ⇒ void
Set the output/preview URL for this resource.
-
#ext ⇒ String
Extension of the path (i.e. ‘.js’).
-
#initialize(store, path, source_file = nil) ⇒ Resource
constructor
Initialize resource with parent store and URL.
-
#metadata ⇒ Hash
Get the metadata for both the current source_file and the current path.
-
#render(opts = {}, locs = {}, &block) ⇒ String
Render this resource.
-
#source_file ⇒ String
Set the on-disk source file for this resource attr_reader :source_file.
-
#template? ⇒ Boolean
Whether this resource has a template file.
-
#url ⇒ String
A path without the directory index - so foo/index.html becomes just foo.
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
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/middleman-core/sitemap/resource.rb', line 36 def initialize(store, path, source_file=nil) @store = store @app = @store.app @path = path @source_file = source_file @destination_paths = [@path] @local_metadata = { :options => {}, :locals => {}, :page => {}, :blocks => [] } end |
Instance Attribute Details
#app ⇒ Middleman::Application (readonly)
13 14 15 |
# File 'lib/middleman-core/sitemap/resource.rb', line 13 def app @app end |
#path ⇒ String (readonly)
The source path of this resource (relative to the source directory, without template extensions)
22 23 24 |
# File 'lib/middleman-core/sitemap/resource.rb', line 22 def path @path end |
#store ⇒ Middleman::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.
78 79 80 81 82 83 84 |
# File 'lib/middleman-core/sitemap/resource.rb', line 78 def (={}, &block) if .has_key?(:blocks) @local_metadata[:blocks] << .delete(:blocks) end @local_metadata.deep_merge!() @local_metadata[:blocks] << block if block_given? end |
#binary? ⇒ Boolean
Whether the source file is binary.
147 148 149 |
# File 'lib/middleman-core/sitemap/resource.rb', line 147 def binary? ::Middleman::Util.binary?(source_file) end |
#destination_path ⇒ String
Get the output/preview URL for this resource
88 89 90 |
# File 'lib/middleman-core/sitemap/resource.rb', line 88 def destination_path @destination_paths.last end |
#destination_path=(path) ⇒ void
This method returns an undefined value.
Set the output/preview URL for this resource
95 96 97 |
# File 'lib/middleman-core/sitemap/resource.rb', line 95 def destination_path=(path) @destination_paths << path end |
#ext ⇒ String
Extension of the path (i.e. ‘.js’)
101 102 103 |
# File 'lib/middleman-core/sitemap/resource.rb', line 101 def ext File.extname(path) end |
#metadata ⇒ Hash
Get the metadata for both the current source_file and the current path
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/middleman-core/sitemap/resource.rb', line 56 def result = store.(path).dup = store.(source_file).dup if .has_key?(:blocks) result[:blocks] << .delete(:blocks) end result.deep_merge!() = @local_metadata.dup if .has_key?(:blocks) result[:blocks] << .delete(:blocks) end result.deep_merge!() result[:blocks] = result[:blocks].flatten.compact result end |
#render(opts = {}, locs = {}, &block) ⇒ String
Render this resource
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/middleman-core/sitemap/resource.rb', line 107 def render(opts={}, locs={}, &block) if !template? return app.template_data_for_file(source_file) end relative_source = Pathname(source_file).relative_path_from(Pathname(app.root)) instrument "render.resource", :path => relative_source do md = .dup opts = md[:options].deep_merge(opts) locs = md[:locals].deep_merge(locs) # Forward remaining data to helpers if md.has_key?(:page) app.data.store("page", md[:page]) end blocks = md[:blocks].dup rescue [] blocks << block if block_given? app.current_path ||= self.destination_path app.render_template(source_file, locs, opts, blocks) end end |
#source_file ⇒ String
Set the on-disk source file for this resource attr_reader :source_file
28 29 30 |
# File 'lib/middleman-core/sitemap/resource.rb', line 28 def source_file @source_file || get_source_file end |
#template? ⇒ Boolean
Whether this resource has a template file
49 50 51 52 |
# File 'lib/middleman-core/sitemap/resource.rb', line 49 def template? return false if source_file.nil? !::Tilt[source_file].nil? end |
#url ⇒ String
A path without the directory index - so foo/index.html becomes just foo. Best for linking.
135 136 137 138 139 140 141 142 |
# File 'lib/middleman-core/sitemap/resource.rb', line 135 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 |