ascii_press 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ascii_press.gemspec +1 -0
- data/lib/ascii_press.rb +71 -4
- data/lib/ascii_press/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dffcb104898a26201bd65d8ee065e16b277d7c9e
|
4
|
+
data.tar.gz: bcef3472d8592080fffa9f3508311dc841fb2e40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75673e806f48540665343e9ce1db0e5bf283ed4d94656f4af9ecade5e5f3d1f3222819d7d3e914e2a40aa1a5417a9e69d3f31cabfaf7b444800936cb189ff750
|
7
|
+
data.tar.gz: e7da91e2342a3124cf930015accaa915c507c5e20996a769b0ab7cc5b75c3af78bfa97a177af801bed21b95aa03bb186aa9035504a2acad17d58086a81d74b8a
|
data/ascii_press.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'rubypress', '~> 1.1.1'
|
23
23
|
spec.add_dependency 'asciidoctor', '~> 1.5.4'
|
24
24
|
spec.add_dependency 'activesupport', '>= 3.0'
|
25
|
+
spec.add_dependency 'colorize', '>= 0.7.7'
|
25
26
|
|
26
27
|
spec.add_development_dependency "bundler", "~> 1.11"
|
27
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/lib/ascii_press.rb
CHANGED
@@ -4,6 +4,7 @@ require 'rubypress'
|
|
4
4
|
require 'asciidoctor'
|
5
5
|
require 'logger'
|
6
6
|
require 'stringio'
|
7
|
+
require 'json'
|
7
8
|
|
8
9
|
require 'active_support/core_ext/enumerable'
|
9
10
|
|
@@ -51,11 +52,22 @@ module AsciiPress
|
|
51
52
|
|
52
53
|
def render(adoc_file_path)
|
53
54
|
doc = nil
|
54
|
-
errors = capture_stderr
|
55
|
+
errors = capture_stderr do
|
56
|
+
document_text = File.read(adoc_file_path)
|
57
|
+
base_dir = ::File.expand_path(File.dirname(adoc_file_path))
|
58
|
+
if before_convertion = @options[:before_convertion]
|
59
|
+
document_text = before_convertion.call(document_text)
|
60
|
+
end
|
61
|
+
doc = Asciidoctor.load(document_text, @options.merge(base_dir: base_dir))
|
62
|
+
end
|
55
63
|
puts errors.split(/[\n\r]+/).reject {|line| line.match(/out of sequence/) }.join("\n")
|
56
64
|
|
57
65
|
html = doc.convert
|
58
66
|
|
67
|
+
if after_conversion = @options[:after_conversion]
|
68
|
+
html = after_conversion.call(html)
|
69
|
+
end
|
70
|
+
|
59
71
|
data = doc.attributes.each_with_object({}) do |(key, value), result|
|
60
72
|
result[key.to_sym] = value.to_s
|
61
73
|
end
|
@@ -86,12 +98,13 @@ module AsciiPress
|
|
86
98
|
def initialize(blog_id, username, password, renderer, options = {})
|
87
99
|
@blog_id = blog_id
|
88
100
|
@wp_client = Rubypress::Client.new(host: @blog_id, username: username, password: password)
|
89
|
-
@post_type = options[:post_type] || '
|
101
|
+
@post_type = options[:post_type] || 'faq'
|
90
102
|
@logger = options[:logger] || AsciiPress.logger
|
91
103
|
@renderer = renderer || Renderer.new
|
92
104
|
@filter_proc = options[:filter_proc] || Proc.new { true }
|
93
105
|
@delete_not_found = options[:delete_not_found]
|
94
106
|
@generate_tags = options[:generate_tags]
|
107
|
+
@options = options
|
95
108
|
|
96
109
|
all_pages = @wp_client.getPosts(filter: {post_type: @post_type, number: 1000})
|
97
110
|
@all_pages_by_post_name = all_pages.index_by {|post| post['post_name'] }
|
@@ -134,14 +147,15 @@ module AsciiPress
|
|
134
147
|
|
135
148
|
# log :info, "data: #{rendering.data.inspect}"
|
136
149
|
|
150
|
+
custom_fields_array = custom_fields.merge('adoc_attributes' => rendering.doc.attributes.to_json).map {|k, v| {key: k, value: v} }
|
137
151
|
content = {
|
138
152
|
post_type: @post_type,
|
139
153
|
post_date: Time.now - 60*60*24*30,
|
140
154
|
post_content: html,
|
141
155
|
post_title: title,
|
142
156
|
post_name: slug,
|
143
|
-
post_status: '
|
144
|
-
custom_fields:
|
157
|
+
post_status: @options[:post_status] || 'draft',
|
158
|
+
custom_fields: custom_fields_array
|
145
159
|
}
|
146
160
|
|
147
161
|
content[:terms_names] = {post_tag: rendering.tags} if @generate_tags
|
@@ -168,8 +182,20 @@ module AsciiPress
|
|
168
182
|
slug
|
169
183
|
end
|
170
184
|
|
185
|
+
|
171
186
|
private
|
172
187
|
|
188
|
+
def new_content_same_as_page?(content, page)
|
189
|
+
main_keys_different = %i(post_content post_title post_name post_status).any? do |key|
|
190
|
+
content[key] != page[key.to_s]
|
191
|
+
end
|
192
|
+
|
193
|
+
page_fields = page['custom_fields'].each_with_object({}) {|field, h| h[field['key']] = field['value'] }
|
194
|
+
content_fields = content[:custom_fields].each_with_object({}) {|field, h| h[field[:key].to_s] = field[:value] }
|
195
|
+
|
196
|
+
!main_keys_different && oyyyy
|
197
|
+
end
|
198
|
+
|
173
199
|
def log(level, message)
|
174
200
|
@logger.send(level, "WORDPRESS: #{message}")
|
175
201
|
end
|
@@ -180,4 +206,45 @@ module AsciiPress
|
|
180
206
|
end
|
181
207
|
end
|
182
208
|
end
|
209
|
+
|
210
|
+
DEFAULT_SLUG_RULES = {
|
211
|
+
'Cannot start with `-` or `_`' => -> (slug) { !%w(- _).include?(slug[0]) },
|
212
|
+
'Cannot end with `-` or `_`' => -> (slug) { !%w(- _).include?(slug[-1]) },
|
213
|
+
'Cannot have multiple `-` in a row' => -> (slug) { !slug.match(/--/) },
|
214
|
+
'Must only contain letters, numbers, hyphens, and underscores' => -> (slug) { !!slug.match(/^[a-z0-9\-\_]+$/) },
|
215
|
+
}
|
216
|
+
|
217
|
+
def self.slug_valid?(slug, rules = DEFAULT_SLUG_RULES)
|
218
|
+
rules.values.all? {|rule| rule.call(slug) }
|
219
|
+
end
|
220
|
+
|
221
|
+
def self.violated_slug_rules(slug, rules = DEFAULT_SLUG_RULES)
|
222
|
+
rules.reject do |desc, rule|
|
223
|
+
rule.call(slug)
|
224
|
+
end.map(&:first)
|
225
|
+
end
|
226
|
+
|
227
|
+
def self.verify_adoc_slugs!(adoc_paths, rules = DEFAULT_SLUG_RULES)
|
228
|
+
data = adoc_paths.map do |path|
|
229
|
+
doc = Asciidoctor.load(File.read(path))
|
230
|
+
|
231
|
+
slug = doc.attributes['slug']
|
232
|
+
if !slug_valid?(slug, rules)
|
233
|
+
violations = violated_slug_rules(slug, rules)
|
234
|
+
[path, slug, violations]
|
235
|
+
end
|
236
|
+
end.compact
|
237
|
+
|
238
|
+
if data.size > 0
|
239
|
+
require 'colorize'
|
240
|
+
data.each do |path, slug, violations|
|
241
|
+
puts 'WARNING!!'.red
|
242
|
+
puts "The document #{path.blue} has the #{slug.blue} which in invalid because:"
|
243
|
+
violations.each do |violation|
|
244
|
+
puts " - #{violation.yellow}"
|
245
|
+
end
|
246
|
+
end
|
247
|
+
raise 'Invalid slugs. Cannot continue'
|
248
|
+
end
|
249
|
+
end
|
183
250
|
end
|
data/lib/ascii_press/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ascii_press
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Underwood
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubypress
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: colorize
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.7.7
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.7.7
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|