yarrow 0.4.3 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +23 -0
  3. data/.gitignore +8 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +20 -0
  6. data/README.md +59 -0
  7. data/Rakefile +18 -0
  8. data/SERVER.md +41 -0
  9. data/lib/yarrow.rb +18 -5
  10. data/lib/yarrow/config.rb +59 -0
  11. data/lib/yarrow/configuration.rb +35 -63
  12. data/lib/yarrow/content/collection_expander.rb +218 -0
  13. data/lib/yarrow/content/content_type.rb +42 -0
  14. data/lib/yarrow/content/graph.rb +33 -0
  15. data/lib/yarrow/content/source.rb +11 -0
  16. data/lib/yarrow/content/source_collector.rb +55 -0
  17. data/lib/yarrow/extensions.rb +1 -0
  18. data/lib/yarrow/extensions/mementus.rb +24 -0
  19. data/lib/yarrow/output/context.rb +0 -6
  20. data/lib/yarrow/output/generator.rb +2 -2
  21. data/lib/yarrow/output/web/indexed_file.rb +39 -0
  22. data/lib/yarrow/process/expand_content.rb +12 -0
  23. data/lib/yarrow/process/extract_source.rb +12 -0
  24. data/lib/yarrow/process/project_manifest.rb +20 -0
  25. data/lib/yarrow/process/step_processor.rb +43 -0
  26. data/lib/yarrow/process/workflow.rb +36 -0
  27. data/lib/yarrow/schema.rb +132 -0
  28. data/lib/yarrow/schema/validations/array.rb +0 -0
  29. data/lib/yarrow/schema/validations/object.rb +0 -0
  30. data/lib/yarrow/schema/validations/string.rb +0 -0
  31. data/lib/yarrow/server.rb +8 -5
  32. data/lib/yarrow/source/graph.rb +6 -0
  33. data/lib/yarrow/symbols.rb +19 -0
  34. data/lib/yarrow/tools/content_utils.rb +66 -0
  35. data/lib/yarrow/tools/front_matter.rb +4 -2
  36. data/lib/yarrow/version.rb +3 -2
  37. data/lib/yarrow/web/html_document.rb +9 -0
  38. data/lib/yarrow/web/manifest.rb +9 -0
  39. data/lib/yarrow/web/static_asset.rb +9 -0
  40. data/lib/yarrow/web/template.rb +9 -0
  41. data/yarrow.gemspec +30 -0
  42. metadata +61 -47
  43. data/lib/yarrow/html.rb +0 -1
  44. data/lib/yarrow/html/asset_tags.rb +0 -59
  45. data/lib/yarrow/html/content_tags.rb +0 -7
  46. data/lib/yarrow/tools/output_file.rb +0 -40
File without changes
File without changes
File without changes
data/lib/yarrow/server.rb CHANGED
@@ -4,18 +4,21 @@ module Yarrow
4
4
  ##
5
5
  # Little web server for browsing local files.
6
6
  class Server
7
- include Configurable
7
+ attr_reader :config
8
8
 
9
- def initialize
10
- if config.server.nil?
11
- raise ConfigurationError.new('Missing server entry')
9
+ def initialize(instance_config)
10
+ if instance_config.server.nil?
11
+ raise ConfigurationError.new("Missing server entry")
12
12
  end
13
+
14
+ @config = instance_config
13
15
  end
14
16
 
15
17
  ##
16
18
  # Rack Middleware for detecting and serving an 'index.html' file
17
19
  # instead of a directory index.
18
20
  #
21
+ # TODO: Fix bug where a directory /index.html/ causes this to crash
19
22
  # TODO: Add configurable mapping and media types for README files as an alternative
20
23
  class DirectoryIndex
21
24
  def initialize(app, options={})
@@ -97,7 +100,7 @@ module Yarrow
97
100
  ##
98
101
  # @return [String]
99
102
  def docroot
100
- config.output_dir || Dir.pwd
103
+ config.output_dir
101
104
  end
