rundoc 1.1.2 → 2.0.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/workflows/check_changelog.yml +16 -7
- data/.github/workflows/ci.yml +48 -0
- data/.standard.yml +6 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +1 -1
- data/README.md +98 -5
- data/Rakefile +9 -10
- data/lib/rundoc/cli.rb +15 -17
- data/lib/rundoc/code_command/background/log/clear.rb +1 -1
- data/lib/rundoc/code_command/background/log/read.rb +1 -1
- data/lib/rundoc/code_command/background/process_spawn.rb +8 -9
- data/lib/rundoc/code_command/background/start.rb +7 -7
- data/lib/rundoc/code_command/background/stop.rb +1 -1
- data/lib/rundoc/code_command/background/wait.rb +2 -2
- data/lib/rundoc/code_command/background.rb +6 -6
- data/lib/rundoc/code_command/bash/cd.rb +6 -7
- data/lib/rundoc/code_command/bash.rb +12 -13
- data/lib/rundoc/code_command/file_command/append.rb +12 -16
- data/lib/rundoc/code_command/file_command/remove.rb +6 -9
- data/lib/rundoc/code_command/no_such_command.rb +0 -1
- data/lib/rundoc/code_command/pipe.rb +2 -5
- data/lib/rundoc/code_command/print/erb.rb +48 -0
- data/lib/rundoc/code_command/print/text.rb +33 -0
- data/lib/rundoc/code_command/raw.rb +1 -1
- data/lib/rundoc/code_command/rundoc/depend_on.rb +0 -1
- data/lib/rundoc/code_command/rundoc/require.rb +2 -3
- data/lib/rundoc/code_command/rundoc_command.rb +3 -4
- data/lib/rundoc/code_command/website/driver.rb +17 -17
- data/lib/rundoc/code_command/website/navigate.rb +2 -2
- data/lib/rundoc/code_command/website/screenshot.rb +1 -1
- data/lib/rundoc/code_command/website/visit.rb +4 -5
- data/lib/rundoc/code_command/website.rb +4 -4
- data/lib/rundoc/code_command/write.rb +10 -11
- data/lib/rundoc/code_command.rb +28 -17
- data/lib/rundoc/code_section.rb +42 -25
- data/lib/rundoc/parser.rb +17 -19
- data/lib/rundoc/peg_parser.rb +57 -59
- data/lib/rundoc/version.rb +1 -1
- data/lib/rundoc.rb +10 -14
- data/rundoc.gemspec +19 -21
- data/test/fixtures/rails_4/rundoc.md +100 -33
- data/test/fixtures/rails_5/rundoc.md +77 -14
- data/test/fixtures/rails_6/rundoc.md +231 -167
- data/test/fixtures/rails_7/rundoc.md +477 -0
- data/test/integration/print_test.rb +194 -0
- data/test/rundoc/code_commands/append_file_test.rb +5 -8
- data/test/rundoc/code_commands/background_test.rb +3 -6
- data/test/rundoc/code_commands/bash_test.rb +12 -7
- data/test/rundoc/code_commands/pipe_test.rb +9 -9
- data/test/rundoc/code_commands/print_test.rb +94 -0
- data/test/rundoc/code_commands/remove_contents_test.rb +4 -5
- data/test/rundoc/code_section_test.rb +50 -56
- data/test/rundoc/parser_test.rb +28 -61
- data/test/rundoc/peg_parser_test.rb +49 -53
- data/test/rundoc/regex_test.rb +120 -127
- data/test/rundoc/test_parse_java.rb +1 -3
- data/test/test_helper.rb +4 -6
- metadata +39 -42
- data/.travis.yml +0 -8
- data/lib/rundoc/code_command/repl.rb +0 -37
data/lib/rundoc/code_section.rb
CHANGED
@@ -3,8 +3,8 @@ module Rundoc
|
|
3
3
|
class CodeSection
|
4
4
|
class ParseError < StandardError
|
5
5
|
def initialize(options = {})
|
6
|
-
keyword
|
7
|
-
command
|
6
|
+
keyword = options[:keyword]
|
7
|
+
command = options[:command]
|
8
8
|
line_number = options[:line_number]
|
9
9
|
block = options[:block].lines.map do |line|
|
10
10
|
if line == command
|
@@ -14,37 +14,40 @@ module Rundoc
|
|
14
14
|
end
|
15
15
|
end.join("")
|
16
16
|
|
17
|
-
msg =
|
17
|
+
msg = "Error parsing (line:#{line_number}):\n"
|
18
18
|
msg << "> '#{command.strip}'\n"
|
19
19
|
msg << "No such registered command: '#{keyword}'\n"
|
20
20
|
msg << "registered commands: #{Rundoc.known_commands.inspect}\n\n"
|
21
21
|
msg << block
|
22
22
|
msg << "\n"
|
23
|
-
super
|
23
|
+
super(msg)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
COMMAND_REGEX
|
27
|
+
COMMAND_REGEX = Rundoc::Parser::COMMAND_REGEX # todo: move whole thing
|
28
|
+
AUTOGEN_WARNING = "\n<!-- STOP. This document is autogenerated. Do not manually modify. See the top of the doc for more details. -->"
|
28
29
|
attr_accessor :original, :fence, :lang, :code, :commands, :keyword
|
29
30
|
|
30
31
|
def initialize(match, options = {})
|
31
32
|
@original = match.to_s
|
32
33
|
@commands = []
|
33
|
-
@stack
|
34
|
-
@keyword
|
34
|
+
@stack = []
|
35
|
+
@keyword = options[:keyword] or raise "keyword is required"
|
35
36
|
@document_path = options[:document_path]
|
36
|
-
@fence
|
37
|
-
@lang
|
38
|
-
@code
|
37
|
+
@fence = match[:fence]
|
38
|
+
@lang = match[:lang]
|
39
|
+
@code = match[:contents]
|
39
40
|
parse_code_command
|
40
41
|
end
|
41
42
|
|
42
43
|
def render
|
43
44
|
result = []
|
44
|
-
env
|
45
|
+
env = {}
|
45
46
|
env[:commands] = []
|
46
|
-
env[:
|
47
|
-
env[:
|
47
|
+
env[:fence_start] = +"#{fence}#{lang}"
|
48
|
+
env[:fence_end] = "#{fence}#{AUTOGEN_WARNING}"
|
49
|
+
env[:before] = []
|
50
|
+
env[:after] = []
|
48
51
|
env[:document_path] = @document_path
|
49
52
|
|
50
53
|
@stack.each do |s|
|
@@ -54,30 +57,44 @@ module Rundoc
|
|
54
57
|
end
|
55
58
|
|
56
59
|
code_command = s
|
57
|
-
code_output
|
58
|
-
code_line
|
60
|
+
code_output = code_command.call(env) || ""
|
61
|
+
code_line = code_command.to_md(env) || ""
|
59
62
|
|
60
|
-
env[:commands] << {
|
63
|
+
env[:commands] << {object: code_command, output: code_output, command: code_line}
|
61
64
|
|
62
65
|
tmp_result = []
|
63
|
-
tmp_result << code_line
|
66
|
+
tmp_result << code_line if code_command.render_command?
|
64
67
|
tmp_result << code_output if code_command.render_result?
|
65
68
|
|
66
69
|
result << tmp_result unless code_command.hidden?
|
67
|
-
result
|
68
70
|
end
|
69
71
|
|
70
72
|
return env[:replace] if env[:replace]
|
71
73
|
|
72
74
|
return "" if hidden?
|
73
75
|
|
74
|
-
array = [env[:before]
|
76
|
+
array = [env[:before]]
|
77
|
+
|
78
|
+
result.flatten!
|
79
|
+
result.compact!
|
80
|
+
result.map! { |s| s.respond_to?(:rstrip) ? s.rstrip : s }
|
81
|
+
result.reject!(&:empty?)
|
82
|
+
result.map!(&:to_s)
|
83
|
+
|
84
|
+
if !result.empty?
|
85
|
+
array << env[:fence_start]
|
86
|
+
array << result
|
87
|
+
array << env[:fence_end]
|
88
|
+
end
|
89
|
+
array << env[:after]
|
90
|
+
|
75
91
|
array.flatten!
|
76
92
|
array.compact!
|
77
|
-
array.map!(
|
93
|
+
array.map! { |s| s.respond_to?(:rstrip) ? s.rstrip : s }
|
78
94
|
array.reject!(&:empty?)
|
95
|
+
array.map!(&:to_s)
|
79
96
|
|
80
|
-
|
97
|
+
array.join("\n") << "\n"
|
81
98
|
end
|
82
99
|
|
83
100
|
# all of the commands are hidden
|
@@ -88,7 +105,7 @@ module Rundoc
|
|
88
105
|
# one or more of the commands are not hidden
|
89
106
|
def not_hidden?
|
90
107
|
return true if commands.empty?
|
91
|
-
commands.map(&:not_hidden?).detect {|c| c }
|
108
|
+
commands.map(&:not_hidden?).detect { |c| c }
|
92
109
|
end
|
93
110
|
|
94
111
|
def parse_code_command
|
@@ -97,8 +114,8 @@ module Rundoc
|
|
97
114
|
actual = Rundoc::PegTransformer.new.apply(tree)
|
98
115
|
actual = [actual] unless actual.is_a?(Array)
|
99
116
|
actual.each do |code_command|
|
100
|
-
@stack
|
101
|
-
@stack
|
117
|
+
@stack << "\n" if commands.last.is_a?(Rundoc::CodeCommand)
|
118
|
+
@stack << code_command
|
102
119
|
commands << code_command
|
103
120
|
end
|
104
121
|
rescue ::Parslet::ParseFailed => e
|
@@ -117,4 +134,4 @@ module Rundoc
|
|
117
134
|
# end
|
118
135
|
# end
|
119
136
|
end
|
120
|
-
end
|
137
|
+
end
|
data/lib/rundoc/parser.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
module Rundoc
|
2
2
|
class Parser
|
3
|
-
DEFAULT_KEYWORD
|
4
|
-
INDENT_BLOCK
|
5
|
-
GITHUB_BLOCK
|
6
|
-
CODEBLOCK_REGEX
|
7
|
-
COMMAND_REGEX
|
8
|
-
|
9
|
-
|
3
|
+
DEFAULT_KEYWORD = ":::"
|
4
|
+
INDENT_BLOCK = '(?<before_indent>(^\s*$\n|\A)(^(?:[ ]{4}|\t))(?<indent_contents>.*)(?<after_indent>[^\s].*$\n?(?:(?:^\s*$\n?)*^(?:[ ]{4}|\t).*[^\s].*$\n?)*))'
|
5
|
+
GITHUB_BLOCK = '^(?<fence>(?<fence_char>~|`){3,})\s*?(?<lang>\w+)?\s*?\n(?<contents>.*?)^\g<fence>\g<fence_char>*\s*?\n'
|
6
|
+
CODEBLOCK_REGEX = /(#{GITHUB_BLOCK})/m
|
7
|
+
COMMAND_REGEX = ->(keyword) {
|
8
|
+
/^#{keyword}(?<tag>(\s|=|-|>)?(=|-|>)?)\s*(?<command>(\S)+)\s+(?<statement>.*)$/
|
9
|
+
}
|
10
10
|
|
11
11
|
attr_reader :contents, :keyword, :stack
|
12
12
|
|
@@ -14,25 +14,23 @@ module Rundoc
|
|
14
14
|
@document_path = document_path
|
15
15
|
@contents = contents
|
16
16
|
@original = contents.dup
|
17
|
-
@keyword
|
18
|
-
@stack
|
17
|
+
@keyword = keyword
|
18
|
+
@stack = []
|
19
19
|
partition
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_md
|
23
23
|
result = []
|
24
24
|
@stack.each do |s|
|
25
|
-
if s.respond_to?(:render)
|
26
|
-
|
25
|
+
result << if s.respond_to?(:render)
|
26
|
+
s.render
|
27
27
|
else
|
28
|
-
|
28
|
+
s
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
|
-
rescue
|
33
|
-
File.
|
34
|
-
f.write(result.join(""))
|
35
|
-
end
|
31
|
+
result.join("")
|
32
|
+
rescue => e
|
33
|
+
File.write("README.md", result.join(""))
|
36
34
|
raise e
|
37
35
|
end
|
38
36
|
|
@@ -40,7 +38,7 @@ module Rundoc
|
|
40
38
|
def partition
|
41
39
|
until contents.empty?
|
42
40
|
head, code, tail = contents.partition(CODEBLOCK_REGEX)
|
43
|
-
@stack << head
|
41
|
+
@stack << head unless head.empty?
|
44
42
|
unless code.empty?
|
45
43
|
match = code.match(CODEBLOCK_REGEX)
|
46
44
|
@stack << CodeSection.new(match, keyword: keyword, document_path: @document_path)
|
@@ -51,4 +49,4 @@ module Rundoc
|
|
51
49
|
end
|
52
50
|
end
|
53
51
|
|
54
|
-
# convert string of markdown to array of strings and code_command
|
52
|
+
# convert string of markdown to array of strings and code_command
|
data/lib/rundoc/peg_parser.rb
CHANGED
@@ -1,53 +1,53 @@
|
|
1
|
-
require
|
1
|
+
require "parslet"
|
2
2
|
|
3
3
|
module Rundoc
|
4
4
|
class PegParser < Parslet::Parser
|
5
|
-
rule(:spaces)
|
5
|
+
rule(:spaces) { match('\s').repeat(1) }
|
6
6
|
rule(:spaces?) { spaces.maybe }
|
7
|
-
rule(:comma)
|
8
|
-
rule(:digit)
|
9
|
-
rule(:lparen)
|
10
|
-
rule(:rparen)
|
11
|
-
rule(:newline)
|
7
|
+
rule(:comma) { spaces? >> str(",") >> spaces? }
|
8
|
+
rule(:digit) { match("[0-9]") }
|
9
|
+
rule(:lparen) { str("(") >> spaces? }
|
10
|
+
rule(:rparen) { str(")") }
|
11
|
+
rule(:newline) { str("\r").maybe >> str("\n") }
|
12
12
|
|
13
13
|
rule(:singlequote_string) {
|
14
14
|
str("'") >> (
|
15
|
-
str("'").
|
15
|
+
str("'").absent? >> any
|
16
16
|
).repeat.as(:string) >>
|
17
|
-
|
17
|
+
str("'") >> spaces?
|
18
18
|
}
|
19
19
|
rule(:doublequote_string) {
|
20
20
|
str('"') >> (
|
21
|
-
str('"').
|
21
|
+
str('"').absent? >> any
|
22
22
|
).repeat.as(:string) >>
|
23
|
-
|
23
|
+
str('"') >> spaces?
|
24
24
|
}
|
25
25
|
rule(:string) { doublequote_string | singlequote_string }
|
26
26
|
|
27
27
|
rule(:number) {
|
28
28
|
(
|
29
|
-
str(
|
30
|
-
str(
|
29
|
+
str("-").maybe >> (
|
30
|
+
str("0") | (match("[1-9]") >> digit.repeat)
|
31
31
|
) >> (
|
32
|
-
str(
|
32
|
+
str(".") >> digit.repeat(1)
|
33
33
|
).maybe >> (
|
34
|
-
match(
|
34
|
+
match("[eE]") >> (str("+") | str("-")).maybe >> digit.repeat(1)
|
35
35
|
).maybe
|
36
36
|
).as(:number)
|
37
37
|
}
|
38
38
|
|
39
39
|
rule(:value) {
|
40
40
|
string |
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
number |
|
42
|
+
str("true").as(true) |
|
43
|
+
str("false").as(false) |
|
44
|
+
str("nil").as(:nil)
|
45
45
|
}
|
46
46
|
|
47
47
|
rule(:key) {
|
48
48
|
spaces? >> (
|
49
|
-
str(
|
50
|
-
).repeat.as(:key) >> str(
|
49
|
+
str(":").absent? >> match('\s').absent? >> any
|
50
|
+
).repeat.as(:key) >> str(":") >> spaces?
|
51
51
|
}
|
52
52
|
|
53
53
|
rule(:key_value) {
|
@@ -60,16 +60,16 @@ module Rundoc
|
|
60
60
|
spaces? >> (
|
61
61
|
key_value >> (comma >> key_value).repeat
|
62
62
|
).as(:named_args) >>
|
63
|
-
|
63
|
+
spaces?
|
64
64
|
}
|
65
65
|
|
66
66
|
rule(:unquoted_string) {
|
67
|
-
(newline.absent? >> any).repeat.as(:string)
|
67
|
+
(newline.absent? >> any).repeat.as(:string) # >> newline
|
68
68
|
}
|
69
69
|
|
70
70
|
rule(:positional_args) {
|
71
71
|
spaces? >> value.as(:val) >> (comma >> value.as(:val)).repeat >>
|
72
|
-
|
72
|
+
comma.maybe >> named_args.maybe
|
73
73
|
}
|
74
74
|
|
75
75
|
rule(:args) {
|
@@ -82,17 +82,17 @@ module Rundoc
|
|
82
82
|
|
83
83
|
rule(:parens_method) {
|
84
84
|
funcall >> lparen >>
|
85
|
-
|
86
|
-
|
85
|
+
args.as(:args) >>
|
86
|
+
rparen
|
87
87
|
}
|
88
88
|
|
89
89
|
rule(:seattle_method) {
|
90
90
|
funcall >> spaces >>
|
91
|
-
|
91
|
+
args.as(:args)
|
92
92
|
}
|
93
93
|
|
94
94
|
rule(:no_args_method) {
|
95
|
-
spaces? >> (
|
95
|
+
spaces? >> (lparen.absent? >> rparen.absent? >> spaces.absent? >> any).repeat(1)
|
96
96
|
}
|
97
97
|
|
98
98
|
rule(:method_call) {
|
@@ -105,13 +105,13 @@ module Rundoc
|
|
105
105
|
# --
|
106
106
|
rule(:visability) {
|
107
107
|
(
|
108
|
-
match(
|
108
|
+
match(">|-").maybe.as(:vis_command) >> match(">|-").maybe.as(:vis_result)
|
109
109
|
).as(:visability)
|
110
110
|
}
|
111
111
|
|
112
112
|
# :::
|
113
113
|
rule(:start_command) {
|
114
|
-
match(/\A:/) >> str(
|
114
|
+
match(/\A:/) >> str("::")
|
115
115
|
}
|
116
116
|
|
117
117
|
# :::>> $ cat foo.rb
|
@@ -119,7 +119,7 @@ module Rundoc
|
|
119
119
|
(
|
120
120
|
start_command >>
|
121
121
|
visability.as(:cmd_visability) >> spaces? >>
|
122
|
-
method_call.as(:cmd_method_call) >> newline.maybe
|
122
|
+
method_call.as(:cmd_method_call) >> newline.maybe # >> match(/\z/)
|
123
123
|
).as(:command)
|
124
124
|
}
|
125
125
|
|
@@ -135,7 +135,6 @@ module Rundoc
|
|
135
135
|
command
|
136
136
|
}
|
137
137
|
|
138
|
-
|
139
138
|
# :::>> file.write hello.txt
|
140
139
|
# world
|
141
140
|
# :::>> file.write foo.txt
|
@@ -152,13 +151,13 @@ module Rundoc
|
|
152
151
|
code_fence >>
|
153
152
|
match('\S').repeat >>
|
154
153
|
newline >>
|
155
|
-
|
156
|
-
|
154
|
+
multiple_commands >>
|
155
|
+
code_fence >> newline
|
157
156
|
}
|
158
157
|
|
159
158
|
rule(:raw_code) {
|
160
159
|
(start_command.absent? >> command.absent? >> any).repeat(1).as(:raw_code) >>
|
161
|
-
|
160
|
+
multiple_commands.maybe
|
162
161
|
}
|
163
162
|
|
164
163
|
rule(:code_block) {
|
@@ -167,27 +166,26 @@ module Rundoc
|
|
167
166
|
end
|
168
167
|
end
|
169
168
|
|
170
|
-
|
171
169
|
module Rundoc
|
172
170
|
class PegTransformer < Parslet::Transform
|
173
|
-
rule(nill:
|
174
|
-
rule(true
|
175
|
-
rule(false
|
171
|
+
rule(nill: simple(:nu)) { nil }
|
172
|
+
rule(true => simple(:tr)) { true }
|
173
|
+
rule(false => simple(:fa)) { false }
|
176
174
|
rule(string: simple(:st)) { st.to_s }
|
177
175
|
|
178
|
-
rule(:
|
179
|
-
|
176
|
+
rule(number: simple(:nb)) {
|
177
|
+
/[eE.]/.match?(nb) ? Float(nb) : Integer(nb)
|
180
178
|
}
|
181
179
|
|
182
180
|
def self.convert_named_args(na)
|
183
|
-
(na.is_a?(Array) ? na : [
|
181
|
+
(na.is_a?(Array) ? na : [na]).each_with_object({}) { |element, hash|
|
184
182
|
key = element[:key_value][:key].to_sym
|
185
183
|
val = element[:key_value][:val]
|
186
184
|
hash[key] = val
|
187
185
|
}
|
188
186
|
end
|
189
187
|
|
190
|
-
rule(:
|
188
|
+
rule(named_args: subtree(:na)) {
|
191
189
|
PegTransformer.convert_named_args(na)
|
192
190
|
}
|
193
191
|
|
@@ -206,7 +204,7 @@ module Rundoc
|
|
206
204
|
args = nil
|
207
205
|
else
|
208
206
|
keyword = mc[:funcall].to_sym
|
209
|
-
args
|
207
|
+
args = mc[:args]
|
210
208
|
end
|
211
209
|
|
212
210
|
Rundoc.code_command_from_keyword(keyword, args)
|
@@ -214,47 +212,47 @@ module Rundoc
|
|
214
212
|
|
215
213
|
class Visability
|
216
214
|
attr_reader :command, :result
|
217
|
-
|
218
|
-
|
215
|
+
alias_method :command?, :command
|
216
|
+
alias_method :result?, :result
|
219
217
|
def initialize(command:, result:)
|
220
218
|
@command = command
|
221
|
-
@result
|
219
|
+
@result = result
|
222
220
|
end
|
223
221
|
end
|
224
222
|
|
225
223
|
class TransformError < ::StandardError
|
226
224
|
attr_reader :line_and_column
|
227
|
-
def initialize(message
|
225
|
+
def initialize(message:, line_and_column:)
|
228
226
|
@line_and_column = line_and_column || [1, 1]
|
229
|
-
super
|
227
|
+
super(message)
|
230
228
|
end
|
231
229
|
end
|
232
230
|
|
233
|
-
rule(:
|
234
|
-
|
235
|
-
|
236
|
-
|
231
|
+
rule(visability: {
|
232
|
+
vis_command: simple(:command),
|
233
|
+
vis_result: simple(:result)
|
234
|
+
}) {
|
237
235
|
if result.nil? || command.nil?
|
238
236
|
line_and_column = command&.line_and_column
|
239
237
|
line_and_column ||= result&.line_and_column
|
240
238
|
|
241
239
|
message = +""
|
242
240
|
message << "You attempted to use a command that does not begin with two visibility indicators. Please replace: "
|
243
|
-
message << "`:::#{command}#{result}` with `:::#{command ||
|
241
|
+
message << "`:::#{command}#{result}` with `:::#{command || "-"}#{result || "-"}`"
|
244
242
|
raise TransformError.new(message: message, line_and_column: line_and_column)
|
245
243
|
end
|
246
244
|
Visability.new(
|
247
|
-
command: command.to_s ==
|
248
|
-
result:
|
245
|
+
command: command.to_s == ">".freeze,
|
246
|
+
result: result.to_s == ">".freeze
|
249
247
|
)
|
250
248
|
}
|
251
249
|
|
252
250
|
rule(
|
253
|
-
cmd_visability: simple(:cmd_vis),
|
251
|
+
cmd_visability: simple(:cmd_vis), # Visibility#new
|
254
252
|
cmd_method_call: simple(:code_command) # Rundoc::CodeCommand#new
|
255
|
-
|
253
|
+
) {
|
256
254
|
code_command.render_command = cmd_vis.command?
|
257
|
-
code_command.render_result
|
255
|
+
code_command.render_result = cmd_vis.result?
|
258
256
|
code_command
|
259
257
|
}
|
260
258
|
|
data/lib/rundoc/version.rb
CHANGED
data/lib/rundoc.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "fileutils"
|
2
|
+
require "pathname"
|
3
|
+
require "rundoc/version"
|
4
4
|
|
5
5
|
module Rundoc
|
6
6
|
extend self
|
7
7
|
|
8
8
|
def code_command_from_keyword(keyword, args)
|
9
|
-
klass
|
9
|
+
klass = code_command(keyword.to_sym) || Rundoc::CodeCommand::NoSuchCommand
|
10
10
|
original_args = args.dup
|
11
11
|
if args.is_a?(Array) && args.last.is_a?(Hash)
|
12
12
|
kwargs = args.pop
|
@@ -62,10 +62,6 @@ module Rundoc
|
|
62
62
|
yield self
|
63
63
|
end
|
64
64
|
|
65
|
-
def register_repl(*args, &block)
|
66
|
-
ReplRunner.register_commands(*args, &block)
|
67
|
-
end
|
68
|
-
|
69
65
|
def filter_sensitive(sensitive)
|
70
66
|
raise "Expecting #{sensitive} to be a hash" unless sensitive.is_a?(Hash)
|
71
67
|
@sensitive ||= {}
|
@@ -77,14 +73,14 @@ module Rundoc
|
|
77
73
|
@sensitive.each do |sensitive, replace|
|
78
74
|
doc.gsub!(sensitive.to_s, replace)
|
79
75
|
end
|
80
|
-
|
76
|
+
doc
|
81
77
|
end
|
82
78
|
|
83
79
|
attr_accessor :project_root
|
84
80
|
end
|
85
81
|
|
86
|
-
require
|
87
|
-
require
|
88
|
-
require
|
89
|
-
require
|
90
|
-
require
|
82
|
+
require "rundoc/parser"
|
83
|
+
require "rundoc/code_section"
|
84
|
+
require "rundoc/code_command"
|
85
|
+
require "rundoc/peg_parser"
|
86
|
+
require "rundoc/cli"
|
data/rundoc.gemspec
CHANGED
@@ -1,34 +1,32 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
3
|
+
require "rundoc/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name
|
8
|
-
gem.version
|
9
|
-
gem.authors
|
10
|
-
gem.email
|
11
|
-
gem.description
|
12
|
-
gem.summary
|
13
|
-
gem.homepage
|
14
|
-
gem.license
|
6
|
+
gem.name = "rundoc"
|
7
|
+
gem.version = Rundoc::VERSION
|
8
|
+
gem.authors = ["Richard Schneeman"]
|
9
|
+
gem.email = ["richard.schneeman+rubygems@gmail.com"]
|
10
|
+
gem.description = "RunDOC turns docs to runable code"
|
11
|
+
gem.summary = "RunDOC generates runable code from docs"
|
12
|
+
gem.homepage = "https://github.com/schneems/rundoc"
|
13
|
+
gem.license = "MIT"
|
15
14
|
|
16
|
-
gem.files
|
17
|
-
gem.executables
|
18
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
19
17
|
gem.require_paths = ["lib"]
|
20
18
|
|
21
19
|
gem.add_dependency "thor"
|
22
|
-
gem.add_dependency "
|
23
|
-
gem.add_dependency
|
24
|
-
gem.add_dependency
|
25
|
-
gem.add_dependency
|
20
|
+
gem.add_dependency "parslet", "~> 2"
|
21
|
+
gem.add_dependency "capybara", "~> 3"
|
22
|
+
gem.add_dependency "selenium-webdriver", "~> 4"
|
23
|
+
gem.add_dependency "base64", "~> 0"
|
26
24
|
|
27
|
-
gem.add_dependency
|
28
|
-
gem.add_dependency
|
25
|
+
gem.add_dependency "aws-sdk-s3", "~> 1"
|
26
|
+
gem.add_dependency "dotenv"
|
29
27
|
|
30
28
|
gem.add_development_dependency "rake"
|
31
29
|
gem.add_development_dependency "mocha"
|
32
30
|
gem.add_development_dependency "minitest"
|
31
|
+
gem.add_development_dependency "standard"
|
33
32
|
end
|
34
|
-
|