middleman-mdocs 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a35ee2eddd12fc6e7e714025cfced82f0b146d99d5f291ad454d886e1cbfa36d
4
- data.tar.gz: 10bb17e3827afaae875a58986dcc9fbda80b20f9c81a6b1aa2f47f4e5e331381
3
+ metadata.gz: cbfbd40e49f58b11ba5a574c16976c4c13d74bffbc931a9600470ec8ea54cbe9
4
+ data.tar.gz: 409e96bc9d7e9023f15fc23b2d79bb7870387018bec1d2ec96142010a1bc266f
5
5
  SHA512:
6
- metadata.gz: b86385fb5f48aff00ee5e14ee1fce4eba3b2de6ea6fd35525b07afef04ab84fdde34e8b9acc802cc2675d5e5abaa25af3546605a503e155ecbf118d938cc6774
7
- data.tar.gz: a36b0d3dafdf1c16d6a0370b8b3c9e3af44435242413dd932e154a28ff31390a4fc98dcd856cc3d104d65ff2f030f3d545d519088506b8cb772925d727bf1b7c
6
+ metadata.gz: 2547991a43fea03ad9c614548926bfe060d4bc46cc6908dbba07180238b9e97b64ac84184f8f841b346b0ab792fddd18d9262d2f12a6f625ef86a853e4013d07
7
+ data.tar.gz: 937f5865c60c4155ea4be1f7702a3bd44d1c8177ebd9ee35adfefaf9462f7283e4829f4f5a94f5db65268389bca155272de56807b25fe949e6cf668939d52443
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- middleman-mdocs (0.1.6)
4
+ middleman-mdocs (0.1.8)
5
5
  activesupport
6
6
  awesome_print
7
7
  kramdown
@@ -7,7 +7,7 @@ module ::Middleman
7
7
  ORIGINAL_RENDER = Engine.fetch_from(self).decorated_methods_for(:instance_methods, :render)[0].method.instance_variable_get('@method')
8
8
 
9
9
  def render(locs, opts, context, &block)
10
- return ORIGINAL_RENDER.bind(self).call(locs, opts, context, &block) if locs[:rack]
10
+ return ORIGINAL_RENDER.bind(self).call(locs, opts, context, &block) # if locs[:rack]
11
11
 
12
12
  cache_key = Digest::MD5.hexdigest("#{locs.to_h.to_json}_#{opts.to_h.to_json}")
13
13
 
@@ -21,11 +21,25 @@ module MiddlemanMdocs
21
21
  def html?
22
22
  @html ||= destination_path.end_with?('.html')
23
23
  end
24
-
24
+
25
25
  def ready?
26
26
  mdocs.ready?
27
27
  end
28
28
 
29
+ def touch
30
+ @updated = SecureRandom.hex
31
+ end
32
+
33
+ def data
34
+ $data_cache ||= {}
35
+ $data_cache[page_id] ||= super
36
+ end
37
+
38
+ def metadata
39
+ $metadata_cache ||= {}
40
+ $metadata_cache[destination_path] ||= super
41
+ end
42
+
29
43
  def copy_from(other)
30
44
  resource = self
31
45
  unless @patched
@@ -70,12 +84,8 @@ module MiddlemanMdocs
70
84
  (mdocs.dependencies(self).map(&:timestamp) + [File.mtime(File.realdirpath(source_file)), File.mtime(source_file)]).max
71
85
  end
72
86
 
73
- def cache_key
74
- "#{page_id}/#{timestamp}/"
75
- end
76
-
77
87
  def title
78
- with_cache(:title, @updated) do
88
+ with_cache(:title) do
79
89
  data[:title] || metadata[:title] || toc&.children&.first&.raw_text
80
90
  end
81
91
  end
@@ -87,11 +97,11 @@ module MiddlemanMdocs
87
97
  end
88
98
 
89
99
  def text
90
- force_render if !metadata[:ignore] && html?
100
+ force_render(:text) if !metadata[:ignore] && html?
91
101
  end
92
102
 
93
103
  def tags
94
- with_cache(:tags, @updated) do
104
+ with_cache(:tags) do
95
105
  guard_recursive('tags', page_id, []) do |_key|
96
106
  text
97
107
  end
@@ -101,14 +111,14 @@ module MiddlemanMdocs
101
111
  end
102
112
 
103
113
  def keywords
104
- with_cache(:keywords, @updated) do
114
+ with_cache(:keywords) do
105
115
  options[:keywords] =
106
116
  ::MiddlemanMdocs::Resource.normalize_keywords(tags, options[:keywords], data[:keywords], metadata[:keywords])
107
117
  end
108
118
  end
109
119
 
110
120
  def toc
