Skip to content

Commit 17d33bf

Browse files
committed
Update docs generation script
1 parent f2dc36e commit 17d33bf

File tree

2 files changed

+61
-48
lines changed

2 files changed

+61
-48
lines changed

Dockerfile

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,18 @@ RUN composer install --no-dev && \
3535
chown -R app:app . && \
3636
rm -r ~/.composer
3737

38+
3839
# Build Content
3940
COPY bin/build-content ./bin/build-content
40-
RUN apk add --no-cache ruby ruby-json ruby-bigdecimal && \
41-
gem install rdoc httparty --no-document && \
41+
RUN apk add --no-cache ruby ruby-json ruby-bigdecimal ruby-nokogiri ruby-dev build-base libxml2-dev libxslt-dev libffi-dev && \
42+
gem install rdoc nokogiri httparty --no-document && \
4243
./bin/build-content && \
43-
chown -R app:app content && \
44-
gem uninstall rdoc httparty && \
45-
rm -rf $( gem environment gemdir ) && \
46-
apk del --purge ruby ruby-json ruby-bigdecimal && \
47-
rm -r /var/cache/* ~/.gem
44+
chown -R app:app content
45+
#chown -R app:app content && \
46+
#gem uninstall rdoc httparty && \
47+
#rm -rf $( gem environment gemdir ) && \
48+
#apk del --purge ruby ruby-json ruby-bigdecimal && \
49+
#rm -r /var/cache/* ~/.gem
4850

4951
COPY . ./
5052

bin/build-content

Lines changed: 52 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,69 @@
11
#!/usr/bin/env ruby
22

3-
require 'httparty'
4-
require 'fileutils'
3+
require "httparty"
4+
require "fileutils"
5+
require "nokogiri"
56

67
CONTENT_DIR = "./content"
7-
FILE_NAME_OVERRIDES = {
8-
"excessiveclasscomplexity" => "weightedmethodcount",
9-
}
10-
11-
categories = {
12-
cleancode: "http://phpmd.org/rules/cleancode.txt",
13-
codesize: "http://phpmd.org/rules/codesize.txt",
14-
controversial: "http://phpmd.org/rules/controversial.txt",
15-
design: "http://phpmd.org/rules/design.txt",
16-
naming: "http://phpmd.org/rules/naming.txt",
17-
unused: "http://phpmd.org/rules/unusedcode.txt"
18-
}
8+
CATEGORIES = %w(cleancode codesize controversial design naming unusedcode)
199

20-
FileUtils.rm_rf(CONTENT_DIR)
21-
FileUtils.mkdir_p(CONTENT_DIR)
10+
class Rule
11+
attr_accessor :name, :since, :source, :description, :example
12+
end
2213

23-
def file_name(header)
24-
file_name = header.gsub(" ", "_").downcase
25-
FILE_NAME_OVERRIDES.fetch(file_name, file_name)
14+
def fetch_category_rules(category)
15+
base_url = "https://raw.githubusercontent.com/phpmd/phpmd/master/src/main/resources/rulesets"
16+
HTTParty.get("#{base_url}/#{category}.xml").body
2617
end
2718

28-
categories.each do |category, url|
29-
text = HTTParty.get(url).body
19+
def process_category_rules(xml_rules)
20+
rules = []
21+
rules_node_set = Nokogiri::XML.parse(xml_rules).children.children
22+
rules_node_set.each do |node|
23+
next unless node.name.eql?("rule")
24+
rule = Rule.new
25+
rule.name = node.get_attribute("name")
26+
rule.since = node.get_attribute("since")
27+
rule.source = node.get_attribute("externalInfoUrl")
28+
node.children.each do |child_node|
29+
if child_node.name.eql?("description")
30+
rule.description = child_node.text.strip
31+
end
32+
if child_node.name.eql?("example")
33+
rule.example = child_node.text
34+
end
35+
end
36+
rules << rule
37+
end
38+
rules
39+
end
3040

31-
matches = text.split(/=+\n.*?\n=+/, 2).pop
32-
matches = matches.split(/^=+\n$/)
41+
FileUtils.rm_rf(CONTENT_DIR)
42+
FileUtils.mkdir_p(CONTENT_DIR)
3343

34-
sections = matches.each_with_object([]) do |match, array|
35-
split = match.split(/\n/)
36-
title = split.pop
37-
body = split.join("\n")
44+
rules = []
3845

39-
body.gsub!(/(?<=Example:) ::/, "\n\n```php")
40-
body = body.split(/This rule.*/).shift
41-
body += "\n```"
46+
CATEGORIES.each do |category|
47+
raw_xml_rules = fetch_category_rules(category)
48+
category_rules = process_category_rules(raw_xml_rules)
49+
rules.concat(category_rules)
50+
end
4251

43-
array << body
44-
array << title
45-
end
52+
rules.each do |rule|
53+
File.open("#{CONTENT_DIR}/#{rule.name.downcase}.txt", "w") do |file|
54+
md = <<~MARKDOWN
55+
# #{rule.name}
56+
#{"### Since: " if rule.since } #{rule.since if rule.since}
4657
47-
sections.shift
48-
sections.pop
58+
#{rule.description}
4959
50-
sections.each_slice(2) do |(header, body)|
51-
next if header == "Remark"
60+
## Example
61+
```php
62+
#{rule.example}
63+
```
5264
53-
File.open("#{CONTENT_DIR}/#{file_name(header)}.txt", "w") do |file|
54-
file.write(body)
55-
file.write("\n\nSource: #{url}")
56-
end
65+
## Source #{rule.source}
66+
MARKDOWN
67+
file.write(md)
5768
end
5869
end

0 commit comments

Comments
 (0)