glim 0.1.4 → 0.1.5

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: 1c833f6ae8f777fea4bea3921973658abb6d2047e5c8e392551e95af595e0b94
4
- data.tar.gz: 20eed39068fed6280b3711a93db863769d7e2dddd56594a50e6325c253b0ff30
3
+ metadata.gz: 01bacc2f65ddafb3ecb82c6b1fed2931b6e48ded35fbd417c83e1a650076dd6f
4
+ data.tar.gz: 5353e5cdc32103ce3b372738cba0df2beeaef36559255d38ede8186bfe420d33
5
5
  SHA512:
6
- metadata.gz: 0d5900a018a77e3840a89e4a7e552d49565ad5c48b7075ce90f9cd53f5068488b6fee8fbfcc9c5793e847c6c5c05ab6e6fe98485afa5f8b82afe19f8ca5ae5fe
7
- data.tar.gz: 6a42db7d9f865b6cf444ab4317db99560631a0ad48829ff208d14e7ac63c95f76490ef6b84b48055f8452c3a34c48e5825f3b2f64234d066a99c72044039f599
6
+ metadata.gz: 22c5bf3b00f89abeabad4dcfcb94023fdd1b206258d4c060a117c94a5326d014f618031c00050c5e80408e3077944d239c1befc593d7840a932ef0c36c459d25
7
+ data.tar.gz: dfd1a77d34431cff2c0d0ed566f60c9ce59250f9ca9a39b4938b9c7f0a04b97fd44709c9aff970087294ec31a87bc47020587b91259873fab961a2ca11098139
data/bin/glim CHANGED
@@ -19,8 +19,8 @@ require 'mercenary'
19
19
  if File.exists?('Gemfile')
20
20
  begin
21
21
  require 'bundler/setup'
22
- rescue LoadError => e
23
- $log.warn("Unable to load Bundler but directory contains a Gemfile")
22
+ rescue LoadError
23
+ $log.warn("Unable to load Bundler: Ignoring ./Gemfile")
24
24
  end
25
25
  end
26
26
 
@@ -51,9 +51,13 @@ module Util
51
51
 
52
52
  def titlecase(input)
53
53
  unless input.nil?
54
- words = /\A\p{^Lower}+\z|\b\p{Upper}\p{^Upper}+?\b/
55
- upcase = /^([\W\d]*)(\w[-\w]*)|\b((?!(?:else|from|over|then|when)\b)\w[-\w]{3,}|\w[-\w]*[\W\d]*$)/
56
- input.gsub(/[ _-]+/, ' ').gsub(words) { $&.downcase }.gsub(upcase) { $1 ? ($1 + $2[0].upcase + $2[1..-1]) : ($&[0].upcase + $&[1..-1]) }
54
+ input.gsub(/[ _-]+/, ' ').gsub(/(\A)?(\w)(\w*)([^\s]*)(\z)?/) do |match|
55
+ if $1 || $5 || $3.size > 2
56
+ $2.upcase + $3 + $4
57
+ else
58
+ $&
59
+ end
60
+ end
57
61
  end
58
62
  end
59
63
 
@@ -170,14 +174,18 @@ module Glim
170
174
  end
171
175
 
172
176
  def transform(content, page, options)
173
- content
177
+ if options[:filters].empty?
178
+ content
179
+ else
180
+ options[:filters].shift.transform(content, page, options)
181
+ end
174
182
  end
175
183
  end
176
184
 
177
185
  module Filters
178
186
  class Liquid < Glim::Filter
179
187
  transforms 'liquid' => '*'
180
- priority :higher
188
+ priority :lower
181
189
 
182
190
  def initialize(site)
