muwu 2.5.1 → 3.0.0.rc1

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/lib/{muwu_loader.rb → loader.rb} +4 -2
  3. data/lib/muwu.rb +3 -3
  4. data/lib/muwu/cli/cli.rb +52 -11
  5. data/lib/muwu/cli/help/compile +4 -4
  6. data/lib/muwu/cli/help/publish +20 -0
  7. data/lib/muwu/cli/help/reset +6 -3
  8. data/lib/muwu/cli/help/summary +4 -2
  9. data/lib/muwu/cli/help/sync +26 -0
  10. data/lib/muwu/cli/help/view +3 -0
  11. data/lib/muwu/controller/controller.rb +71 -18
  12. data/lib/muwu/controller/controller_interaction.rb +66 -44
  13. data/lib/muwu/default/default.rb +14 -9
  14. data/lib/muwu/destination/destination.rb +61 -57
  15. data/lib/muwu/destination_builder/destination_builder.rb +31 -33
  16. data/lib/muwu/manifest_task/document_css.rb +5 -0
  17. data/lib/muwu/manifest_task/document_html.rb +6 -1
  18. data/lib/muwu/manifest_task/document_js.rb +6 -1
  19. data/lib/muwu/manifest_task_builder/text_item_builder.rb +1 -8
  20. data/lib/muwu/project/project.rb +146 -127
  21. data/lib/muwu/project_builder/assets/config/css/base/html_elements.scss +19 -15
  22. data/lib/muwu/project_builder/assets/config/css/base/mixin_text_section_heading.scss +12 -11
  23. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_contents.scss +5 -5
  24. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_metadata.scss +2 -4
  25. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_navigator.scss +3 -4
  26. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_subcontents.scss +5 -5
  27. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_text.scss +16 -15
  28. data/lib/muwu/project_builder/assets/config/css/base/section_muwu_title.scss +9 -6
  29. data/lib/muwu/project_builder/project_reader.rb +3 -0
  30. data/lib/muwu/project_builder/project_reset_compiled.rb +31 -0
  31. data/lib/muwu/project_builder/project_reset_css.rb +30 -30
  32. data/lib/muwu/project_builder/project_starter.rb +7 -7
  33. data/lib/muwu/project_builder/project_validator.rb +24 -0
  34. data/lib/muwu/project_builder/project_writer.rb +12 -11
  35. data/lib/muwu/project_exception/compiled_folder_not_found.rb +23 -0
  36. data/lib/muwu/project_exception/lynx_not_available.rb +23 -0
  37. data/lib/muwu/project_exception/option_remote_publish_value_nil.rb +18 -0
  38. data/lib/muwu/project_exception/option_remote_sync_value_nil.rb +18 -0
  39. data/lib/muwu/project_exception/rsync_not_available.rb +23 -0
  40. data/lib/muwu/project_exception/scp_not_available.rb +23 -0
  41. data/lib/muwu/project_exception_handler/fatal.rb +10 -9
  42. data/lib/muwu/project_options/project_options.rb +11 -8
  43. data/lib/muwu/project_options_builder/project_option_validator.rb +12 -12
  44. data/lib/muwu/project_options_builder/project_option_validator_value.rb +92 -76
  45. data/lib/muwu/publish/publish.rb +56 -0
  46. data/lib/muwu/render_concat/render_concat.rb +26 -27
  47. data/lib/muwu/render_html/render_html.rb +27 -24
  48. data/lib/muwu/render_html_partial/render_contents.rb +4 -1
  49. data/lib/muwu/render_html_partial/render_document_html.rb +64 -64
  50. data/lib/muwu/render_html_partial/render_text_item.rb +16 -16
  51. data/lib/muwu/sync/sync.rb +73 -0
  52. data/lib/muwu/var/deflistdiv.rb +0 -0
  53. data/lib/muwu/viewer/viewer.rb +25 -0
  54. data/test/what_no_tests.md +1 -3
  55. metadata +18 -5
@@ -1,10 +1,10 @@
1
1
  module Muwu
2
2
  class ProjectStarter
3
-
4
-
3
+
4
+
5
5
  include Muwu
6
-
7
-
6
+
7
+
8
8
  def initialize(current_working_directory, metadata)
9
9
  @current_working_directory = File.absolute_path(current_working_directory)
10
10
  @metadata = metadata
@@ -21,7 +21,7 @@ module Muwu
21
21
  project.working_directory = File.absolute_path(File.join(@current_working_directory, @metadata[:slug]))
22
22
  project
23
23
  end
24
-
25
-
24
+
25
+
26
26
  end
27
- end
27
+ end
@@ -14,6 +14,16 @@ module Muwu
14
14
  public
15
15
 
16
16
 
17
+ def validate_dir_compiled
18
+ if @project.path_compiled_does_exist
19
+ return true
20
+ else
21
+ @project.exceptions_add ProjectException::CompiledFolderNotFound.new(@project)
22
+ return false
23
+ end
24
+ end
25
+
26
+
17
27
  def validate_file_css
18
28
  if @project.css_manifest_file_does_exist
19
29
  return true
@@ -54,6 +64,20 @@ module Muwu
54
64
  end
55
65
 
56
66
 
67
+ def validate_option_remote_publish
68
+ if @project.options.remote_publish.to_s == ''
69
+ @project.exceptions_add ProjectException::OptionRemotePublishValueNil.new
70
+ end
71
+ end
72
+
73
+
74
+ def validate_option_remote_sync
75
+ if @project.options.remote_sync.to_s == ''
76
+ @project.exceptions_add ProjectException::OptionRemoteSyncValueNil.new
77
+ end
78
+ end
79
+
80
+
57
81
  def validate_outline_step_navigator(index)
58
82
  validate_outline_step_navigator_if_single_document(index)
59
83
  return validate_outline_step_navigator_if_automatic(index)
@@ -8,8 +8,8 @@ module Muwu
8
8
 
9
9
  require 'fileutils'
10
10
  require 'yaml'
11
-
12
-
11
+
12
+
13
13
  attr_accessor(
14
14
  :project
15
15
  )
@@ -40,19 +40,20 @@ module Muwu
40
40
 
41
41
  end
42
42
  end
43
-
44
-
43
+
44
+
45
45
  def phase_1_make_project_folder
46
46
  announce_and_execute_dir_mkdir(@project.working_directory)
47
47
  end
48
-
49
-
48
+
49
+
50
50
  def phase_2_make_project_subfolders
51
+ announce_and_execute_dir_mkdir(@project.path_compiled)
51
52
  announce_and_execute_dir_mkdir(@project.path_config)
52
- announce_and_execute_dir_mkdir(@project.path_images)
53
+ # announce_and_execute_dir_mkdir(@project.path_images) # DEPRECATED
53
54
  announce_and_execute_dir_mkdir(@project.path_text)
54
55
  end
55
-
56
+
56
57
 
57
58
  def phase_2_make_folder_css_and_copy_files
58
59
  folder_source_gem = File.absolute_path(File.join(Muwu::GEM_HOME_LIB, 'muwu','project_builder','assets','config','css'))
@@ -79,8 +80,8 @@ module Muwu
79
80
  phase_3_write_file_outline_yml_blank
80
81
  end
81
82
  end
82
-
83
-
83
+
84
+
84
85
  def phase_3_write_file_outline_yml_dump
85
86
  announce_and_execute_yaml_dump(@project.outline, @project.outline_filename)
86
87
  end
@@ -124,4 +125,4 @@ module Muwu
124
125
 
125
126
 
126
127
  end
