dimples 10.0.0 → 10.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18bfc09d96924fc5ed5ed12f9d939ad035feaa2ede3f67b0045bd524da5d0d66
4
- data.tar.gz: 224f9dbecde7c7a57fc11d5843898fd2f3b553acc7448cd7639f73fb8c8d7fad
3
+ metadata.gz: fcf53e67d092ae60028fef082c0741343badb88483bc2d1c6b19fea30d0a5aca
4
+ data.tar.gz: bb884858e735d7e1c23c91a17c7f99ab8f4cddffa6b871530b85194147ac7fd4
5
5
  SHA512:
6
- metadata.gz: 6eb46d1192a47f326865c567372c1dc1a5d12f8c93a932d99c7d5c1f2269abbe5cef6a2511eab752938cabf276c92e21f4cf010fac6c206d71674cafd62213b9
7
- data.tar.gz: 4d360af4ddf70adeea836fa311f63bdc14cc5184ecd042b30a7b88670523a1611db707bd42ea66e76494d4b46466c7cc693ee40391c6d9b7a97b74f94db5eae5
6
+ metadata.gz: 8735afa42f1a1c921764bcc5a80babfa3620662c55beddd13f8825e19807bec00c5e1de835ff121221423b1c9dd04615456078461ba1be1ac28c85545b42af09
7
+ data.tar.gz: a0ee67d073361ad66fbfa49f545b39b9753571d053b3d4cbab1fbbb54a0799a46cb53569c03dd6c3bbcc506b501ba758a40554fcc4a1fecf4a1118c709a225f5
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dimples
4
+ # A class representing metadata passed into a template for rendering.
5
+ class Metadata
6
+ attr_reader :keys
7
+
8
+ def initialize(source)
9
+ source.each do |key, value|
10
+ self.class.send(:attr_reader, key)
11
+ instance_variable_set("@#{key}", build(value))
12
+ end
13
+
14
+ @keys = source.keys
15
+ end
16
+
17
+ def build(item)
18
+ case item
19
+ when Array
20
+ item.map { |i| build(i) }
21
+ when Hash
22
+ item.empty? ? item : Metadata.new(item)
23
+ else
24
+ item
25
+ end
26
+ end
27
+
28
+ def method_missing(_method_name, *_args)
29
+ nil
30
+ end
31
+
32
+ def respond_to_missing?(_method_name, _include_private)
33
+ true
34
+ end
35
+ end
36
+ end
data/lib/dimples/pager.rb CHANGED
@@ -29,7 +29,7 @@ module Dimples
29
29
  (1..@page_count).each do |index|
30
30
  step_to(index)
31
31
 
32
- @site.layouts['posts'].write(
32
+ @site.layouts['posts']&.write(
33
33
  File.join(@site.config[:output][:root], current_page_url, 'index.html'),
34
34
  metadata.merge(pagination: self.metadata, url: current_page_url)
35
35
  )
data/lib/dimples/site.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'fileutils'
4
4
  require 'tilt'
5
5
  require 'date'
6
+ require 'yaml'
6
7
 
7
8
  module Dimples
8
9
  # A class representing a single generated website.
@@ -57,7 +58,7 @@ module Dimples
57
58
  end
58
59
 
59
60
  def metadata
60
- @metadata ||= { posts: posts, categories: categories }
61
+ @metadata ||= Metadata.new(posts: posts, categories: categories)
61
62
  end
62
63
 
63
64
  private
@@ -15,17 +15,22 @@ module Dimples
15
15
  @metadata = default_metadata
16
16
  @contents = File.read(@path)
17
17
 
18
- matches = @contents.match(FRONT_MATTER_PATTERN)
18
+ parse_metadata(@contents)
19
+ end
20
+
21
+ def parse_metadata(contents)
22
+ matches = contents.match(FRONT_MATTER_PATTERN)
19
23
  return unless matches
20
24
 
21
25
  @metadata.merge!(YAML.safe_load(matches[1], symbolize_names: true, permitted_classes: [Date]))
22
26
  @contents = matches.post_match.strip
27
+
28
+ @metadata.each_key do |key|
29
+ self.class.send(:define_method, key.to_sym) { @metadata[key] }
30
+ end
23
31
  end
24
32
 
25
33
  def write(output_path = nil, metadata = {})
26
- metadata[:site] ||= @site
27
- metadata[context_key] ||= self
28
-
29
34
  output = render(metadata)
30
35
 
31
36
  output_path = File.join(output_directory, filename) if output_path.nil?
@@ -35,24 +40,14 @@ module Dimples
35
40
  File.write(output_path, output)
36
41
  end
37
42
 
38
- def render(metadata = {}, body = nil)
39
- output = template.render(context(metadata)) { body }
40
- return output unless @metadata[:layout] && @site.layouts[@metadata[:layout]]
43
+ def render(render_metadata = {}, body = nil)
44
+ render_metadata[:site] ||= @site.metadata
45
+ render_metadata[:page] ||= metadata
41
46
 
42
- @site.layouts[@metadata[:layout]].render(metadata, output)
43
- end
47
+ output = template.render(Metadata.new(render_metadata)) { body }
48
+ return output unless @metadata[:layout] && @site.layouts[@metadata[:layout]]
44
49
 
45
- def context(metadata)
46
- Object.new.tap do |context|
47
- metadata.each { |key, variable| context.instance_variable_set("@#{key}", variable) }
48
- end
49
- end
50
-
51
- def default_metadata
52
- {
53
- layout: nil,
54
- filename: 'index.html'
55
- }
50
+ @site.layouts[@metadata[:layout]].render(render_metadata, output)
56
51
  end
57
52
 
58
53
  def output_directory
@@ -69,16 +64,11 @@ module Dimples
69
64
 
70
65
  private
71
66
 
72
- def context_key
73
- :page
74
- end
75
-
76
- def method_missing(method_name, *_args)
77
- @metadata[method_name] if @metadata.key?(method_name)
78
- end
79
-
80
- def respond_to_missing?(method_name, include_private)
81
- @metadata.key?(method_name) || super
67
+ def default_metadata
68
+ {
69
+ layout: nil,
70
+ filename: 'index.html'
71
+ }
82
72
  end
83
73
  end
84
74
  end
@@ -17,10 +17,6 @@ module Dimples
17
17
 
18
18
  private
19
19
 
20
- def context_key
21
- :post
22
- end
23
-
24
20
  def default_metadata
25
21
  super.tap do |defaults|
26
22
  defaults[:layout] = 'post'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dimples
4
- VERSION = '10.0.0'
4
+ VERSION = '10.1.0'
5
5
  end
data/lib/dimples.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  $LOAD_PATH.unshift(__dir__)
4
4
 
5
5
  require 'dimples/config'
6
+ require 'dimples/metadata'
6
7
  require 'dimples/pager'
7
8
  require 'dimples/site'
8
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dimples
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.0.0
4
+ version: 10.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bogan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-03 00:00:00.000000000 Z
11
+ date: 2024-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: erubi
@@ -63,6 +63,7 @@ files:
63
63
  - bin/dimples
64
64
  - lib/dimples.rb
65
65
  - lib/dimples/config.rb
66
+ - lib/dimples/metadata.rb
66
67
  - lib/dimples/pager.rb
67
68
  - lib/dimples/site.rb
68
69
  - lib/dimples/sources/base.rb