183
191
  @site, @options = site, {
@@ -220,7 +228,7 @@ module Glim
220
228
 
221
229
  class Layout < Glim::Filter
222
230
  transforms '*' => 'output'
223
- priority :lowest
231
+ priority :lower
224
232
 
225
233
  def initialize(site)
226
234
  @site, @options = site, options = {
@@ -450,7 +458,7 @@ module Glim
450
458
  end
451
459
 
452
460
  def output_ext
453
- pipeline.output_ext(self.extname) || self.extname
461
+ frontmatter? && pipeline.output_ext(self.extname) || self.extname
454
462
  end
455
463
 
456
464
  # ==============
@@ -869,7 +877,7 @@ module Glim
869
877
  chunks = items.each_slice(per_page)
870
878
  pages = chunks.each_with_index.map do |posts, i|
871
879
  paginator = Paginator.new(posts, i + 1)
872
- if i == 0
880
+ if i.zero?
873
881
  file.merge_data!({ 'paginator' => paginator })
874
882
  file
875
883
  else
@@ -1207,7 +1215,7 @@ module Glim
1207
1215
  end
1208
1216
 
1209
1217
  @transformations = temp.sort_by do |filter, from, to|
1210
- [ -filter.class.priority, (from.partition('.').first != to.partition('.').first ? +1 : -1) ]
1218
+ [ (from == '*' ? +1 : -1), -filter.class.priority, (from.partition('.').first != to.partition('.').first ? +1 : -1) ]
1211
1219
  end
1212
1220
 
1213
1221
  @cache = {}
@@ -1253,8 +1261,16 @@ module Glim
1253
1261
  to
1254
1262
  end
1255
1263
 
1256
- result_nodes << PipelineNode.new(filter, from, to)
1257
- transformations.delete(transformation)
1264
+ filters = [ filter ]
1265
+
1266
+ if from.partition('.').first != to.partition('.').first
1267
+ filters = transformations.select { |_, filter_from, filter_to| from == filter_from && to == filter_to }.map { |f, _, _| f }
1268
+ transformations.reject! { |_, filter_from, filter_to| from == filter_from && to = filter_to }
1269
+ else
1270
+ transformations.delete(transformation)
1271
+ end
1272
+
1273
+ result_nodes << PipelineNode.new(filters, from, to)
1258
1274
  end
1259
1275
  result_nodes
1260
1276
  end
@@ -1262,18 +1278,19 @@ module Glim
1262
1278
  class PipelineNode
1263
1279
  attr_reader :from_format, :to_format
1264
1280
 
1265
- def initialize(filter, from_format, to_format)
1266
- @filter, @from_format, @to_format = filter, from_format, to_format
1281
+ def initialize(filters, from_format, to_format)
1282
+ @filters, @from_format, @to_format = filters, from_format, to_format
1267
1283
  end
1268
1284
 
1269
1285
  def dup
1270
- PipelineNode.new(@filter, @from_format, @to_format)
1286
+ PipelineNode.new(@filters, @from_format, @to_format)
1271
1287
  end
1272
1288
 
1273
1289
  def transform(content, page, options)
1274
1290
  if @cache.nil?
1275
- Profiler.group(@filter.class.name) do
1276
- @cache = @filter.transform(content, page, options).freeze
1291
+ filter, *filters = @filters
1292
+ Profiler.group(filter.class.name) do
1293
+ @cache = filter.transform(content, page, options.merge({ :filters => filters })).freeze
1277
1294
  end
1278
1295
  end
1279
1296
  @cache
@@ -28,20 +28,20 @@ module Glim
28
28
 
29
29
  [ [ 'Created', created ], [ 'Deleted', deleted ], [ 'Updated', updated ] ].each do |label, files|
30
30
  unless files.empty?
31
- STDERR.puts "==> #{label} #{files.count} #{files.count == 1 ? 'File' : 'Files'}"
31
+ STDERR.puts "==> #{label} #{files.size} #{files.size == 1 ? 'File' : 'Files'}"
32
32
  STDERR.puts files.map { |path| Util.relative_path(path, output_dir) }.sort.join(', ')
33
33
  end
34
34
  end
35
35
 
36
36
  unless warnings.empty?
37
- STDERR.puts "==> #{warnings.count} #{warnings.count == 1 ? 'Warnings' : 'Warning'}"
37
+ STDERR.puts "==> #{warnings.size} #{warnings.size == 1 ? 'Warning' : 'Warnings'}"
38
38
  warnings.each do |message|
39
39
  STDERR.puts message
40
40
  end
41
41
  end
42
42
 
43
43
  unless errors.empty?
44
- STDERR.puts "==> Stopped After #{errors.count} #{errors.count == 1 ? 'Error' : 'Errors'}"
44
+ STDERR.puts "==> Stopped After #{errors.size} #{errors.size == 1 ? 'Error' : 'Errors'}"
45
45
  errors.each do |arr|
46
46
  arr.each_with_index do |err, i|
47
47
  STDERR.puts err.gsub(/^/, ' '*i)
@@ -63,7 +63,7 @@ module Glim
63
63
  end
64
64
  else
65
65
  deleted = delete_items(files, dirs)
66
- STDOUT.puts "Deleted #{deleted.count} #{deleted.count == 1 ? 'File' : 'Files'}."
66
+ STDOUT.puts "Deleted #{deleted.size} #{deleted.size == 1 ? 'File' : 'Files'}."
67
67
  end
68
68
  end
69
69
 
@@ -135,6 +135,8 @@ module Glim
135
135
  [ files, dirs ]
136
136
  end
137
137
 
138
+ private_class_method :items_in_directory
139
+
138
140
  def self.delete_items(files, dirs, keep: [])
139
141
  res = []
140
142
 
@@ -150,7 +152,7 @@ module Glim
150
152
  end
151
153
  end
152
154
 
153
- dirs.sort.reverse.each do |path|
155
+ dirs.sort.reverse_each do |path|
154
156
  begin
155
157
  Dir.rmdir(path)
156
158
  rescue Errno::ENOTEMPTY => e
@@ -163,6 +165,8 @@ module Glim
163
165
  res
164
166
  end
165
167
 
168
+ private_class_method :delete_items
169
+
166
170
  def self.generate(output_dir, number_of_jobs, files, backtrace: false)
167
171
  Profiler.run("Creating pages") do
168
172
  if number_of_jobs == 1
@@ -173,6 +177,8 @@ module Glim
173
177
  end
174
178
  end
175
179
 
180
+ private_class_method :generate
181
+
176
182
  def self.generate_async(output_dir, files, number_of_jobs, backtrace: false)
177
183
  total = files.size
178
184
  slices = number_of_jobs.times.map do |i|
@@ -224,10 +230,12 @@ module Glim
224
230
  [ created, updated, warnings, errors ]
225
231
  end
226
232
 
233
+ private_class_method :generate_async
234
+
227
235
  def self.generate_subset(output_dir, files, backtrace: false)
228
236
  created, updated, warnings, errors = [], [], [], []
229
237
 
230
- for file in files do
238
+ files.each do |file|
231
239
  dest = file.output_path(output_dir)
232
240
  file_exists = File.exists?(dest)
233
241
 
@@ -259,5 +267,7 @@ module Glim
259
267
 
260
268
  [ created, updated, warnings, errors ]
261
269
  end
270
+
271
+ private_class_method :generate_subset
262
272
  end
263
273
  end
@@ -4,6 +4,8 @@ require 'liquid'
4
4
  module Glim
5
5
  module LiquidFilters
6
6
  def markdownify(input)
7
+ return if input.nil?
8
+
7
9
  Profiler.group('markdownify') do
8
10
  if defined?(MultiMarkdown)
9
11
  MultiMarkdown.new("\n" + input, 'snippet', 'no_metadata').to_html
@@ -12,7 +14,7 @@ module Glim
12
14
  document = Kramdown::Document.new(input, options)
13
15
  @context['warnings'].concat(document.warnings) if options[:show_warnings] && @context['warnings']
14
16
  document.to_html
15
- end unless input.nil?
17
+ end
16
18
  end
17
19
  end
18
20
 
@@ -29,18 +31,24 @@ module Glim
29
31
  end
30
32
 
31
33
  def absolute_url(path)
32
- unless path.nil?
33
- site, page = URI(@context['site']['url']), URI(@context['page']['url'])
34
- host, port = @context['site']['host'], @context['site']['port']
35
- if page.relative? || (site.host == host && site.port == port)
36
- site.merge(URI(path)).to_s
37
- else
38
- page.merge(URI(path)).to_s
39
- end
34
+ return if path.nil?
35
+
36
+ site, page = URI(@context['site']['url']), URI(@context['page']['url'])
37
+ host, port = @context['site']['host'], @context['site']['port']
38
+
39
+ if page.relative? || (site.host == host && site.port == port)
40
+ site.merge(URI(path)).to_s
41
+ else
42
+ page.merge(URI(path)).to_s
40
43
  end
41
44
  end
42
45
 
43
46
  def relative_url(other)
47
+ return if other.nil?
48
+
49
+ site, page = URI(@context['site']['url']), URI(@context['page']['url'])
50
+ host, port = @context['site']['host'], @context['site']['port']
51
+
44
52
  helper = lambda do |base, other|
45
53
  base_url, other_url = URI(base), URI(other)
46
54
  if other_url.absolute? && base_url.host == other_url.host
@@ -49,24 +57,22 @@ module Glim
49
57
  other
50
58
  end
51
59
  end
52
-
53
- unless other.nil?
54
- site, page = URI(@context['site']['url']), URI(@context['page']['url'])
55
- host, port = @context['site']['host'], @context['site']['port']
56
- if page.relative? || (site.host == host && site.port == port)
57
- helper.call(@context['site']['url'], other)
58
- else
59
- helper.call(@context['page']['url'], other)
60
- end
60
+
61
+ if page.relative? || (site.host == host && site.port == port)
62
+ helper.call(@context['site']['url'], other)
63
+ else
64
+ helper.call(@context['page']['url'], other)
61
65
  end
62
66
  end
63
67
 
64
68
  def path_to_url(input)
69
+ return if input.nil?
70
+
65
71
  if file = Jekyll.sites.last.links[input]
66
72
  file.url
67
73
  else
68
74
  raise Glim::Error.new("path_to_url: No file found for: #{input}")
69
- end unless input.nil?
75
+ end
70
76
  end
71
77
 
72
78
  def date_to_xmlschema(input)
@@ -104,17 +110,15 @@ module Glim
104
110
  end
105
111
 
106
112
  def group_by_exp(input, variable, expression)
107
- if input.respond_to?(:group_by)
108
- parsed_expr = Liquid::Variable.new(expression, Liquid::ParseContext.new)
109
- @context.stack do
110
- groups = input.group_by do |item|
111
- @context[variable] = item
112
- parsed_expr.render(@context)
113
- end
114
- groups.map { |key, value| { "name" => key, "items" => value, "size" => value.size } }
113
+ return input unless input.respond_to?(:group_by)
114
+
115
+ parsed_expr = Liquid::Variable.new(expression, Liquid::ParseContext.new)
116
+ @context.stack do
117
+ groups = input.group_by do |item|
118
+ @context[variable] = item
119
+ parsed_expr.render(@context)
115
120
  end
116
- else
117
- input
121
+ groups.map { |key, value| { "name" => key, "items" => value, "size" => value.size } }
118
122
  end
119
123
  end
120
124
 
@@ -80,7 +80,7 @@ module WebSocket
80
80
  running = false
81
81
  break
82
82
  end
83
- $log.debug("Send ‘#{message}’ to #{connections.count} WebSocket #{connections.count == 1 ? 'client' : 'clients'}") unless connections.empty?
83
+ $log.debug("Send ‘#{message}’ to #{connections.size} WebSocket #{connections.size == 1 ? 'client' : 'clients'}") unless connections.empty?
84
84
  connections.each do |conn|
85
85
  begin
86
86
  conn.puts(message)
@@ -100,13 +100,13 @@ class Profiler
100
100
  STDERR.puts indent(level) + (@format % @duration)
101
101
 
102
102
  if @groups
103
- @groups.sort_by { |group, info| info[:duration] }.reverse.each do |group, info|
103
+ @groups.sort_by { |group, info| info[:duration] }.reverse_each do |group, info|
104
104
  STDERR.puts indent(level+1) + "[#{group}: %.3f seconds, called #{info[:count]} time(s), %.3f seconds/time]" % [ info[:duration], info[:duration] / info[:count] ]
105
105
  end
106
106
  end
107
107
 
108
108
  if @children
109
- @children.sort_by { |child| child.duration }.reverse.each do |child|
109
+ @children.sort_by { |child| child.duration }.reverse_each do |child|
110
110
  child.dump(level + 1)
111
111
  end
112
112
  end
@@ -1,3 +1,3 @@
1
1
  module Glim
2
- VERSION = '0.1.4'
2
+ VERSION = '0.1.5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allan Odgaard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-28 00:00:00.000000000 Z
11
+ date: 2018-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mercenary