yarrow 0.5.0 → 0.6.3

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +23 -0
  3. data/.gitignore +2 -1
  4. data/README.md +13 -19
  5. data/Rakefile +15 -1
  6. data/lib/yarrow.rb +17 -6
  7. data/lib/yarrow/config.rb +59 -0
  8. data/lib/yarrow/configuration.rb +35 -63
  9. data/lib/yarrow/content/collection_expander.rb +218 -0
  10. data/lib/yarrow/content/content_type.rb +42 -0
  11. data/lib/yarrow/content/graph.rb +13 -21
  12. data/lib/yarrow/content/source.rb +11 -0
  13. data/lib/yarrow/extensions.rb +1 -0
  14. data/lib/yarrow/extensions/mementus.rb +24 -0
  15. data/lib/yarrow/output/context.rb +0 -4
  16. data/lib/yarrow/output/generator.rb +2 -2
  17. data/lib/yarrow/output/web/indexed_file.rb +39 -0
  18. data/lib/yarrow/process/expand_content.rb +12 -0
  19. data/lib/yarrow/process/extract_source.rb +12 -0
  20. data/lib/yarrow/process/project_manifest.rb +20 -0
  21. data/lib/yarrow/process/step_processor.rb +43 -0
  22. data/lib/yarrow/process/workflow.rb +36 -0
  23. data/lib/yarrow/schema.rb +132 -0
  24. data/lib/yarrow/schema/validations/array.rb +0 -0
  25. data/lib/yarrow/schema/validations/object.rb +0 -0
  26. data/lib/yarrow/schema/validations/string.rb +0 -0
  27. data/lib/yarrow/server.rb +8 -5
  28. data/lib/yarrow/source/graph.rb +6 -0
  29. data/lib/yarrow/symbols.rb +19 -0
  30. data/lib/yarrow/tools/content_utils.rb +74 -0
  31. data/lib/yarrow/tools/front_matter.rb +4 -2
  32. data/lib/yarrow/version.rb +3 -2
  33. data/lib/yarrow/web/html_document.rb +9 -0
  34. data/lib/yarrow/web/manifest.rb +9 -0
  35. data/lib/yarrow/web/static_asset.rb +9 -0
  36. data/lib/yarrow/web/template.rb +9 -0
  37. data/yarrow.gemspec +6 -7
  38. metadata +52 -48
  39. data/.travis.yml +0 -16
  40. data/lib/yarrow/html.rb +0 -1
  41. data/lib/yarrow/html/asset_tags.rb +0 -59
  42. data/lib/yarrow/html/content_tags.rb +0 -7
  43. 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,74 @@
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_yfm(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
+
65
+ def write_yfm(name, text, meta)
66
+ # Symbolized keys are better to deal with when manipulating data in
67
+ # Ruby but are an interop nightmare when serialized so here we do a
68
+ # round-trip through JSON encoding to ensure all keys are string
69
+ # encoded before dumping them to the front matter format.
70
+ File.write(name, [YAML.dump(meta.to_json), "---", text].join("\n"))
71
+ end
72
+ end
73
+ end
74
+ 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.5.0'.freeze
3
+ APP_NAME = 'Yarrow'
4
+ VERSION = '0.6.3'
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 CHANGED
@@ -13,18 +13,17 @@ Gem::Specification.new do |spec|
13
13
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
14
14
  spec.executables << 'yarrow'
15
15
  spec.executables << 'yarrow-server'
16
- spec.add_runtime_dependency 'hashie', '~> 3.5'
17
16
  spec.add_runtime_dependency 'mementus', '~> 0.8'
18
- spec.add_runtime_dependency 'activesupport', '~> 5.1'
19
17
  spec.add_runtime_dependency 'rack', '~> 2.0'
20
18
  spec.add_runtime_dependency 'rack-livereload', '~> 0.3'
21
19
  spec.add_runtime_dependency 'eventmachine', '~> 1.2'
22
20
  spec.add_runtime_dependency 'em-websocket', '~> 0.5.1'
23
- spec.add_runtime_dependency 'sprockets', '~> 3.7'
24
- spec.add_development_dependency 'bundler', '~> 1.16'
25
- spec.add_development_dependency 'rake', '~> 12.3'
26
- spec.add_development_dependency 'rspec', '~> 3.7'
27
- spec.add_development_dependency 'coveralls', '~> 0.8.21'
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'
28
27
  spec.add_development_dependency 'rack-test', '~> 0.8'
29
28
  spec.homepage = 'http://rubygemspec.org/gems/yarrow'
30
29
  spec.license = 'MIT'
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.5.0
4
+ version: 0.6.3
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-18 00:00:00.000000000 Z
11
+ date: 2021-03-29 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,8 +187,8 @@ executables:
201
187
  extensions: []
202
188
  extra_rdoc_files: []
203
189
  files:
190
+ - ".github/workflows/ruby.yml"
204
191
  - ".gitignore"
205
- - ".travis.yml"
206
192
  - Gemfile
207
193
  - LICENSE
208
194
  - README.md
@@ -214,25 +200,44 @@ files:
214
200
  - lib/yarrow/assets.rb
215
201
  - lib/yarrow/assets/manifest.rb
216
202
  - lib/yarrow/assets/pipeline.rb
203
+ - lib/yarrow/config.rb
217
204
  - lib/yarrow/configuration.rb
218
205
  - lib/yarrow/console_runner.rb
206
+ - lib/yarrow/content/collection_expander.rb
207
+ - lib/yarrow/content/content_type.rb
219
208
  - lib/yarrow/content/graph.rb
209
+ - lib/yarrow/content/source.rb
220
210
  - lib/yarrow/content/source_collector.rb
221
211
  - lib/yarrow/content_map.rb
222
212
  - lib/yarrow/defaults.yml
213
+ - lib/yarrow/extensions.rb
214
+ - lib/yarrow/extensions/mementus.rb
223
215
  - lib/yarrow/generator.rb
224
- - lib/yarrow/html.rb
225
- - lib/yarrow/html/asset_tags.rb
226
- - lib/yarrow/html/content_tags.rb
227
216
  - lib/yarrow/logging.rb
228
217
  - lib/yarrow/output/context.rb
229
218
  - lib/yarrow/output/generator.rb
230
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
231
230
  - lib/yarrow/server.rb
232
231
  - lib/yarrow/server/livereload.rb
232
+ - lib/yarrow/source/graph.rb
233
+ - lib/yarrow/symbols.rb
234
+ - lib/yarrow/tools/content_utils.rb
233
235
  - lib/yarrow/tools/front_matter.rb
234
- - lib/yarrow/tools/output_file.rb
235
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
236
241
  - yarrow.gemspec
237
242
  homepage: http://rubygemspec.org/gems/yarrow
238
243
  licenses:
@@ -253,8 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
253
258
  - !ruby/object:Gem::Version
254
259
  version: '0'
255
260
  requirements: []
256
- rubyforge_project:
257
- rubygems_version: 2.7.6
261
+ rubygems_version: 3.1.2
258
262
  signing_key:
259
263
  specification_version: 4
260
264
  summary: Documentation generator based on a fluent data model.