102
105
 
103
106
  ##
@@ -0,0 +1,6 @@
1
+ module Yarrow
2
+ module Source
3
+ class Graph
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,19 @@
1
+ require "strings-inflection"
2
+ require "strings-case"
3
+
4
+ module Yarrow
5
+ module Symbols
6
+ # Converts an atomic content identifier to a live class constant.
7
+ def self.to_const(atom)
8
+ Object.const_get(Strings::Case.pascalcase(atom.to_s).to_sym)
9
+ end
10
+
11
+ def self.to_singular(atom)
12
+ Strings::Inflection.singularize(atom.to_s).to_sym
13
+ end
14
+
15
+ def self.to_plural(atom)
16
+ Strings::Inflection.pluralize(atom.to_s).to_sym
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,66 @@
1
+ module Yarrow
2
+ module Tools
3
+ # Synchronous utility functions for working with filesystem content tasks.
4
+ module ContentUtils
5
+ # Pass in a source path and get back a parsed representation of the
6
+ # content if it is in a known text format. Mostly used as a fallback if
7
+ # a custom parser or processing chain is not configured for a content
8
+ # type.
9
+ #
10
+ # Supported formats:
11
+ # - HTML template and document partials
12
+ # - Markdown documents
13
+ # - YAML documents
14
+ # - JSON (untested)
15
+ #
16
+ # Works around meta and content source in multiple files or a single
17
+ # file with front matter.
18
+ def read(name)
19
+ path = if name.is_a?(Pathname)
20
+ name
21
+ else
22
+ Pathname.new(name)
23
+ end
24
+
25
+ text = File.read(path, :encoding => 'utf-8')
26
+
27
+ case path.extname
28
+ when '.htm', '.md', '.txt', '.yfm'
29
+ extract_yfm(text, symbolize_keys: true)
30
+ # when '.md'
31
+ # body, data = read_split_content(path.to_s, symbolize_keys: true)
32
+ # [Kramdown::Document.new(body).to_html, data]
33
+ when '.yml'
34
+ [nil, YAML.load(File.read(path.to_s), symbolize_names: true)]
35
+ when '.json'
36
+ [nil, JSON.parse(File.read(path.to_s))]
37
+ end
38
+ end
39
+
40
+ def extract_yfm(text, options={})
41
+ pattern = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
42
+ if text =~ pattern
43
+ content = text.sub(pattern, "")
44
+
45
+ begin
46
+ if options.key?(:symbolize_keys)
47
+ meta = YAML.load($1, symbolize_names: true)
48
+ else
49
+ meta = YAML.load($1)
50
+ end
51
+ return [content, meta]
52
+ rescue Psych::SyntaxError => error
53
+ if defined? ::Logger
54
+ # todo: application wide logger
55
+ #logger = ::Logger.new(STDOUT)
56
+ #logger.error "#{error.message}"
57
+ end
58
+ return [content, nil]
59
+ end
60
+ end
61
+
62
+ [text, nil]
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,5 +1,7 @@
1
1
  module Yarrow
2
2
  module Tools
3
+ # @deprecated
4
+ # Maintained here as it is still used in a number of places but needs to be removed soon
3
5
  module FrontMatter
4
6
 
5
7
  def read_split_content(path, options={})
@@ -21,8 +23,8 @@ module Yarrow
21
23
  rescue Psych::SyntaxError => error
22
24
  if defined? ::Logger
23
25
  # todo: application wide logger
24
- logger = ::Logger.new(STDOUT)
25
- logger.error "#{error.message}"
26
+ #logger = ::Logger.new(STDOUT)
27
+ #logger.error "#{error.message}"
26
28
  end
27
29
  return [content, nil]
28
30
  end
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
1
2
  module Yarrow
2
- APP_NAME = 'Yarrow'.freeze
3
- VERSION = '0.4.3'.freeze
3
+ APP_NAME = 'Yarrow'
4
+ VERSION = '0.6.2'
4
5
  end
