blog-generator 0.2.1 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/blog-generator/post.rb +33 -13
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '0391794145b3135fa2c3a6736919b3f58742d454'
4
- data.tar.gz: '028a972e33366a76aae5b794308695f6e5f4ed27'
3
+ metadata.gz: 2cf3093b6c8dbf159c433177cf149ee398adc783
4
+ data.tar.gz: bd20c2a6c5889890067f6e20c622b32aa0bec78d
5
5
  SHA512:
6
- metadata.gz: 5e55f5cff6b5c9a7dec508b1e91686edc5c1ac8eb10c4821deb42d5c995ea896f039136a198b46308d84bb0f97f2ea6eab374551fb2f8f49d382fdafe517e5d0
7
- data.tar.gz: f69267f97451399a5f12241ea75d6536381533e6dae90c9df89358c71975567ad5ead5efffacd8afdbe2fca5e373704106481d5f352a2f10f5f5f48046496955
6
+ metadata.gz: 2c6dde16d351c39d026414e0a35170a1d7b93728327c6cbb4329259f35241b06436f426826dc9fda1c88062cd16b169e9999e4a917a931ac65aba60e8823760e
7
+ data.tar.gz: b8c6d66fd754bc063c4332aaed3b1530be6e6c2927be0f170aa3c43e107a3d00d15ed8b49953846e030dfe8b0e6ee1b344ba702be5d18701c9f56edc8bf86e44
@@ -2,6 +2,7 @@ require 'json'
2
2
  require 'date'
3
3
  require 'yaml'
4
4
  require 'nokogiri'
5
+ require 'cgi'
5
6
 
6
7
  module BlogGenerator
7
8
  class Post
@@ -71,18 +72,37 @@ module BlogGenerator
71
72
 
72
73
  def body
73
74
  @body ||= begin
74
- document = nokogiri_raw_document.dup
75
- document.css('#excerpt').remove
76
- document.css('img[src^="/assets/"]').each do |img|
77
- absolute_url = img.attribute('src').value
78
- asset_path = "..#{absolute_url}" # This is extremely shakey, it depends on us being in api.botanicus.me.
79
- if File.exists?(asset_path)
80
- img['src'] = image_binary_data(asset_path)
81
- else
82
- raise "Asset #{asset_path} doesn't exist."
83
- end
75
+ process_body(nokogiri_raw_document.dup)
76
+ end
77
+ end
78
+
79
+ def process_body(document)
80
+ document.css('#excerpt').remove
81
+ document.css('img[src^="/assets/"]').each do |img|
82
+ absolute_url = img.attribute('src').value
83
+ asset_path = "..#{absolute_url}" # This is extremely shakey, it depends on us being in api.botanicus.me.
84
+ if File.exists?(asset_path)
85
+ img['src'] = image_binary_data(asset_path)
86
+ else
87
+ raise "Asset #{asset_path} doesn't exist."
84
88
  end
85
- document.css('body').inner_html.strip
89
+ end
90
+
91
+ document.css('body').inner_html.strip
92
+ end
93
+
94
+ def post_processed_body
95
+ @post_processed_body ||= post_process_body(self.body.to_s)
96
+ end
97
+
98
+ # This is a terrible hack to make unescaped code possible.
99
+ def post_process_body(text)
100
+ regexp = /<code lang="(\w+)">\n?(.*?)<\/code>/m
101
+ original_body_matches = self.raw_body.scan(regexp)
102
+
103
+ text.gsub(regexp).with_index do |pre, index|
104
+ language, code = original_body_matches[index]
105
+ "<pre><code class=\"#{language}\">#{CGI.escapeHTML(code)}</code></pre>"
86
106
  end
87
107
  end
88
108
 
@@ -104,7 +124,7 @@ module BlogGenerator
104
124
  end
105
125
 
106
126
  def as_json
107
- @metadata.merge(body: self.body).tap do |metadata|
127
+ @metadata.merge(body: self.post_processed_body).tap do |metadata|
108
128
  metadata[:published_at] && metadata[:published_at] = DateTime.parse(metadata[:published_at])
109
129
  metadata[:updated_at] && metadata[:updated_at] = DateTime.parse(metadata[:updated_at])
110
130
  end
@@ -127,7 +147,7 @@ module BlogGenerator
127
147
 
128
148
  #{excerpt}
129
149
 
130
- #{self.body}
150
+ #{self.post_processed_body}
131
151
  EOF
132
152
  end
133
153
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blog-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - James C Russell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-25 00:00:00.000000000 Z
11
+ date: 2017-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri