dbdoc 0.1.0 → 0.2.0
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 +4 -4
- data/.github/FUNDING.yml +2 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +4 -1
- data/README.md +5 -1
- data/doc_files/columns.md.erb +2 -2
- data/doc_files/columns.yml.erb +1 -0
- data/doc_files/table_description.md +5 -1
- data/doc_files/table_example.md +3 -5
- data/lib/confluence/api.rb +4 -1
- data/lib/confluence/markdown_converter.rb +87 -0
- data/lib/dbdoc/cli.rb +28 -1
- data/lib/dbdoc/manager.rb +18 -0
- data/lib/dbdoc/uploader.rb +30 -6
- data/lib/dbdoc/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95d1967a75eb0505c9dd74882fcc2fa18127b464d2358f4fe83bfb803a3291c9
|
4
|
+
data.tar.gz: 655b2bf4f41c4c05e4709ec44611af42e9f529daa9891617529c131a095c6968
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65386544fb68b47f56121ab291b86b0bbb0d462c35692e40d223faaaa56b7accc2cf401438001ddf9fb1aab01fb80f51fb28aededa4653f4ff5da41435b65e13
|
7
|
+
data.tar.gz: da90433a70497544484e32bacd6806ea166b64f7cd9cf90f1111da06d9c14c90c582dc9fb7890094bea272dff25fc3033261b22f16c623c8b204b3a2b787b6da
|
data/.github/FUNDING.yml
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dbdoc (0.
|
4
|
+
dbdoc (0.2.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -20,6 +20,8 @@ GEM
|
|
20
20
|
mime-types (~> 3.0)
|
21
21
|
multi_xml (>= 0.5.2)
|
22
22
|
json (2.3.1)
|
23
|
+
kramdown (2.3.0)
|
24
|
+
rexml
|
23
25
|
mime-types (3.3.1)
|
24
26
|
mime-types-data (~> 3.2015)
|
25
27
|
mime-types-data (3.2020.0512)
|
@@ -77,6 +79,7 @@ DEPENDENCIES
|
|
77
79
|
coveralls
|
78
80
|
dbdoc!
|
79
81
|
httparty
|
82
|
+
kramdown
|
80
83
|
rake (~> 12.0)
|
81
84
|
rspec (~> 3.0)
|
82
85
|
rubocop
|
data/README.md
CHANGED
@@ -40,7 +40,11 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
40
40
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
41
41
|
|
42
42
|
```
|
43
|
-
gem uninstall dbdoc && gem build dbdoc.gemspec && bundle && rake build && rake install && dbdoc help
|
43
|
+
Y | gem uninstall dbdoc && gem build dbdoc.gemspec && bundle && rake build && rake install && dbdoc help
|
44
|
+
```
|
45
|
+
|
46
|
+
```
|
47
|
+
Y | gem uninstall dbdoc && gem build dbdoc.gemspec && bundle && rake build && rake release
|
44
48
|
```
|
45
49
|
|
46
50
|
## Contributing
|
data/doc_files/columns.md.erb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
||Name||Type||Description||
|
1
|
+
||Name||Type||Foreign Key||Description||
|
2
2
|
<%- columns.each do |column| -%>
|
3
|
-
|<%= column[:name] %>|<%= column[:type] %>|<%= column[:description].strip %>|
|
3
|
+
|<%= column[:name] %>|<%= column[:type] %>|<%= column[:foreign_key] || " " %>|<%= column[:description].strip %>|
|
4
4
|
<%- end -%>
|
data/doc_files/columns.yml.erb
CHANGED
data/doc_files/table_example.md
CHANGED
data/lib/confluence/api.rb
CHANGED
@@ -18,7 +18,7 @@ module Confluence
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def delete_page(page_id:)
|
21
|
-
HTTParty.delete(
|
21
|
+
response = HTTParty.delete(
|
22
22
|
"https://dbdoc.atlassian.net/wiki/rest/api/content/#{page_id}", {
|
23
23
|
headers: {
|
24
24
|
"Authorization" => "Basic #{basic_auth}",
|
@@ -26,9 +26,12 @@ module Confluence
|
|
26
26
|
}
|
27
27
|
}
|
28
28
|
)
|
29
|
+
|
30
|
+
response.code == 200
|
29
31
|
end
|
30
32
|
|
31
33
|
def existing_pages
|
34
|
+
# TODO: paginate over all pages in the space
|
32
35
|
response = HTTParty.get(
|
33
36
|
"https://dbdoc.atlassian.net/wiki/rest/api/content/?&spaceKey=#{@space}", {
|
34
37
|
headers: {
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "kramdown"
|
2
|
+
|
3
|
+
module Confluence
|
4
|
+
class MarkdownConverter
|
5
|
+
CONVERTERS = %w(
|
6
|
+
convert_h1
|
7
|
+
convert_h2
|
8
|
+
convert_h3
|
9
|
+
convert_h4
|
10
|
+
convert_h5
|
11
|
+
convert_bold
|
12
|
+
convert_italic
|
13
|
+
convert_code
|
14
|
+
convert_unordered_list
|
15
|
+
)
|
16
|
+
|
17
|
+
def convert(original_markdown)
|
18
|
+
return if original_markdown.nil?
|
19
|
+
|
20
|
+
output = original_markdown
|
21
|
+
|
22
|
+
CONVERTERS.each do |converter_method|
|
23
|
+
output = send(converter_method, output)
|
24
|
+
end
|
25
|
+
|
26
|
+
output
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def convert_h1(markdown)
|
32
|
+
markdown.gsub(/^(#)([^#].+)$/, 'h1.\2')
|
33
|
+
end
|
34
|
+
|
35
|
+
def convert_h2(markdown)
|
36
|
+
markdown.gsub(/^(##)([^\#].+)$/, 'h2.\2')
|
37
|
+
end
|
38
|
+
|
39
|
+
def convert_h3(markdown)
|
40
|
+
markdown.gsub(/^(###)([^\#].+)$/, 'h3.\2')
|
41
|
+
end
|
42
|
+
|
43
|
+
def convert_h4(markdown)
|
44
|
+
markdown.gsub(/^(####)([^\#].+)$/, 'h4.\2')
|
45
|
+
end
|
46
|
+
|
47
|
+
def convert_h5(markdown)
|
48
|
+
markdown.gsub(/^(#####)([^\#].+)$/, 'h5.\2')
|
49
|
+
end
|
50
|
+
|
51
|
+
def convert_bold(markdown)
|
52
|
+
markdown.gsub(/(\*\*)(\w+)(\*\*)/, '*\2*')
|
53
|
+
end
|
54
|
+
|
55
|
+
def convert_italic(markdown)
|
56
|
+
markdown.gsub(/(\*)(\w+)(\*)/, '_\2_')
|
57
|
+
end
|
58
|
+
|
59
|
+
def convert_code(markdown)
|
60
|
+
output_lines = []
|
61
|
+
|
62
|
+
markdown.each_line do |line|
|
63
|
+
if line =~ /^\~{3}\w+$/
|
64
|
+
language = line.gsub("~~~", "").strip
|
65
|
+
|
66
|
+
output_lines.push("{code:language=#{language}}\n")
|
67
|
+
elsif line =~ /^\~{3}$/
|
68
|
+
output_lines.push("{code}")
|
69
|
+
else
|
70
|
+
output_lines.push(line)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
output_lines.join
|
75
|
+
end
|
76
|
+
|
77
|
+
def convert_unordered_list(markdown)
|
78
|
+
markdown.gsub(/^\*\s(.+)$/, '- \1')
|
79
|
+
end
|
80
|
+
|
81
|
+
# TODO: add nested list convertion
|
82
|
+
# TODO: add numbered list convertion
|
83
|
+
|
84
|
+
# TODO :add emoji
|
85
|
+
# https://support.atlassian.com/confluence-cloud/docs/use-symbols-emojis-and-special-characters/
|
86
|
+
end
|
87
|
+
end
|
data/lib/dbdoc/cli.rb
CHANGED
@@ -77,7 +77,24 @@ module Dbdoc
|
|
77
77
|
uploader.upload
|
78
78
|
|
79
79
|
0
|
80
|
-
elsif args.first == "
|
80
|
+
elsif args.first == "existing_pages"
|
81
|
+
options = extract_options(args)
|
82
|
+
|
83
|
+
config = Dbdoc::Config.load
|
84
|
+
config.merge!(options)
|
85
|
+
|
86
|
+
uploader = Dbdoc::Uploader.new(config: config)
|
87
|
+
pages = uploader.space_pages
|
88
|
+
|
89
|
+
pages.each do |page|
|
90
|
+
page_title = page["title"]
|
91
|
+
page_id = page["id"]
|
92
|
+
|
93
|
+
puts "#{page_title}: #{page_id}"
|
94
|
+
end
|
95
|
+
|
96
|
+
0
|
97
|
+
elsif args.first == "clear_space"
|
81
98
|
options = extract_options(args)
|
82
99
|
|
83
100
|
config = Dbdoc::Config.load
|
@@ -86,6 +103,16 @@ module Dbdoc
|
|
86
103
|
uploader = Dbdoc::Uploader.new(config: config)
|
87
104
|
uploader.clear_confluence_space
|
88
105
|
|
106
|
+
0
|
107
|
+
elsif args.first == "todo"
|
108
|
+
options = extract_options(args)
|
109
|
+
|
110
|
+
config = Dbdoc::Config.load
|
111
|
+
config.merge!(options)
|
112
|
+
|
113
|
+
manager = Dbdoc::Manager.new(config: config)
|
114
|
+
manager.todo
|
115
|
+
|
89
116
|
0
|
90
117
|
elsif args.first == "help"
|
91
118
|
puts "--> SOME HELP"
|
data/lib/dbdoc/manager.rb
CHANGED
@@ -24,6 +24,24 @@ module Dbdoc
|
|
24
24
|
pp current_schema - input_schema
|
25
25
|
end
|
26
26
|
|
27
|
+
def todo
|
28
|
+
doc_folder_files = File.join(Dir.pwd, "doc", "**/*")
|
29
|
+
|
30
|
+
Dir[doc_folder_files].each do |file|
|
31
|
+
next if file == "."
|
32
|
+
next if file == ".."
|
33
|
+
next if File.directory?(file)
|
34
|
+
|
35
|
+
File.read(file).split("\n").each_with_index do |line, i|
|
36
|
+
if line.include?("TODO")
|
37
|
+
relative_path = file.gsub(Dir.pwd, "")
|
38
|
+
|
39
|
+
puts "#{relative_path}:#{i + 1}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
27
45
|
def apply(path: Dir.pwd, verbose: true)
|
28
46
|
puts "--> APPLY"
|
29
47
|
puts
|
data/lib/dbdoc/uploader.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "dbdoc/constants"
|
2
|
+
require_relative "../confluence/markdown_converter"
|
2
3
|
require_relative "../confluence/api"
|
3
4
|
|
4
5
|
module Dbdoc
|
@@ -14,10 +15,23 @@ module Dbdoc
|
|
14
15
|
delete_pages_for_dropped_schemas_or_tables
|
15
16
|
end
|
16
17
|
|
18
|
+
def space_pages
|
19
|
+
@confluence_api.existing_pages["results"]
|
20
|
+
end
|
21
|
+
|
17
22
|
def clear_confluence_space
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
uploaded_pages = YAML.load(File.read(page_ids_file))
|
24
|
+
|
25
|
+
space_pages.each do |page|
|
26
|
+
page_key = page["title"]
|
27
|
+
page_id = page["id"]
|
28
|
+
|
29
|
+
puts "--> Deleting #{page_key} #{page_id}"
|
30
|
+
|
31
|
+
if @confluence_api.delete_page(page_id: page_id)
|
32
|
+
unlog_page_id(key: page_key)
|
33
|
+
end
|
34
|
+
end
|
21
35
|
end
|
22
36
|
|
23
37
|
private
|
@@ -162,13 +176,17 @@ module Dbdoc
|
|
162
176
|
end
|
163
177
|
end
|
164
178
|
|
179
|
+
def markdown(input)
|
180
|
+
Confluence::MarkdownConverter.new.convert(input)
|
181
|
+
end
|
182
|
+
|
165
183
|
def upload_table(schema_name:, table_name:, schema_page_id:)
|
166
184
|
table_folder = File.join(@doc_folder, schema_name, table_name)
|
167
185
|
|
168
|
-
table_description = File.read(File.join(table_folder, "description.md"))
|
186
|
+
table_description = markdown(File.read(File.join(table_folder, "description.md")))
|
169
187
|
|
170
188
|
examples_folder = File.join(table_folder, "examples")
|
171
|
-
table_examples = Dir[File.join(examples_folder, "*.md")].map { |f| File.read(f) }
|
189
|
+
table_examples = Dir[File.join(examples_folder, "*.md")].map { |f| File.read(f) }.map { |example| markdown(example) }
|
172
190
|
|
173
191
|
columns_markdown_template_file = File.join(DBDOC_HOME, "doc_files", "columns.md.erb")
|
174
192
|
|
@@ -177,8 +195,14 @@ module Dbdoc
|
|
177
195
|
nil,
|
178
196
|
"-"
|
179
197
|
)
|
198
|
+
|
199
|
+
columns_doc = YAML.load(File.read(File.join(table_folder, "columns.yml")))
|
200
|
+
columns_doc.each do |col|
|
201
|
+
col[:description] = markdown(col[:description])
|
202
|
+
end
|
203
|
+
|
180
204
|
columns_table = columns_table_template.result_with_hash({
|
181
|
-
columns:
|
205
|
+
columns: columns_doc
|
182
206
|
})
|
183
207
|
|
184
208
|
page_body = <<-MARKDOWN
|
data/lib/dbdoc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbdoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anatoli Makarevich
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Dbdoc is a tool to keep your database documentation up-to-date and version
|
14
14
|
controlled.
|
@@ -19,6 +19,7 @@ executables:
|
|
19
19
|
extensions: []
|
20
20
|
extra_rdoc_files: []
|
21
21
|
files:
|
22
|
+
- ".github/FUNDING.yml"
|
22
23
|
- ".gitignore"
|
23
24
|
- ".rspec"
|
24
25
|
- ".rubocop.yml"
|
@@ -43,6 +44,7 @@ files:
|
|
43
44
|
- doc_files/table_description.md
|
44
45
|
- doc_files/table_example.md
|
45
46
|
- lib/confluence/api.rb
|
47
|
+
- lib/confluence/markdown_converter.rb
|
46
48
|
- lib/dbdoc.rb
|
47
49
|
- lib/dbdoc/cli.rb
|
48
50
|
- lib/dbdoc/config.rb
|