@@ -0,0 +1,9 @@
1
+ module Yarrow
2
+ module Web
3
+ class HTMLDocument
4
+ def initialize
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Yarrow
2
+ module Web
3
+ class Manifest
4
+ def initialize
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Yarrow
2
+ module Web
3
+ class StaticAsset
4
+ def initialize
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Yarrow
2
+ module Web
3
+ class Template
4
+ def initialize
5
+
6
+ end
7
+ end
8
+ end
9
+ end
data/yarrow.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+
3
+ require 'yarrow/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'yarrow'
7
+ spec.version = Yarrow::VERSION
8
+ spec.platform = Gem::Platform::RUBY
9
+ spec.summary = 'Documentation generator based on a fluent data model.'
10
+ spec.description = 'Yarrow is a tool for generating well structured documentation from a variety of input sources.'
11
+ spec.authors = ['Mark Rickerby']
12
+ spec.email = 'me@maetl.net'
13
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
14
+ spec.executables << 'yarrow'
15
+ spec.executables << 'yarrow-server'
16
+ spec.add_runtime_dependency 'mementus', '~> 0.8'
17
+ spec.add_runtime_dependency 'rack', '~> 2.0'
18
+ spec.add_runtime_dependency 'rack-livereload', '~> 0.3'
19
+ spec.add_runtime_dependency 'eventmachine', '~> 1.2'
20
+ spec.add_runtime_dependency 'em-websocket', '~> 0.5.1'
21
+ spec.add_runtime_dependency 'strings-inflection', '~> 0.1'
22
+ spec.add_runtime_dependency 'strings-case', '~> 0.3'
23
+ spec.add_development_dependency 'bundler', '~> 2.2.9'
24
+ spec.add_development_dependency 'rake', '~> 13.0'
25
+ spec.add_development_dependency 'rspec', '~> 3.10'
26
+ spec.add_development_dependency 'coveralls', '~> 0.8.23'
27
+ spec.add_development_dependency 'rack-test', '~> 0.8'
28
+ spec.homepage = 'http://rubygemspec.org/gems/yarrow'
29
+ spec.license = 'MIT'
30
+ end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yarrow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Rickerby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-11 00:00:00.000000000 Z
11
+ date: 2021-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: hashie
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '3.5'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '3.5'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: mementus
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +24,6 @@ dependencies:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
26
  version: '0.8'
41
- - !ruby/object:Gem::Dependency
42
- name: activesupport
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '5.1'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '5.1'
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: rack
57
29
  requirement: !ruby/object:Gem::Requirement
@@ -109,75 +81,89 @@ dependencies:
109
81
  - !ruby/object:Gem::Version
110
82
  version: 0.5.1
111
83
  - !ruby/object:Gem::Dependency
112
- name: sprockets
84
+ name: strings-inflection
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
87
  - - "~>"
116
88
  - !ruby/object:Gem::Version
117
- version: '3.7'
89
+ version: '0.1'
118
90
  type: :runtime
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
94
  - - "~>"
123
95
  - !ruby/object:Gem::Version
124
- version: '3.7'
96
+ version: '0.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: strings-case
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.3'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.3'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: bundler
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '1.16'
117
+ version: 2.2.9
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '1.16'
124
+ version: 2.2.9
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: rake
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - "~>"
144
130
  - !ruby/object:Gem::Version
145
- version: '12.3'
131
+ version: '13.0'
146
132
  type: :development
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
- version: '12.3'
138
+ version: '13.0'
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: rspec
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - "~>"
158
144
  - !ruby/object:Gem::Version
159
- version: '3.7'
145
+ version: '3.10'
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - "~>"
165
151
  - !ruby/object:Gem::Version
166
- version: '3.7'
152
+ version: '3.10'
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: coveralls
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
157
  - - "~>"
172
158
  - !ruby/object:Gem::Version