127
- end
128
+ end
@@ -0,0 +1,23 @@
1
+ module Muwu
2
+ module ProjectException
3
+ class CompiledFolderNotFound
4
+
5
+
6
+ def initialize(project)
7
+ @compiled_folder = project.path_compiled
8
+ end
9
+
10
+
11
+ def report
12
+ "The folder for compiled documents `#{@compiled_folder}` could not be found."
13
+ end
14
+
15
+
16
+ def type
17
+ :fatal
18
+ end
19
+
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Muwu
2
+ module ProjectException
3
+ class LynxNotAvailable
4
+
5
+
6
+ def initialize
7
+ $stderr.puts "#{self.class}"
8
+ end
9
+
10
+
11
+ def report
12
+ "lynx is not available"
13
+ end
14
+
15
+
16
+ def type
17
+ :view
18
+ end
19
+
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module Muwu
2
+ module ProjectException
3
+ class OptionRemotePublishValueNil
4
+
5
+
6
+ def report
7
+ "options.yml does not include a value for remote_publish"
8
+ end
9
+
10
+
11
+ def type
12
+ :publish
13
+ end
14
+
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Muwu
2
+ module ProjectException
3
+ class OptionRemoteSyncValueNil
4
+
5
+
6
+ def report
7
+ "options.yml does not include a value for remote_sync"
8
+ end
9
+
10
+
11
+ def type
12
+ :sync
13
+ end
14
+
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ module Muwu
2
+ module ProjectException
3
+ class RsyncNotAvailable
4
+
5
+
6
+ def initialize
7
+ $stderr.puts "#{self.class}"
8
+ end
9
+
10
+
11
+ def report
12
+ "rsync is not available"
13
+ end
14
+
15
+
16
+ def type
17
+ :sync
18
+ end
19
+
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Muwu
2
+ module ProjectException
3
+ class ScpNotAvailable
4
+
5
+
6
+ def initialize
7
+ $stderr.puts "#{self.class}"
8
+ end
9
+
10
+
11
+ def report
12
+ "scp is not available"
13
+ end
14
+
15
+
16
+ def type
17
+ :publish
18
+ end
19
+
20
+
21
+ end
22
+ end
23
+ end
@@ -6,15 +6,16 @@ module Muwu
6
6
  def initialize(exceptions)
7
7
  @exceptions = [exceptions].flatten
8
8
  render_exceptions
9
+ exit
9
10
  end
10
-
11
-
11
+
12
+
12
13
  def render_exception(exception)
13
14
  $stderr.puts "- #{exception.class}"
14
15
  $stderr.puts " #{exception.report}"
15
16
  end
16
-
17
-
17
+
18
+
18
19
  def render_exceptions
19
20
  render_header
20
21
  @exceptions.each do |exception|
@@ -22,17 +23,17 @@ module Muwu
22
23
  end
23
24
  render_lf
24
25
  end
25
-
26
-
26
+
27
+
27
28
  def render_header
28
29
  $stderr.puts "#{self.inspect}"
29
30
  end
30
-
31
-
31
+
32
+
32
33
  def render_lf
33
34
  $stderr.puts "\n"
34
35
  end
35
-
36
+
36
37
 
37
38
  end
38
39
  end
@@ -16,22 +16,25 @@ module Muwu
16
16
  :output_file_html_basename,
17
17
  :output_file_js_basename,
18
18
  :output_formats,
19
+ :remote_publish,
20
+ :remote_sync,
19
21
  :render_punctuation_smart,
20
22
  :render_section_end_links,
21
23
  :render_section_numbers,
22
24
  :render_sections_distinctly_depth_max,
23
25
  :render_title_section_metadata,
26
+ :rsync_options,
24
27
  :warning_if_parent_heading_lacks_source
25
28
  )
26
-
27
-
29
+
30
+
28
31
  def initialize
29
32
  Default::PROJECT_OPTIONS.each_pair do |key, value|
30
33
  set_option(key, value)
31
34
  end
32
35
  end
33
-
34
-
36
+
37
+
35
38
  def inspect
36
39
  ["#{self.to_s}", "{", inspect_instance_variables, "}"].join(' ')
37
40
  end
@@ -40,15 +43,15 @@ module Muwu
40
43
  def inspect_instance_variables
41
44
  instance_variables.map { |v| "#{v}=#{instance_variable_get(v).inspect}" }.join(", ")
42
45
  end
43
-
44
-
46
+
47
+
45
48
  def set_option(key, value)
46
49
  if Default::PROJECT_OPTIONS.has_key?(key)
47
50
  key_ivsym = "@#{key.to_s}"
48
51
  instance_variable_set(key_ivsym, value)
49
52
  end
50
53
  end
51
-
52
-
54
+
55
+
53
56
  end
54
57
  end
@@ -1,26 +1,26 @@
1
1
  module Muwu
2
2
  class ProjectOptionValidator
3
-
4
-
3
+
4
+
5
5
  include Muwu
