ascii_binder 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +16 -0
  3. data/ascii_binder.gemspec +5 -3
  4. data/bin/asciibinder +53 -44
  5. data/features/command_help.feature +8 -0
  6. data/features/command_version.feature +8 -0
  7. data/features/repo_build.feature +34 -0
  8. data/features/repo_clean.feature +20 -0
  9. data/features/repo_clone.feature +22 -0
  10. data/features/repo_create.feature +13 -0
  11. data/features/repo_package.feature +15 -0
  12. data/features/step_definitions/steps.rb +182 -0
  13. data/features/support/_clone_distro_map.yml +14 -0
  14. data/features/support/_invalid_distro_map.yml +14 -0
  15. data/features/support/env.rb +468 -0
  16. data/features/support/test_distro/.gitignore +9 -0
  17. data/features/support/test_distro/_distro_map.yml +29 -0
  18. data/features/support/test_distro/_images/asciibinder-logo-horizontal.png +0 -0
  19. data/features/support/test_distro/_images/asciibinder_web_logo.svg +125 -0
  20. data/features/support/test_distro/_images/book_pages_bg.jpg +0 -0
  21. data/features/support/test_distro/_images/favicon.ico +0 -0
  22. data/features/support/test_distro/_images/favicon32x32.png +0 -0
  23. data/features/support/test_distro/_javascripts/.gitkeep +0 -0
  24. data/features/support/test_distro/_stylesheets/asciibinder.css +568 -0
  25. data/features/support/test_distro/_templates/_css.html.erb +3 -0
  26. data/features/support/test_distro/_templates/_nav.html.erb +31 -0
  27. data/features/support/test_distro/_templates/page.html.erb +92 -0
  28. data/features/support/test_distro/_topic_map.yml +36 -0
  29. data/features/support/test_distro/index-main.html +10 -0
  30. data/features/support/test_distro/index-test.html +10 -0
  31. data/features/support/test_distro/main_only_topic_group/index.adoc +17 -0
  32. data/features/support/test_distro/test_only_topic_group/index.adoc +17 -0
  33. data/features/support/test_distro/welcome/index.adoc +17 -0
  34. data/features/support/test_distro/welcome/subtopics/index.adoc +17 -0
  35. data/features/support/test_distro/welcome/subtopics/main_only_topic.adoc +17 -0
  36. data/features/support/test_distro/welcome/subtopics/test_only_topic.adoc +17 -0
  37. data/features/support/test_distro/welcome/subtopics/wildcard_all.adoc +17 -0
  38. data/lib/ascii_binder.rb +4 -2
  39. data/lib/ascii_binder/distro.rb +111 -0
  40. data/lib/ascii_binder/distro_branch.rb +93 -0
  41. data/lib/ascii_binder/distro_map.rb +67 -0
  42. data/lib/ascii_binder/engine.rb +581 -0
  43. data/lib/ascii_binder/helpers.rb +42 -856
  44. data/lib/ascii_binder/site.rb +52 -0
  45. data/lib/ascii_binder/site_info.rb +22 -0
  46. data/lib/ascii_binder/site_map.rb +24 -0
  47. data/lib/ascii_binder/topic_entity.rb +255 -0
  48. data/lib/ascii_binder/topic_map.rb +61 -0
  49. data/lib/ascii_binder/version.rb +1 -1
  50. data/templates/_templates/page.html.erb +1 -1
  51. metadata +118 -14
@@ -0,0 +1,52 @@
1
+ require 'ascii_binder/helpers'
2
+
3
+ include AsciiBinder::Helpers
4
+
5
+ module AsciiBinder
6
+ class Site
7
+ attr_reader :id, :name, :url
8
+
9
+ def initialize(distro_config)
10
+ @id = distro_config['site']
11
+ @name = distro_config['site_name']
12
+ @url = distro_config['site_url']
13
+ end
14
+
15
+ def is_valid?
16
+ validate
17
+ end
18
+
19
+ def errors
20
+ validate(true)
21
+ end
22
+
23
+ private
24
+
25
+ def validate(verbose=false)
26
+ errors = []
27
+ unless valid_id?(@id)
28
+ if verbose
29
+ errors << "Site ID '#{@id}' is not a valid ID."
30
+ else
31
+ return false
32
+ end
33
+ end
34
+ unless valid_string?(@name)
35
+ if verbose
36
+ errors << "Site name '#{@name}' for site ID '#{@id}' is not a valid string."
37
+ else
38
+ return false
39
+ end
40
+ end
41
+ unless valid_string?(@url)
42
+ if verbose
43
+ errors << "Site URL '#{@url}' for site ID '#{@id}' is not a valid string."
44
+ else
45
+ return false
46
+ end
47
+ end
48
+ return errors if verbose
49
+ return true
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,22 @@
1
+ module AsciiBinder
2
+ class SiteInfo
3
+ attr_reader :id, :name, :url, :distros, :branches
4
+
5
+ def initialize(distro)
6
+ @id = distro.site.id
7
+ @name = distro.site.name
8
+ @url = distro.site.url
9
+ @distros = {}
10
+ @branches = ['master']
11
+ add_distro(distro)
12
+ end
13
+
14
+ def add_distro(distro)
15
+ @distros[distro.id] = distro.branches
16
+ distro.branches.each do |branch|
17
+ next if @branches.include?(branch.id)
18
+ @branches << branch.id
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'ascii_binder/site_info'
2
+
3
+ module AsciiBinder
4
+ class SiteMap
5
+ def initialize(distro_map)
6
+ @site_map = {}
7
+ distro_map.distros.each do |distro|
8
+ unless @site_map.has_key?(distro.site.id)
9
+ @site_map[distro.site.id] = AsciiBinder::SiteInfo.new(distro)
10
+ else
11
+ @site_map[distro.site.id].add_distro(distro)
12
+ end
13
+ end
14
+ end
15
+
16
+ def sites
17
+ return @site_map.values
18
+ end
19
+
20
+ def ids
21
+ return @site_map.keys
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,255 @@
1
+ require 'ascii_binder/helpers'
2
+ require 'trollop'
3
+
4
+ include AsciiBinder::Helpers
5
+
6
+ module AsciiBinder
7
+ class TopicEntity
8
+ attr_reader :name, :dir, :file, :distro_keys, :subitems, :raw, :parent, :depth
9
+
10
+ def initialize(topic_entity,actual_distro_keys,dir_path='',parent_group=nil,depth=0)
11
+ @raw = topic_entity
12
+ @parent = parent_group
13
+ @dir_path = dir_path
14
+ @name = topic_entity['Name']
15
+ @dir = topic_entity['Dir']
16
+ @file = topic_entity['File']
17
+ @depth = depth
18
+ @actual_distro_keys = actual_distro_keys
19
+ @distro_keys = topic_entity.has_key?('Distros') ? parse_distros(topic_entity['Distros']) : actual_distro_keys
20
+ @subitems = []
21
+ if topic_entity.has_key?('Topics')
22
+ entity_dir = @dir.nil? ? '<nil_dir>' : @dir
23
+ subdir_path = dir_path == '' ? entity_dir : File.join(dir_path,entity_dir)
24
+ topic_entity['Topics'].each do |sub_entity|
25
+ @subitems << AsciiBinder::TopicEntity.new(sub_entity,actual_distro_keys,subdir_path,self,depth+1)
26
+ end
27
+ end
28
+ end
29
+
30
+ def repo_path
31
+ @repo_path ||= begin
32
+ this_step = '<nil_item>'
33
+ if is_group?
34
+ this_step = dir
35
+ elsif is_topic?
36
+ this_step = name.end_with?('.adoc') ? name : "#{file}.adoc"
37
+ end
38
+ @dir_path == '' ? this_step : File.join(@dir_path,this_step)
39
+ end
40
+ end
41
+
42
+ def repo_path_html
43
+ @repo_path_html ||= is_topic? ? File.join(File.dirname(repo_path),File.basename(repo_path,'.adoc')) + ".html" : repo_path
44
+ end
45
+
46
+ def source_path
47
+ @source_path ||= File.join(docs_root_dir,repo_path)
48
+ end
49
+
50
+ def preview_path(distro_key,branch_dir)
51
+ File.join(preview_dir,distro_key,branch_dir,repo_path_html)
52
+ end
53
+
54
+ def package_path(site_id,branch_dir)
55
+ File.join(package_dir,site_id,branch_dir,repo_path_html)
56
+ end
57
+
58
+ def group_filepaths
59
+ @group_filepaths ||= begin
60
+ group_filepaths = []
61
+ if is_topic?
62
+ group_filepaths << File.join(File.dirname(repo_path),File.basename(repo_path,'.adoc'))
63
+ else
64
+ subitems.each do |subitem|
65
+ group_filepaths.concat(subitem.group_filepaths)
66
+ end
67
+ group_filepaths.uniq!
68
+ end
69
+ group_filepaths
70
+ end
71
+ end
72
+
73
+ def nav_tree(distro_key)
74
+ unless distro_keys.include?(distro_key)
75
+ return nil
76
+ end
77
+ nav_tree = { :id => id, :name => name }
78
+ if is_topic?
79
+ nav_tree[:path] = "../" + repo_path_html
80
+ elsif is_group?
81
+ sub_nav_items = []
82
+ subitems.each do |subitem|
83
+ sub_nav = subitem.nav_tree(distro_key)
84
+ next if sub_nav.nil?
85
+ sub_nav_items << sub_nav
86
+ end
87
+
88
+ # Don't bother with this group if none of the sub-items is used by this distro
89
+ return nil if sub_nav_items.length == 0
90
+
91
+ nav_tree[:topics] = sub_nav_items
92
+ end
93
+ return nav_tree
94
+ end
95
+
96
+ # Is this topic entity or any of its children used in
97
+ # the specified distro / single page chain
98
+ def include?(distro_key,single_page_path)
99
+ # If this entity isn't for this distro, bail out
100
+ return false unless distro_keys.include?(distro_key)
101
+
102
+ # If we're building a single page, check if we're on the right track.
103
+ if single_page_path.length > 0
104
+ if is_group?
105
+ return false unless single_page_path[depth] == dir
106
+ elsif is_topic?
107
+ return false unless single_page_path[depth] == file
108
+ else
109
+ return false
110
+ end
111
+ elsif is_group?
112
+ # If this is a topic group that -is- okay for this distro, but
113
+ # none of its subitems are okay for this distro, then bail out.
114
+ subitems_for_distro = false
115
+ subitems.each do |subitem|
116
+ if subitem.include?(distro_key,[])
117
+ subitems_for_distro = true
118
+ break
119
+ end
120
+ end
121
+ return false unless subitems_for_distro
122
+ end
123
+
124
+ return true
125
+ end
126
+
127
+ def breadcrumb
128
+ @breadcrumb ||= hierarchy.map{ |entity| { :id => entity.id, :name => entity.name, :url => entity.repo_path_html } }
129
+ end
130
+
131
+ def id
132
+ @id ||= hierarchy.map{ |entity| camelize(entity.name) }.join('::')
133
+ end
134
+
135
+ def is_group?
136
+ @is_group ||= file.nil? and not name.nil? and not dir.nil? and subitems.length > 0
137
+ end
138
+
139
+ def is_topic?
140
+ @is_topic ||= dir.nil? and not name.nil? and not file.nil? and subitems.length == 0
141
+ end
142
+
143
+ def is_valid?
144
+ validate
145
+ end
146
+
147
+ def errors
148
+ validate(true)
149
+ end
150
+
151
+ private
152
+
153
+ def parse_distros(entity_distros)
154
+ values = entity_distros.split(',').map(&:strip)
155
+ # Don't bother with glob expansion if 'all' is in the list.
156
+ return @actual_distro_keys if values.include?('all')
157
+
158
+ # Expand globs and return the list
159
+ values.flat_map do |value|
160
+ value_regex = Regexp.new("\\A#{value.gsub("*", ".*")}\\z")
161
+ @actual_distro_keys.select { |k| value_regex.match(k) }
162
+ end.uniq
163
+ end
164
+
165
+ def validate(verbose=false)
166
+ errors = []
167
+
168
+ # Check common fields - Name and Distros
169
+ if not valid_string?(name)
170
+ if verbose
171
+ errors << "Topic entity with missing or invalid 'Name' value: '#{raw.inspect}'"
172
+ else
173
+ return false
174
+ end
175
+ end
176
+ distro_keys.each do |distro_key|
177
+ next if @actual_distro_keys.include?(distro_key)
178
+ if verbose
179
+ errors << "#{entity_id} 'Distros' filter includes nonexistant distro key '#{distro_key}'"
180
+ else
181
+ return false
182
+ end
183
+ end
184
+
185
+ # Check the depth. For now, max depth is '2':
186
+ #
187
+ # [<group>,<subgroup>,<topic>]
188
+ #
189
+ # But this limit will be lifted in the next major version
190
+ if depth > 2
191
+ if verbose
192
+ errors << "#{entity_id} exceeds the maximum nested depth."
193
+ else
194
+ return false
195
+ end
196
+ end
197
+
198
+ # For groups, test the 'Dir' value and the sub-items.
199
+ if is_group?
200
+ if not valid_string?(dir)
201
+ if verbose
202
+ errors << "#{entity_id} has invalid 'Dir' value."
203
+ else
204
+ return false
205
+ end
206
+ end
207
+ subitems.each do |subitem|
208
+ next if subitem.is_valid?
209
+ if verbose
210
+ errors = errors.concat(subitem.errors)
211
+ else
212
+ return false
213
+ end
214
+ end
215
+ elsif is_topic?
216
+ if not valid_string?(file)
217
+ if verbose
218
+ errors << "#{entity_id} has invalid 'File' value."
219
+ else
220
+ return false
221
+ end
222
+ end
223
+ else
224
+ if verbose
225
+ errors << "#{entity_id} is not parseable as a group or a topic: '#{raw.inspect}'"
226
+ else
227
+ return false
228
+ end
229
+ end
230
+ return errors if verbose
231
+ return true
232
+ end
233
+
234
+ def hierarchy
235
+ @hierarchy ||= begin
236
+ entity = self
237
+ ancestry = []
238
+ loop do
239
+ ancestry << entity
240
+ break if entity.parent.nil?
241
+ entity = entity.parent
242
+ end
243
+ ancestry.reverse
244
+ end
245
+ end
246
+
247
+ def entity_id
248
+ if hierarchy.length == 1
249
+ return "Top level topic entity '#{name}'"
250
+ else
251
+ return "Topic entity at '#{breadcrumb.map{ |node| node[:name] }.join(' -> ')}'"
252
+ end
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,61 @@
1
+ require 'ascii_binder/helpers'
2
+ require 'ascii_binder/topic_entity'
3
+ require 'trollop'
4
+ require 'yaml'
5
+
6
+ include AsciiBinder::Helpers
7
+
8
+ module AsciiBinder
9
+ class TopicMap
10
+ attr_reader :list
11
+
12
+ def initialize(topic_file,distro_keys)
13
+ @topic_yaml = YAML.load_stream(open(File.join(docs_root_dir,topic_file)))
14
+ @list = []
15
+ @topic_yaml.each do |topic_entity|
16
+ @list << AsciiBinder::TopicEntity.new(topic_entity,distro_keys)
17
+ end
18
+ end
19
+
20
+ def filepaths
21
+ @filepaths ||= begin
22
+ filepaths = []
23
+ @list.each do |topic_entity|
24
+ filepaths.concat(topic_entity.group_filepaths)
25
+ end
26
+ filepaths
27
+ end
28
+ end
29
+
30
+ def nav_tree(distro_key)
31
+ nav_tree = []
32
+ @list.each do |topic_entity|
33
+ entity_nav = topic_entity.nav_tree(distro_key)
34
+ next if entity_nav.nil?
35
+ nav_tree << entity_nav
36
+ end
37
+ return nav_tree
38
+ end
39
+
40
+ def is_valid?
41
+ @list.each do |topic_entity|
42
+ next if topic_entity.is_valid? and topic_entity.is_group?
43
+ return false
44
+ end
45
+ return true
46
+ end
47
+
48
+ def errors
49
+ errors = []
50
+ @list.each do |topic_entity|
51
+ if not topic_entity.is_group?
52
+ errors << "Top-level entries in the topic map must all be topic groups. Entity with name '#{topic_entity.name}' is not a group."
53
+ next
54
+ end
55
+ next if topic_entity.is_valid?
56
+ errors << topic_entity.errors
57
+ end
58
+ return errors
59
+ end
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module AsciiBinder
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
3
3
  end
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
12
12
 
13
13
  <%= render("_templates/_css.html.erb", :css_path => css_path) %>
14
- <script src="<%= File.join(javascripts_path, "bootstrap-offcanvas.js") %>" type="text/javascript"></script>
15
14
 
16
15
  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
17
16
  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
@@ -67,6 +66,7 @@
67
66
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
68
67
  <!-- Latest compiled and minified JavaScript -->
69
68
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
69
+ <script src="<%= File.join(javascripts_path, "bootstrap-offcanvas.js") %>" type="text/javascript"></script>
70
70
  <script type="text/javascript">
71
71
  /*<![CDATA[*/
72
72
  $(document).ready(function() {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ascii_binder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - N. Harrison Ripps
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-01-03 00:00:00.000000000 Z
12
+ date: 2017-07-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -25,6 +25,34 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.7'
28
+ - !ruby/object:Gem::Dependency
29
+ name: cucumber
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 2.3.3
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 2.3.3
42
+ - !ruby/object:Gem::Dependency
43
+ name: diff_dirs
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.1.2
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.1.2
28
56
  - !ruby/object:Gem::Dependency
29
57
  name: rake
30
58
  requirement: !ruby/object:Gem::Requirement
@@ -45,28 +73,28 @@ dependencies:
45
73
  requirements:
46
74
  - - "~>"
47
75
  - !ruby/object:Gem::Version
48
- version: 1.5.4
76
+ version: 1.5.6
49
77
  type: :runtime
50
78
  prerelease: false
51
79
  version_requirements: !ruby/object:Gem::Requirement
52
80
  requirements:
53
81
  - - "~>"
54
82
  - !ruby/object:Gem::Version
55
- version: 1.5.4
83
+ version: 1.5.6
56
84
  - !ruby/object:Gem::Dependency
57
85
  name: asciidoctor-diagram
58
86
  requirement: !ruby/object:Gem::Requirement
59
87
  requirements:
60
- - - ">="
88
+ - - "~>"
61
89
  - !ruby/object:Gem::Version
62
- version: '0'
90
+ version: 1.5.5
63
91
  type: :runtime
64
92
  prerelease: false
65
93
  version_requirements: !ruby/object:Gem::Requirement
66
94
  requirements:
67
- - - ">="
95
+ - - "~>"
68
96
  - !ruby/object:Gem::Version
69
- version: '0'
97
+ version: 1.5.5
70
98
  - !ruby/object:Gem::Dependency
71
99
  name: git
72
100
  requirement: !ruby/object:Gem::Requirement
@@ -197,16 +225,16 @@ dependencies:
197
225
  name: yajl-ruby
198
226
  requirement: !ruby/object:Gem::Requirement
199
227
  requirements:
200
- - - ">="
228
+ - - "~>"
201
229
  - !ruby/object:Gem::Version
202
- version: '0'
230
+ version: 1.3.0
203
231
  type: :runtime
204
232
  prerelease: false
205
233
  version_requirements: !ruby/object:Gem::Requirement
206
234
  requirements:
207
- - - ">="
235
+ - - "~>"
208
236
  - !ruby/object:Gem::Version
209
- version: '0'
237
+ version: 1.3.0
210
238
  - !ruby/object:Gem::Dependency
211
239
  name: tilt
212
240
  requirement: !ruby/object:Gem::Requirement
@@ -233,6 +261,7 @@ extensions: []
233
261
  extra_rdoc_files: []
234
262
  files:
235
263
  - ".gitignore"
264
+ - ".travis.yml"
236
265
  - Dockerfile
237
266
  - Gemfile
238
267
  - Guardfile
@@ -242,11 +271,53 @@ files:
242
271
  - ascii_binder.gemspec
243
272
  - bin/ascii_binder
244
273
  - bin/asciibinder
274
+ - features/command_help.feature
275
+ - features/command_version.feature
276
+ - features/repo_build.feature
277
+ - features/repo_clean.feature
278
+ - features/repo_clone.feature
279
+ - features/repo_create.feature
280
+ - features/repo_package.feature
281
+ - features/step_definitions/steps.rb
282
+ - features/support/_clone_distro_map.yml
283
+ - features/support/_invalid_distro_map.yml
284
+ - features/support/env.rb
285
+ - features/support/test_distro/.gitignore
286
+ - features/support/test_distro/_distro_map.yml
287
+ - features/support/test_distro/_images/asciibinder-logo-horizontal.png
288
+ - features/support/test_distro/_images/asciibinder_web_logo.svg
289
+ - features/support/test_distro/_images/book_pages_bg.jpg
290
+ - features/support/test_distro/_images/favicon.ico
291
+ - features/support/test_distro/_images/favicon32x32.png
292
+ - features/support/test_distro/_javascripts/.gitkeep
293
+ - features/support/test_distro/_stylesheets/asciibinder.css
294
+ - features/support/test_distro/_templates/_css.html.erb
295
+ - features/support/test_distro/_templates/_nav.html.erb
296
+ - features/support/test_distro/_templates/page.html.erb
297
+ - features/support/test_distro/_topic_map.yml
298
+ - features/support/test_distro/index-main.html
299
+ - features/support/test_distro/index-test.html
300
+ - features/support/test_distro/main_only_topic_group/index.adoc
301
+ - features/support/test_distro/test_only_topic_group/index.adoc
302
+ - features/support/test_distro/welcome/index.adoc
303
+ - features/support/test_distro/welcome/subtopics/index.adoc
304
+ - features/support/test_distro/welcome/subtopics/main_only_topic.adoc
305
+ - features/support/test_distro/welcome/subtopics/test_only_topic.adoc
306
+ - features/support/test_distro/welcome/subtopics/wildcard_all.adoc
245
307
  - lib/ascii_binder.rb
308
+ - lib/ascii_binder/distro.rb
309
+ - lib/ascii_binder/distro_branch.rb
310
+ - lib/ascii_binder/distro_map.rb
311
+ - lib/ascii_binder/engine.rb
246
312
  - lib/ascii_binder/helpers.rb
313
+ - lib/ascii_binder/site.rb
314
+ - lib/ascii_binder/site_info.rb
315
+ - lib/ascii_binder/site_map.rb
247
316
  - lib/ascii_binder/tasks/guards.rb
248
317
  - lib/ascii_binder/tasks/tasks.rb
249
318
  - lib/ascii_binder/template_renderer.rb
319
+ - lib/ascii_binder/topic_entity.rb
320
+ - lib/ascii_binder/topic_map.rb
250
321
  - lib/ascii_binder/version.rb
251
322
  - templates/.gitignore
252
323
  - templates/LICENSE.txt
@@ -286,9 +357,42 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
357
  version: '0'
287
358
  requirements: []
288
359
  rubyforge_project:
289
- rubygems_version: 2.6.8
360
+ rubygems_version: 2.6.11
290
361
  signing_key:
291
362
  specification_version: 4
292
363
  summary: AsciiBinder is an AsciiDoc-based system for authoring and publishing closely
293
364
  related documentation sets from a single source.
294
- test_files: []
365
+ test_files:
366
+ - features/command_help.feature
367
+ - features/command_version.feature
368
+ - features/repo_build.feature
369
+ - features/repo_clean.feature
370
+ - features/repo_clone.feature
371
+ - features/repo_create.feature
372
+ - features/repo_package.feature
373
+ - features/step_definitions/steps.rb
374
+ - features/support/_clone_distro_map.yml
375
+ - features/support/_invalid_distro_map.yml
376
+ - features/support/env.rb
377
+ - features/support/test_distro/.gitignore
378
+ - features/support/test_distro/_distro_map.yml
379
+ - features/support/test_distro/_images/asciibinder-logo-horizontal.png
380
+ - features/support/test_distro/_images/asciibinder_web_logo.svg
381
+ - features/support/test_distro/_images/book_pages_bg.jpg
382
+ - features/support/test_distro/_images/favicon.ico
383
+ - features/support/test_distro/_images/favicon32x32.png
384
+ - features/support/test_distro/_javascripts/.gitkeep
385
+ - features/support/test_distro/_stylesheets/asciibinder.css
386
+ - features/support/test_distro/_templates/_css.html.erb
387
+ - features/support/test_distro/_templates/_nav.html.erb
388
+ - features/support/test_distro/_templates/page.html.erb
389
+ - features/support/test_distro/_topic_map.yml
390
+ - features/support/test_distro/index-main.html
391
+ - features/support/test_distro/index-test.html
392
+ - features/support/test_distro/main_only_topic_group/index.adoc
393
+ - features/support/test_distro/test_only_topic_group/index.adoc
394
+ - features/support/test_distro/welcome/index.adoc
395
+ - features/support/test_distro/welcome/subtopics/index.adoc
396
+ - features/support/test_distro/welcome/subtopics/main_only_topic.adoc
397
+ - features/support/test_distro/welcome/subtopics/test_only_topic.adoc
398
+ - features/support/test_distro/welcome/subtopics/wildcard_all.adoc