111
- with_cache(:toc, @updated) do
121
+ with_cache(:toc) do
112
122
  if metadata[:ignore] || !html?
113
123
  nil
114
124
  else
@@ -131,7 +141,7 @@ module MiddlemanMdocs
131
141
  added = ::MiddlemanMdocs::Resource.normalize_tags(args)
132
142
  return if (added - (options[:tags] || [])).empty?
133
143
 
134
- @updated = SecureRandom.hex
144
+ cache_reset(:tags)
135
145
  options[:tags] = ::MiddlemanMdocs::Resource.normalize_tags(options[:tags], data[:tags], metadata[:tags], added)
136
146
  end
137
147
 
@@ -141,7 +151,7 @@ module MiddlemanMdocs
141
151
  added = ::MiddlemanMdocs::Resource.normalize_keywords(args)
142
152
  return if (added - (options[:keywords] || [])).empty?
143
153
 
144
- @updated = SecureRandom.hex
154
+ cache_reset(:keywords)
145
155
  options[:keywords] =
146
156
  ::MiddlemanMdocs::Resource.normalize_keywords(options[:tags], options[:keywords], data[:keywords], metadata[:keywords],
147
157
  added)
@@ -167,32 +177,66 @@ module MiddlemanMdocs
167
177
  super.force_encoding(Encoding.default_external)
168
178
  end
169
179
 
170
- def force_render
171
- render({ layout: false }, { current_path: path, force_current_page: self })
180
+ def force_render key = :force
181
+ render({ layout: false, key: key}, { current_path: path, force_current_page: self })
172
182
  end
173
183
 
174
184
  def render(opts = {}, locs = {})
175
- return super # cache now work on FileRenderer level
176
-
177
- #old cache impl
178
185
  return super if nocache? || locs.has_key?('rack') || locs.has_key?(:rack)
179
-
186
+
180
187
  with_cache(Digest::MD5.hexdigest(opts.to_json + locs.to_json) + 'render') do
181
188
  # puts "REFRESH: #{binary?} #{page_id}: #{opts.to_json + locs.to_json}"
182
189
  super
183
190
  end
184
191
  end
185
192
 
193
+ def cache_key(*key)
194
+ "#{page_id}/#{timestamp}/#{key.map(&:to_s).sort.join('_')}"
195
+ end
196
+
186
197
  private
187
198
 
199
+ PARTIAL_RX = ['partial', 'include', 'render', 'merge'].map do |token|
200
+ /\b#{token}\b/
201
+ end
202
+
188
203
  def nocache?
189
- binary? || metadata[:ignore] || metadata[:nocache] || data[:nocache]
204
+ tmpl = with_cache(:noacahe, expires_in: 1.minute) do
205
+ file_descriptor.try(:read).then do |content|
206
+ false if content.nil?
207
+ PARTIAL_RX.any? do |rx|
208
+ content.match(rx)
209
+ end
210
+ end
211
+ end
212
+
213
+ #r = binary? || metadata[:ignore] || metadata[:nocache] || data[:nocache] || tmpl
214
+ r = binary? || metadata[:nocache] || data[:nocache] || tmpl
215
+
216
+ # if r
217
+ # puts "NOCACHE#{page_id}: #{r}"
218
+ # puts "b:#{binary?}"
219
+ # #puts "i:#{metadata[:ignore]}"
220
+ # puts "c:#{metadata[:nocache]}"
221
+ # puts "d:#{data[:nocache]}"
222
+ # puts "t:#{tmpl}"
223
+ # end
224
+
225
+ r
226
+ end
227
+
228
+
229
+
230
+ def cache_reset(*key)
231
+ extension.cache.delete([cache_key(key)])
190
232
  end
191
233
 
192
- def with_cache(*key, &block)
193
- extension.cache.fetch([cache_key, *key], &block)
234
+ def with_cache(*key, **opts, &block)
235
+ extension.cache.fetch([cache_key(key)], **opts, &block)
194
236
  end
195
237
 
238
+
239
+
196
240
  def custom_deep_merge!(left, right)
197
241
  left.merge!(right) do |_key, this_val, other_val|
198
242
  if this_val.is_a?(Hash) && other_val.is_a?(Hash)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiddlemanMdocs
4
- VERSION = '0.1.7'
4
+ VERSION = '0.1.8'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-mdocs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samoylenko Yuri
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-11-15 00:00:00.000000000 Z
12
+ date: 2022-11-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -222,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
222
  - !ruby/object:Gem::Version
223
223
  version: '0'
224
224
  requirements: []
225
- rubygems_version: 3.2.3
225
+ rubygems_version: 3.1.4
226
226
  signing_key:
227
227
  specification_version: 4
228
228
  summary: Extension for Middleman