173
- version: 0.8.21
159
+ version: 0.8.23
174
160
  type: :development
175
161
  prerelease: false
176
162
  version_requirements: !ruby/object:Gem::Requirement
177
163
  requirements:
178
164
  - - "~>"
179
165
  - !ruby/object:Gem::Version
180
- version: 0.8.21
166
+ version: 0.8.23
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: rack-test
183
169
  requirement: !ruby/object:Gem::Requirement
@@ -201,29 +187,58 @@ executables:
201
187
  extensions: []
202
188
  extra_rdoc_files: []
203
189
  files:
190
+ - ".github/workflows/ruby.yml"
191
+ - ".gitignore"
192
+ - Gemfile
193
+ - LICENSE
194
+ - README.md
195
+ - Rakefile
196
+ - SERVER.md
204
197
  - bin/yarrow
205
198
  - bin/yarrow-server
206
199
  - lib/yarrow.rb
207
200
  - lib/yarrow/assets.rb
208
201
  - lib/yarrow/assets/manifest.rb
209
202
  - lib/yarrow/assets/pipeline.rb
203
+ - lib/yarrow/config.rb
210
204
  - lib/yarrow/configuration.rb
211
205
  - lib/yarrow/console_runner.rb
206
+ - lib/yarrow/content/collection_expander.rb
207
+ - lib/yarrow/content/content_type.rb
208
+ - lib/yarrow/content/graph.rb
209
+ - lib/yarrow/content/source.rb
210
+ - lib/yarrow/content/source_collector.rb
212
211
  - lib/yarrow/content_map.rb
213
212
  - lib/yarrow/defaults.yml
213
+ - lib/yarrow/extensions.rb
214
+ - lib/yarrow/extensions/mementus.rb
214
215
  - lib/yarrow/generator.rb
215
- - lib/yarrow/html.rb
216
- - lib/yarrow/html/asset_tags.rb
217
- - lib/yarrow/html/content_tags.rb
218
216
  - lib/yarrow/logging.rb
219
217
  - lib/yarrow/output/context.rb
220
218
  - lib/yarrow/output/generator.rb
221
219
  - lib/yarrow/output/mapper.rb
220
+ - lib/yarrow/output/web/indexed_file.rb
221
+ - lib/yarrow/process/expand_content.rb
222
+ - lib/yarrow/process/extract_source.rb
223
+ - lib/yarrow/process/project_manifest.rb
224
+ - lib/yarrow/process/step_processor.rb
225
+ - lib/yarrow/process/workflow.rb
226
+ - lib/yarrow/schema.rb
227
+ - lib/yarrow/schema/validations/array.rb
228
+ - lib/yarrow/schema/validations/object.rb
229
+ - lib/yarrow/schema/validations/string.rb
222
230
  - lib/yarrow/server.rb
223
231
  - lib/yarrow/server/livereload.rb
232
+ - lib/yarrow/source/graph.rb
233
+ - lib/yarrow/symbols.rb
234
+ - lib/yarrow/tools/content_utils.rb
224
235
  - lib/yarrow/tools/front_matter.rb
225
- - lib/yarrow/tools/output_file.rb
226
236
  - lib/yarrow/version.rb
237
+ - lib/yarrow/web/html_document.rb
238
+ - lib/yarrow/web/manifest.rb
239
+ - lib/yarrow/web/static_asset.rb
240
+ - lib/yarrow/web/template.rb
241
+ - yarrow.gemspec
227
242
  homepage: http://rubygemspec.org/gems/yarrow
228
243
  licenses:
229
244
  - MIT
@@ -243,8 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
258
  - !ruby/object:Gem::Version
244
259
  version: '0'
245
260
  requirements: []
246
- rubyforge_project:
247
- rubygems_version: 2.7.6
261
+ rubygems_version: 3.1.2
248
262
  signing_key:
249
263
  specification_version: 4
250
264
  summary: Documentation generator based on a fluent data model.