trifle-docs 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.byebug_history +2 -0
  3. data/.devcontainer.json +6 -0
  4. data/.devops/docker/codespaces/Dockerfile +1 -0
  5. data/.devops/docker/codespaces/docker-compose.yml +9 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +15 -0
  8. data/CHANGELOG.md +5 -0
  9. data/CODE_OF_CONDUCT.md +84 -0
  10. data/Gemfile +12 -0
  11. data/Gemfile.lock +81 -0
  12. data/LICENSE +21 -0
  13. data/README.md +123 -0
  14. data/Rakefile +12 -0
  15. data/demo.gif +0 -0
  16. data/docs/asdf.txt +1 -0
  17. data/docs/blog/2022-06-20_getting_started_with_trifle_docs.md +41 -0
  18. data/docs/blog/2022-06-27_advanced_documentation.md +10 -0
  19. data/docs/blog/screen.png +0 -0
  20. data/docs/blog.md +7 -0
  21. data/docs/example/snippet.md +7 -0
  22. data/docs/example.md +8 -0
  23. data/docs/index.md +7 -0
  24. data/docs/projects/kindergarden.md +8 -0
  25. data/docs/projects/petite_project.md +8 -0
  26. data/docs/projects/rugby_team.md +8 -0
  27. data/docs/projects.md +9 -0
  28. data/docs/test/case.md +8 -0
  29. data/docs/test/index.md +8 -0
  30. data/docs/test/sample.md +8 -0
  31. data/lib/trifle/docs/app.rb +30 -0
  32. data/lib/trifle/docs/configuration.rb +25 -0
  33. data/lib/trifle/docs/harvester/file.rb +32 -0
  34. data/lib/trifle/docs/harvester/markdown.rb +55 -0
  35. data/lib/trifle/docs/harvester.rb +86 -0
  36. data/lib/trifle/docs/helper/tree.rb +39 -0
  37. data/lib/trifle/docs/operations/collection.rb +24 -0
  38. data/lib/trifle/docs/operations/content.rb +24 -0
  39. data/lib/trifle/docs/operations/meta.rb +24 -0
  40. data/lib/trifle/docs/operations/sitemap.rb +21 -0
  41. data/lib/trifle/docs/version.rb +7 -0
  42. data/lib/trifle/docs.rb +53 -0
  43. data/sig/trifle/docs.rbs +6 -0
  44. data/templates/simple/layout.erb +12 -0
  45. data/templates/simple/page.erb +32 -0
  46. data/trifle-docs.gemspec +51 -0
  47. metadata +233 -0
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require 'redcarpet'
5
+ require 'rouge'
6
+ require 'rouge/plugins/redcarpet'
7
+
8
+ module Trifle
9
+ module Docs
10
+ module Harvester
11
+ module Markdown
12
+ class Render < Redcarpet::Render::HTML
13
+ include Rouge::Plugins::Redcarpet
14
+ end
15
+
16
+ class Sieve < Harvester::Sieve
17
+ def match?
18
+ file.end_with?('.md')
19
+ end
20
+
21
+ def to_url
22
+ file.gsub(%r{^#{path}/}, '')
23
+ .gsub(%r{/?index\.md}, '')
24
+ .gsub(/\.md/, '')
25
+ end
26
+ end
27
+
28
+ class Conveyor < Harvester::Conveyor
29
+ def content
30
+ @content ||= Redcarpet::Markdown.new(
31
+ Render.new(with_toc_data: true),
32
+ fenced_code_blocks: true,
33
+ disable_indented_code_blocks: true,
34
+ footnotes: true
35
+ ).render(data.gsub(/^---(.*?)---(\s*)/m, ''))
36
+ end
37
+
38
+ def meta
39
+ @meta ||= YAML.load_file(file).merge(
40
+ 'url' => "/#{url}",
41
+ 'breadcrumbs' => url.split('/'),
42
+ 'toc' => toc
43
+ )
44
+ end
45
+
46
+ def toc
47
+ @toc ||= Redcarpet::Markdown.new(
48
+ Redcarpet::Render::HTML_TOC
49
+ ).render(data.gsub(/^---(.*?)---(\s*)/m, ''))
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trifle
4
+ module Docs
5
+ module Harvester
6
+ class Walker
7
+ attr_reader :path, :router
8
+
9
+ def initialize(**keywords)
10
+ @path = keywords.fetch(:path)
11
+ @harvesters = keywords.fetch(:harvesters)
12
+ @router = {}
13
+
14
+ gather
15
+ end
16
+
17
+ def gather
18
+ Dir["#{path}/**/*.*"].each do |file|
19
+ @harvesters.each do |harvester|
20
+ sieve = harvester::Sieve.new(path: path, file: file)
21
+ if sieve.match?
22
+ @router[sieve.to_url] = harvester::Conveyor.new(file: file, url: sieve.to_url)
23
+ break
24
+ end
25
+ end
26
+ end
27
+ true
28
+ end
29
+
30
+ def sitemap
31
+ @sitemap ||= begin
32
+ mapping = router.keys.each_with_object({}) do |url, out|
33
+ out[url] = meta_for(url: url)
34
+ end
35
+
36
+ Trifle::Docs::Helper::Tree.new(mapping: mapping).menu
37
+ end
38
+ end
39
+
40
+ def collection_for(url:)
41
+ return sitemap if url.empty?
42
+
43
+ sitemap.dig(*url.split('/'))
44
+ end
45
+
46
+ def content_for(url:)
47
+ @router[url].content
48
+ end
49
+
50
+ def meta_for(url:)
51
+ @router[url].meta
52
+ end
53
+ end
54
+
55
+ class Sieve
56
+ attr_reader :path, :file
57
+
58
+ def initialize(path:, file:)
59
+ @path = path
60
+ @file = file
61
+ end
62
+
63
+ def match?
64
+ raise 'Not Impelemented'
65
+ end
66
+
67
+ def to_url
68
+ raise 'Not Impelemented'
69
+ end
70
+ end
71
+
72
+ class Conveyor
73
+ attr_reader :file, :url
74
+
75
+ def initialize(file:, url:)
76
+ @file = file
77
+ @url = url
78
+ end
79
+
80
+ def data
81
+ @data ||= ::File.read(file)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trifle
4
+ module Docs
5
+ module Helper
6
+ class Tree
7
+ attr_reader :mapping
8
+
9
+ def initialize(mapping:)
10
+ @mapping = mapping
11
+ end
12
+
13
+ def menu
14
+ @menu ||= mapping.inject({}) do |out, (url, meta)|
15
+ deep_merge(
16
+ out, url.split('/').reverse.inject({ '_meta' => meta }) { |o, k| { k => o } }
17
+ )
18
+ end
19
+ end
20
+
21
+ def deep_merge(this_hash, other_hash, &block)
22
+ deep_merge!(this_hash.dup, other_hash, &block)
23
+ end
24
+
25
+ def deep_merge!(this_hash, other_hash, &block)
26
+ this_hash.merge!(other_hash) do |key, this_val, other_val|
27
+ if this_val.is_a?(Hash) && other_val.is_a?(Hash)
28
+ deep_merge(this_val, other_val, &block)
29
+ elsif block_given?
30
+ block.call(key, this_val, other_val)
31
+ else
32
+ other_val
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trifle
4
+ module Docs
5
+ module Operations
6
+ class Collection
7
+ attr_reader :url
8
+
9
+ def initialize(**keywords)
10
+ @url = keywords.fetch(:url)
11
+ @config = keywords[:config]
12
+ end
13
+
14
+ def config
15
+ @config || Trifle::Docs.default
16
+ end
17
+
18
+ def perform
19
+ config.harvester.collection_for(url: url)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trifle
4
+ module Docs
5
+ module Operations
6
+ class Content
7
+ attr_reader :url
8
+
9
+ def initialize(**keywords)
10
+ @url = keywords.fetch(:url)
11
+ @config = keywords[:config]
12
+ end
13
+
14
+ def config
15
+ @config || Trifle::Docs.default
16
+ end
17
+
18
+ def perform
19
+ config.harvester.content_for(url: url)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trifle
4
+ module Docs
5
+ module Operations
6
+ class Meta
7
+ attr_reader :url
8
+
9
+ def initialize(**keywords)
10
+ @url = keywords.fetch(:url)
11
+ @config = keywords[:config]
12
+ end
13
+
14
+ def config
15
+ @config || Trifle::Docs.default
16
+ end
17
+
18
+ def perform
19
+ config.harvester.meta_for(url: url)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trifle
4
+ module Docs
5
+ module Operations
6
+ class Sitemap
7
+ def initialize(**keywords)
8
+ @config = keywords[:config]
9
+ end
10
+
11
+ def config
12
+ @config || Trifle::Docs.default
13
+ end
14
+
15
+ def perform
16
+ config.harvester.sitemap
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trifle
4
+ module Docs
5
+ VERSION = '0.1.0'
6
+ end
7
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'docs/configuration'
4
+ require_relative 'docs/helper/tree'
5
+ require_relative 'docs/harvester'
6
+ require_relative 'docs/harvester/file'
7
+ require_relative 'docs/harvester/markdown'
8
+ require_relative 'docs/operations/content'
9
+ require_relative 'docs/operations/collection'
10
+ require_relative 'docs/operations/meta'
11
+ require_relative 'docs/operations/sitemap'
12
+ require_relative 'docs/version'
13
+ require_relative 'docs/app' # NOTE: Load app last
14
+
15
+ module Trifle
16
+ module Docs
17
+ class Error < StandardError; end
18
+
19
+ def self.default
20
+ @default ||= Configuration.new
21
+ end
22
+
23
+ def self.configure
24
+ yield(default)
25
+
26
+ default
27
+ end
28
+
29
+ def self.content(url:, config: nil)
30
+ Trifle::Docs::Operations::Content.new(
31
+ url: url, config: config
32
+ ).perform
33
+ end
34
+
35
+ def self.meta(url:, config: nil)
36
+ Trifle::Docs::Operations::Meta.new(
37
+ url: url, config: config
38
+ ).perform
39
+ end
40
+
41
+ def self.collection(url:, config: nil)
42
+ Trifle::Docs::Operations::Collection.new(
43
+ url: url, config: config
44
+ ).perform
45
+ end
46
+
47
+ def self.sitemap(config: nil)
48
+ Trifle::Docs::Operations::Sitemap.new(
49
+ config: config
50
+ ).perform
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,6 @@
1
+ module Trifle
2
+ module Docs
3
+ VERSION: String
4
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Trifle::Docs</title>
5
+ <style>
6
+ <%= Rouge::Themes::Github.new.render %>
7
+ </style>
8
+ </head>
9
+ <body>
10
+ <%= yield %>
11
+ </body>
12
+ </html>
@@ -0,0 +1,32 @@
1
+ <ul>
2
+ <% sitemap.sort_by {|(key, option)| option.dig('_meta', 'nav_order') || 0 }.each do |(key, option)| %>
3
+ <% next if key == '_meta' %>
4
+ <li>
5
+ <a href="<%= option.dig('_meta', 'url') %>"><%= option.dig('_meta', 'title') %></a>
6
+ <ul>
7
+ <% option.sort_by {|(key, option)| option.dig('_meta', 'nav_order') || 0 }.each do |(key, option)| %>
8
+ <% next if key == '_meta' %>
9
+ <li><a href="<%= option.dig('_meta', 'url') %>"><%= option.dig('_meta', 'title') %></a></li>
10
+ <% end %>
11
+ </ul>
12
+ </li>
13
+ <% end %>
14
+ </ul>
15
+
16
+ Breadcrumbs: <% meta['breadcrumbs'].count.times do |i| %>
17
+ <% page = sitemap.dig(*meta['breadcrumbs'].take(i+1)) %>
18
+ <a href="<%= page.dig('_meta', 'url') %>"><%= page.dig('_meta', 'title') %></a>
19
+ <% next if i+1 == meta['breadcrumbs'].count %>
20
+ /
21
+ <% end %>
22
+
23
+ <%= content %>
24
+
25
+ <% if meta['type'] == 'collection' %>
26
+ <ul>
27
+ <% collection.sort_by {|(key, option)| option.dig('_meta', 'nav_order') || 0 }.each do |(key, option)| %>
28
+ <% next if key == '_meta' %>
29
+ <li><a href="<%= option.dig('_meta', 'url') %>"><%= option.dig('_meta', 'title') %></a></li>
30
+ <% end %>
31
+ </ul>
32
+ <% end %>
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/trifle/docs/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "trifle-docs"
7
+ spec.version = Trifle::Docs::VERSION
8
+ spec.authors = ["Jozef Vaclavik"]
9
+ spec.email = ["jozef@hey.com"]
10
+
11
+ spec.summary = "Simple documentation for your markdown files."
12
+ spec.description = "Trifle::Docs is way too simple documentation app. "\
13
+ 'It uses your markdown files and structure to build '\
14
+ 'up your documentation. You can use it as a standalone '\
15
+ 'app or mount it in your Rails app.'
16
+ spec.homepage = 'https://trifle.io'
17
+ spec.license = "MIT"
18
+ spec.required_ruby_version = ">= 2.6.0"
19
+
20
+ spec.metadata['homepage_uri'] = spec.homepage
21
+ spec.metadata['source_code_uri'] = 'https://github.com/trifle-io/trifle-docs'
22
+ spec.metadata["changelog_uri"] = "https://github.com/trifle-io/trifle-docs/blob/main/CHANGELOG.md"
23
+
24
+ # Specify which files should be added to the gem when it is released.
25
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
+ spec.files = Dir.chdir(__dir__) do
27
+ `git ls-files -z`.split("\x0").reject do |f|
28
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
29
+ end
30
+ end
31
+ spec.bindir = "exe"
32
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
33
+ spec.require_paths = ["lib"]
34
+
35
+ # Uncomment to register a new dependency of your gem
36
+ # spec.add_dependency "example-gem", "~> 1.0"
37
+ spec.add_development_dependency('bundler', '~> 2.1')
38
+ spec.add_development_dependency('byebug', '>= 0')
39
+ spec.add_development_dependency('puma')
40
+ spec.add_development_dependency('rake', '~> 13.0')
41
+ spec.add_development_dependency('rspec', '~> 3.2')
42
+ spec.add_development_dependency('rubocop', '1.0.0')
43
+
44
+ spec.add_dependency('redcarpet')
45
+ spec.add_dependency('rouge')
46
+ spec.add_dependency('sinatra')
47
+ spec.add_dependency('yaml')
48
+
49
+ # For more information and examples about making a new gem, check out our
50
+ # guide at: https://bundler.io/guides/creating_gem.html
51
+ end
metadata ADDED
@@ -0,0 +1,233 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trifle-docs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jozef Vaclavik
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-06-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: byebug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: puma
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '13.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '13.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.0.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: redcarpet
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rouge
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sinatra
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: yaml
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Trifle::Docs is way too simple documentation app. It uses your markdown
154
+ files and structure to build up your documentation. You can use it as a standalone
155
+ app or mount it in your Rails app.
156
+ email:
157
+ - jozef@hey.com
158
+ executables: []
159
+ extensions: []
160
+ extra_rdoc_files: []
161
+ files:
162
+ - ".byebug_history"
163
+ - ".devcontainer.json"
164
+ - ".devops/docker/codespaces/Dockerfile"
165
+ - ".devops/docker/codespaces/docker-compose.yml"
166
+ - ".rspec"
167
+ - ".rubocop.yml"
168
+ - CHANGELOG.md
169
+ - CODE_OF_CONDUCT.md
170
+ - Gemfile
171
+ - Gemfile.lock
172
+ - LICENSE
173
+ - README.md
174
+ - Rakefile
175
+ - demo.gif
176
+ - docs/asdf.txt
177
+ - docs/blog.md
178
+ - docs/blog/2022-06-20_getting_started_with_trifle_docs.md
179
+ - docs/blog/2022-06-27_advanced_documentation.md
180
+ - docs/blog/screen.png
181
+ - docs/example.md
182
+ - docs/example/snippet.md
183
+ - docs/index.md
184
+ - docs/projects.md
185
+ - docs/projects/kindergarden.md
186
+ - docs/projects/petite_project.md
187
+ - docs/projects/rugby_team.md
188
+ - docs/test/case.md
189
+ - docs/test/index.md
190
+ - docs/test/sample.md
191
+ - lib/trifle/docs.rb
192
+ - lib/trifle/docs/app.rb
193
+ - lib/trifle/docs/configuration.rb
194
+ - lib/trifle/docs/harvester.rb
195
+ - lib/trifle/docs/harvester/file.rb
196
+ - lib/trifle/docs/harvester/markdown.rb
197
+ - lib/trifle/docs/helper/tree.rb
198
+ - lib/trifle/docs/operations/collection.rb
199
+ - lib/trifle/docs/operations/content.rb
200
+ - lib/trifle/docs/operations/meta.rb
201
+ - lib/trifle/docs/operations/sitemap.rb
202
+ - lib/trifle/docs/version.rb
203
+ - sig/trifle/docs.rbs
204
+ - templates/simple/layout.erb
205
+ - templates/simple/page.erb
206
+ - trifle-docs.gemspec
207
+ homepage: https://trifle.io
208
+ licenses:
209
+ - MIT
210
+ metadata:
211
+ homepage_uri: https://trifle.io
212
+ source_code_uri: https://github.com/trifle-io/trifle-docs
213
+ changelog_uri: https://github.com/trifle-io/trifle-docs/blob/main/CHANGELOG.md
214
+ post_install_message:
215
+ rdoc_options: []
216
+ require_paths:
217
+ - lib
218
+ required_ruby_version: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: 2.6.0
223
+ required_rubygems_version: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
228
+ requirements: []
229
+ rubygems_version: 3.2.3
230
+ signing_key:
231
+ specification_version: 4
232
+ summary: Simple documentation for your markdown files.
233
+ test_files: []