6
-
7
-
6
+
7
+
8
8
  attr_reader(
9
9
  :key,
10
10
  :value
11
11
  )
12
-
13
-
12
+
13
+
14
14
  def initialize(key, value, project)
15
15
  key_validator = ProjectOptionValidatorKey.new(key, value, project)
16
16
  @key = key_validator.validated_key
17
17
  @value = key_validator.validated_value
18
18
  end
19
-
20
-
21
-
19
+
20
+
21
+
22
22
  protected
23
-
23
+
24
24
 
25
25
  def self.new_if_valid_key(key, value, project)
26
26
  option_validator = new(key, value, project)
@@ -32,6 +32,6 @@ module Muwu
32
32
  end
33
33
 
34
34
 
35
-
35
+
36
36
  end
37
- end
37
+ end
@@ -3,32 +3,32 @@ module Muwu
3
3
 
4
4
 
5
5
  require 'iso-639'
6
-
7
-
6
+
7
+
8
8
  include Muwu
9
9
  include Helper
10
10
 
11
-
11
+
12
12
  attr_accessor(
13
13
  :key_validated,
14
14
  :project,
15
15
  :validation_method_name,
16
16
  :value_provided
17
17
  )
18
-
19
-
18
+
19
+
20
20
  def initialize(key_validated, value_provided, project)
21
21
  @key_validated = key_validated.to_s.gsub(/\W/,'_')
22
22
  @project = project
23
23
  @validation_method_name = "validate_option_#{@key_validated}"
24
24
  @value_provided = value_provided
25
25
  end
26
-
27
-
28
-
26
+
27
+
28
+
29
29
  public
30
-
31
-
30
+
31
+
32
32
  def validated_value
33
33
  if private_methods.include?(@validation_method_name.to_sym)
34
34
  return method(@validation_method_name).call
@@ -37,20 +37,6 @@ module Muwu
37
37
  return nil
38
38
  end
39
39
  end
40
-
41
-
42
- # def value_as_array(value)
43
- # result = []
44
- # if String === value
45
- # result = value.split(/,\s*/).map{ |v| value_as_string(v) }.sort
46
- # elsif Array === value
47
- # result = value.map{ |v| value_as_string(v) }.sort
48
- # elsif Boolean === @value_provided
49
- # result << value
50
- # end
51
- # result.reject!{ |r| r == '' }
52
- # result
53
- # end
54
40
 
55
41
 
56
42
  def value_as_array(value)
@@ -66,18 +52,23 @@ module Muwu
66
52
  result.reject!{ |r| r == '' }
67
53
  result
68
54
  end
69
-
70
-
55
+
56
+
71
57
  def value_as_integer(value)
72
58
  value.to_i
73
59
  end
74
-
75
-
60
+
61
+
76
62
  def value_as_string(value)
77
63
  value.to_s.strip.downcase
78
64
  end
79
-
80
-
65
+
66
+
67
+ def value_as_string_preserving_case(value)
68
+ value.to_s.strip
69
+ end
70
+
71
+
81
72
  def value_provided_as_array
82
73
  value_as_array(@value_provided)
83
74
  end
@@ -86,17 +77,22 @@ module Muwu
86
77
  def value_provided_as_integer
87
78
  value_as_integer(@value_provided)
88
79
  end
89
-
90
-
80
+
81
+
91
82
  def value_provided_as_string
92
83
  value_as_string(@value_provided)
93
84
  end
94
-
85
+
86
+
87
+ def value_provided_as_string_preserving_case
88
+ value_as_string_preserving_case(@value_provided)
89
+ end
90
+
95
91
 
96
92
 
97
93
  private
98
-
99
-
94
+
95
+
100
96
  def validate_option_boolean
101
97
  case @value_provided
102
98
  when false, true
@@ -108,23 +104,28 @@ module Muwu
108
104
  return nil
109
105
  end
110
106
  end
111
-
112
-
107
+
108
+
109
+ def validate_option_contents_section_numbers_receive_link
110
+ return validate_option_boolean
111
+ end
112
+
113
+
113
114
  def validate_option_generate_navigators_automatically
114
115
  return validate_option_boolean
115
116
  end
