yarrow 0.5.0 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
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.