116
-
117
-
117
+
118
+
118
119
  def validate_option_generate_subcontents_automatically
119
120
  return validate_option_boolean
120
121
  end
121
-
122
-
122
+
123
+
123
124
  def validate_option_html_head_includes_metadata_tags
124
125
  return validate_option_boolean
125
126
  end
126
-
127
-
127
+
128
+
128
129
  def validate_option_html_lang
129
130
  case @value_provided
130
131
  when nil, 'nil'
@@ -139,18 +140,18 @@ module Muwu
139
140
  end
140
141
  end
141
142
  end
142
-
143
-
143
+
144
+
144
145
  def validate_option_html_uses_javascript_navigation
145
146
  return validate_option_boolean
146
147
  end
147
-
148
-
148
+
149
+
149
150
  def validate_option_markdown_allows_raw_html
150
151
  return validate_option_boolean
151
152
  end
152
-
153
-
153
+
154
+
154
155
  def validate_option_markdown_renderer
155
156
  value = value_provided_as_string
156
157
  case value
@@ -163,8 +164,8 @@ module Muwu
163
164
  return nil
164
165
  end
165
166
  end
166
-
167
-
167
+
168
+
168
169
  def validate_option_outline_text_pathnames
169
170
  value = value_provided_as_string
170
171
  case value
@@ -175,8 +176,8 @@ module Muwu
175
176
  return nil
176
177
  end
177
178
  end
178
-
179
-
179
+
180
+
180
181
  def validate_option_output_destination
181
182
  value = value_provided_as_string
182
183
  case value
@@ -200,22 +201,22 @@ module Muwu
200
201
  return nil
201
202
  end
202
203
  end
203
-
204
-
204
+
205
+
205
206
  def validate_option_output_file_css_basename
206
207
  return validate_option_output_file_basename
207
208
  end
208
-
209
-
209
+
210
+
210
211
  def validate_option_output_file_html_basename
211
212
  return validate_option_output_file_basename
212
213
  end
213
-
214
-
214
+
215
+
215
216
  def validate_option_output_file_js_basename
216
217
  return validate_option_output_file_basename
217
218
  end
218
-
219
+
219
220
 
220
221
  def validate_option_output_formats
221
222
  result = []
@@ -229,13 +230,23 @@ module Muwu
229
230
  end
230
231
  return result
231
232
  end
232
-
233
-
233
+
234
+
235
+ def validate_option_remote_publish
236
+ return value_provided_as_string_preserving_case
237
+ end
238
+
239
+
240
+ def validate_option_remote_sync
241
+ return value_provided_as_string_preserving_case
242
+ end
243
+
244
+
234
245
  def validate_option_render_punctuation_smart
235
246
  return validate_option_boolean
236
247
  end
237
-
238
-
248
+
249
+
239
250
  def validate_option_render_section_end_links
240
251
  result = []
241
252
  value_provided_as_array.each do |value|
@@ -252,12 +263,12 @@ module Muwu
252
263
  end
253
264
  return result
254
265
  end
255
-
256
-
266
+
267
+
257
268
  def validate_option_render_section_numbers
258
269
  return validate_option_boolean
259
270
  end
260
-
271
+
261
272
 
262
273
  def validate_option_render_sections_distinctly_depth_max
263
274
  case @value_provided
@@ -270,8 +281,8 @@ module Muwu
270
281
  return nil
271
282
  end
272
283
  end
273
-
274
-
284
+
285
+
275
286
  def validate_option_render_title_section_metadata
276
287
  case @value_provided
277
288
  when nil, '', 'nil'
@@ -284,17 +295,22 @@ module Muwu
284
295
  return [@value_provided.to_s].flatten
285
296
  end
286
297
  end
287
-
288
-
298
+
299
+
289
300
  def validate_option_render_punctuation_smart
290
301
  return validate_option_boolean
291
302
  end
292
-
293
-
303
+
304
+
305
+ def validate_option_rsync_options
306
+ return value_provided_as_array
307
+ end
308
+
309
+
294
310
  def validate_option_warning_if_parent_heading_lacks_source
295
311
  return validate_option_boolean
296
312
  end
297
-
298
-
313
+
314
+
299
315
  end
300
- end
316
+ end