doc_pages 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e258e0c9c9f4a6b099e505aa7b9330c518d1cae29f1ced3b60432f11a22251da
4
+ data.tar.gz: 02d19f8dcc46afa96ff8c8eec6ded93b31c05580d7ba2edf5a0aa7ced1d6a685
5
+ SHA512:
6
+ metadata.gz: 6a1a42572fd4fde86c649c2c0c6e81f4c5c781e49849dcb7fb554551ccede798a5b5ec77f3b13e1e36bcad406a957f9b6251d81c67c928b65f3e13c1e5465264
7
+ data.tar.gz: ef38951574662db55020dfc601c8dd9dc4c6d12385c05d2c6ba94689785d3c1ea2ca27238532797f2896b0dc0e0253d620f61e682e8ad34b54a2d5384faabbf6
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2023 lbp
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # DocPages
2
+ DocPages is a Rails engine that provides a simple way to add documentation to your Rails application using Markdown. Create your documentation files in the `app/views/docs` directory with the `.html.md` extension and navigate to `/docs` to see it in action. Code snippets are syntax highlighted using Highlight.js.
3
+
4
+ ## Table of Contents
5
+ - [DocPages](#docpages)
6
+ - [Table of Contents](#table-of-contents)
7
+ - [Installation](#installation)
8
+ - [Getting Started](#getting-started)
9
+ - [Adding Pages](#adding-pages)
10
+ - [Customizing the views](#customizing-the-views)
11
+ - [Contributing](#contributing)
12
+ - [License](#license)
13
+
14
+ ## <span id="installation">Installation</span>
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem "doc_pages"
19
+ ```
20
+
21
+ And then execute:
22
+ ```bash
23
+ $ bundle
24
+ ```
25
+
26
+ Or install it yourself as:
27
+ ```bash
28
+ $ gem install doc_pages
29
+ ```
30
+ ## <span id="getting-started">Getting Started</span>
31
+ - Run `rails g doc_pages install`
32
+
33
+ ## <span id="adding-pages">Adding Pages</span>
34
+
35
+ - To add a new page, create a new file in the `app/views/docs` directory. The file name will be the URL path for the page. For example, `app/views/docs/my-new-page.html.md` will be available at `/docs/my-new-page`.
36
+
37
+ ## <span id="customizing-the-views">Customizing the views</span>
38
+
39
+ - To customize the views, run `rails g docs copy_views`.
40
+
41
+ ## Contributing
42
+ Issues and pull requests are welcome on GitHub at https://github.com/leopolicastro/doc_pages.
43
+
44
+ ## License
45
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ //= link_directory ../stylesheets/doc_pages .css
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ module DocPages
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,7 @@
1
+ module DocPages
2
+ class DocsController < ApplicationController
3
+ include HighVoltage::StaticPage
4
+
5
+ layout "doc_pages/markdown"
6
+ end
7
+ end
@@ -0,0 +1,42 @@
1
+ module DocPages
2
+ module ApplicationHelper
3
+ def doc_page_ids
4
+ HighVoltage.page_ids - ["home"]
5
+ end
6
+
7
+ def group_by_folder
8
+ doc_page_ids.filter { |id| id.include?("/") }.group_by { |id| id.split("/").first }
9
+ end
10
+
11
+ def without_a_folder
12
+ doc_page_ids.reject { |id| id.include?("/") }
13
+ end
14
+
15
+ def render_orphans
16
+ without_a_folder.map { |page| link_to_page(page) }.join("").html_safe
17
+ end
18
+
19
+ def group_by_folder_and_render
20
+ group_by_folder.map do |folder, pages|
21
+ <<-ERB
22
+ <div class="flex flex-col gap-y-2 mb-5">
23
+ <h2 class="text-white font-semibold text-lg hover:cursor-pointer js-folders">#{folder.titleize}</h2>
24
+ <ul class="flex flex-col gap-y-2 hidden js-toggle-hidden">
25
+ #{pages.map { |page| link_to_page(page) }.join("").html_safe}
26
+ </ul>
27
+ <div class="border-b"></div>
28
+ </div>
29
+
30
+ ERB
31
+ end.join("").html_safe
32
+ end
33
+
34
+ def link_to_page(page)
35
+ <<-ERB
36
+ <li>
37
+ #{link_to page.split("/").last.titleize, doc_path(page), data: {turbo: false}, class: "text-white group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold"}
38
+ </li>
39
+ ERB
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,4 @@
1
+ module DocPages
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module DocPages
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: "from@example.com"
4
+ layout "mailer"
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module DocPages
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Doc pages</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag "doc_pages/application", media: "all" %>
9
+ </head>
10
+ <body>
11
+
12
+ <%= yield %>
13
+
14
+ </body>
15
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= yield(:page_title) %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <%= csrf_meta_tags %>
7
+ <%= csp_meta_tag %>
8
+ <%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %>
9
+ <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
10
+ <%= javascript_importmap_tags %>
11
+ <%= render "shared/tailwind" %>
12
+ <link rel="stylesheet"
13
+ href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/github-dark-dimmed.min.css">
14
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script>
15
+ <script>
16
+ hljs.highlightAll();
17
+ </script>
18
+ </head>
19
+ <body>
20
+ <%= render "shared/sidebar" %>
21
+ <main class="prose prose-blue 2xl:prose-xl container mx-auto px-5 md:ml-80">
22
+ <%= yield %>
23
+ </main>
24
+ </body>
25
+ </html>
@@ -0,0 +1,36 @@
1
+ <!-- Static sidebar for desktop -->
2
+ <div class="hidden md:fixed md:inset-y-0 md:z-50 md:flex md:w-72 md:flex-col">
3
+ <!-- Sidebar component, swap this element with another sidebar if you like -->
4
+ <div class="flex grow flex-col gap-y-5 overflow-y-auto bg-gray-900 px-6">
5
+ <div class="flex h-16 shrink-0 items-center">
6
+ <h2 class="text-2xl text-white">DocPages</h2>
7
+ </div>
8
+ <nav class="flex flex-1 flex-col">
9
+ <ul role="list" class="flex flex-1 flex-col gap-y-7">
10
+ <li>
11
+ <ul role="list" class="-mx-2 space-y-1">
12
+ <li>
13
+ <!-- Current: "bg-gray-800 text-white", Default: "text-gray-400 hover:text-white hover:bg-gray-800" -->
14
+ <%= link_to doc_pages_root_path, data: {turbo: false}, class: "bg-gray-800 text-white group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold" do %>
15
+ <svg class="h-6 w-6 shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
16
+ <path stroke-linecap="round" stroke-linejoin="round" d="M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25" />
17
+ </svg>
18
+ Home
19
+ <% end %>
20
+ </li>
21
+ <%= render "shared/pages" %>
22
+ </ul>
23
+ </li>
24
+ <%# <li class="mt-auto mb-5">
25
+ <a href="#" class="group -mx-2 flex gap-x-3 rounded-md p-2 text-sm font-semibold leading-6 text-gray-400 hover:bg-gray-800 hover:text-white">
26
+ <svg class="h-6 w-6 shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
27
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z" />
28
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
29
+ </svg>
30
+ Settings
31
+ </a>
32
+ </li> %>
33
+ </ul>
34
+ </nav>
35
+ </div>
36
+ </div>
@@ -0,0 +1,79 @@
1
+ <!-- Off-canvas menu for mobile, show/hide based on off-canvas menu state. -->
2
+ <div class="relative z-50 hidden" role="dialog" aria-modal="true" id="mobile-sidebar">
3
+ <!--
4
+ Off-canvas menu backdrop, show/hide based on off-canvas menu state.
5
+
6
+ Entering: "transition-opacity ease-linear duration-300"
7
+ From: "opacity-0"
8
+ To: "opacity-100"
9
+ Leaving: "transition-opacity ease-linear duration-300"
10
+ From: "opacity-100"
11
+ To: "opacity-0"
12
+ -->
13
+ <div class="fixed inset-0 bg-gray-900/80"></div>
14
+ <div class="fixed inset-0 flex">
15
+ <!--
16
+ Off-canvas menu, show/hide based on off-canvas menu state.
17
+
18
+ Entering: "transition ease-in-out duration-300 transform"
19
+ From: "-translate-x-full"
20
+ To: "translate-x-0"
21
+ Leaving: "transition ease-in-out duration-300 transform"
22
+ From: "translate-x-0"
23
+ To: "-translate-x-full"
24
+ -->
25
+ <div class="relative mr-16 flex w-full max-w-xs flex-1">
26
+ <!--
27
+ Close button, show/hide based on off-canvas menu state.
28
+
29
+ Entering: "ease-in-out duration-300"
30
+ From: "opacity-0"
31
+ To: "opacity-100"
32
+ Leaving: "ease-in-out duration-300"
33
+ From: "opacity-100"
34
+ To: "opacity-0"
35
+ -->
36
+ <div class="absolute left-full top-0 flex w-16 justify-center pt-5">
37
+ <button type="button" class="-m-2.5 p-2.5" id="close-sidebar">
38
+ <span class="sr-only">Close sidebar</span>
39
+ <svg class="h-6 w-6 text-white" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
40
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
41
+ </svg>
42
+ </button>
43
+ </div>
44
+ <!-- Sidebar component, swap this element with another sidebar if you like -->
45
+ <div class="flex grow flex-col gap-y-5 overflow-y-auto bg-gray-900 px-6 pb-2 ring-1 ring-white/10">
46
+ <div class="flex h-16 shrink-0 items-center">
47
+ <h2 class="text-2xl text-white">Docs</h2>
48
+ </div>
49
+ <nav class="flex flex-1 flex-col">
50
+ <ul role="list" class="flex flex-1 flex-col gap-y-7">
51
+ <li>
52
+ <ul role="list" class="-mx-2 space-y-1">
53
+ <li class="">
54
+ <!-- Current: "bg-gray-800 text-white", Default: "text-gray-400 hover:text-white hover:bg-gray-800" -->
55
+ <%= link_to doc_pages_root_path, class: "bg-gray-800 text-white group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold" do %>
56
+ <svg class="h-6 w-6 shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
57
+ <path stroke-linecap="round" stroke-linejoin="round" d="M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25" />
58
+ </svg>
59
+ Home
60
+ <% end %>
61
+ </li>
62
+ <%= render "shared/pages" %>
63
+ </ul>
64
+ </li>
65
+ <%# <li class="mt-auto mb-5">
66
+ <a href="#" class="group -mx-2 flex gap-x-3 rounded-md p-2 text-sm font-semibold leading-6 text-gray-400 hover:bg-gray-800 hover:text-white">
67
+ <svg class="h-6 w-6 shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
68
+ <path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z" />
69
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
70
+ </svg>
71
+ Settings
72
+ </a>
73
+ </li> %>
74
+ </ul>
75
+ </nav>
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="overflow-y-scroll">
2
+ <%= group_by_folder_and_render %>
3
+ <%= render_orphans %>
4
+ </div>
@@ -0,0 +1,53 @@
1
+ <!--
2
+ This example requires updating your template:
3
+
4
+ ```
5
+ <html class="h-full bg-white">
6
+ <body class="h-full">
7
+ ```
8
+ -->
9
+ <div>
10
+ <%= render "shared/mobile_sidebar" %>
11
+ <%= render "shared/desktop_sidebar" %>
12
+ <div class="sticky top-0 z-40 flex items-center gap-x-6 bg-gray-900 px-4 py-4 shadow-sm sm:px-6 lg:hidden">
13
+ <button type="button" class="-m-2.5 p-2.5 text-gray-400 lg:hidden" id="open-sidebar">
14
+ <span class="sr-only">Open sidebar</span>
15
+ <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
16
+ <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" />
17
+ </svg>
18
+ </button>
19
+ <div class="flex-1 text-sm font-semibold leading-6 text-white">Dashboard</div>
20
+ <a href="#">
21
+ <span class="sr-only">Your profile</span>
22
+ <img class="h-8 w-8 rounded-full bg-gray-800" src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80" alt="">
23
+ </a>
24
+ </div>
25
+ <main class="py-10 lg:pl-72">
26
+ <div class="px-4 sm:px-6 lg:px-8">
27
+ <!-- Your content -->
28
+ </div>
29
+ </main>
30
+ </div>
31
+ <script>
32
+ var mobileSidebar = document.getElementById('mobile-sidebar');
33
+ var closeSidebarButton = document.getElementById('close-sidebar');
34
+
35
+ closeSidebarButton.addEventListener('click', () => {
36
+ mobileSidebar.classList.add('hidden');
37
+ });
38
+
39
+
40
+ var openSidebarButton = document.getElementById('open-sidebar');
41
+
42
+ openSidebarButton.addEventListener('click', () => {
43
+ mobileSidebar.classList.remove('hidden');
44
+ });
45
+
46
+ document.querySelectorAll(".js-folders").forEach((el) => {
47
+ el.addEventListener("click", (e) => {
48
+ e.preventDefault();
49
+
50
+ el.nextElementSibling.classList.toggle("hidden");
51
+ });
52
+ });
53
+ </script>
@@ -0,0 +1,13 @@
1
+ <script src="https://cdn.tailwindcss.com?plugins=forms,typography,aspect-ratio,line-clamp"></script>
2
+ <link rel="stylesheet" href="https://rsms.me/inter/inter.css">
3
+ <script>
4
+ tailwind.config = {
5
+ theme: {
6
+ extend: {
7
+ fontFamily: {
8
+ sans: ['Inter var'],
9
+ },
10
+ },
11
+ }
12
+ }
13
+ </script>
@@ -0,0 +1,12 @@
1
+ require "handlers/markdown_handler"
2
+
3
+ HighVoltage.configure do |config|
4
+ config.routes = false
5
+ config.content_path = "docs/"
6
+ # config.home_page = "home"
7
+ end
8
+
9
+ ActionView::Template.register_template_handler(
10
+ :md,
11
+ Handlers::MarkdownHandler.new
12
+ )
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ DocPages::Engine.routes.draw do
2
+ get "/*id" => "docs#show", :as => :doc, :format => false
3
+
4
+ root to: "docs#show", id: "home", as: :doc_pages_root
5
+ end
@@ -0,0 +1,13 @@
1
+ require "high_voltage"
2
+ require "redcarpet"
3
+
4
+ module DocPages
5
+ class Engine < ::Rails::Engine
6
+ isolate_namespace DocPages
7
+
8
+ initializer "engine_name.assets.precompile" do |app|
9
+ # app.config.assets.precompile += %w[docs_manifest.js]
10
+ app.config.assets.precompile += %w[config/doc_pages_manifest.js]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module DocPages
2
+ VERSION = "0.1.0"
3
+ end
data/lib/doc_pages.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "doc_pages/version"
2
+ require "doc_pages/engine"
3
+
4
+ module DocPages
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ bin/rails generate docs Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,44 @@
1
+ class DocsGenerator < Rails::Generators::NamedBase
2
+ source_root File.expand_path("templates", __dir__)
3
+
4
+ def handle_call
5
+ if ARGV[0] == "install"
6
+ install
7
+ elsif ARGV[0] == "copy_views"
8
+ copy_views
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def copy_views
15
+ copy_file File.expand_path("#{DocPages::Engine.root}/app/views/shared/_sidebar.html.erb"), "app/views/shared/_sidebar.html.erb"
16
+ copy_file File.expand_path("#{DocPages::Engine.root}/app/views/shared/_desktop_sidebar.html.erb"), "app/views/shared/_desktop_sidebar.html.erb"
17
+ copy_file File.expand_path("#{DocPages::Engine.root}/app/views/shared/_mobile_sidebar.html.erb"), "app/views/shared/_mobile_sidebar.html.erb"
18
+ copy_file File.expand_path("#{DocPages::Engine.root}/app/views/shared/_pages.html.erb"), "app/views/shared/_pages.html.erb"
19
+ copy_file File.expand_path("#{DocPages::Engine.root}/app/views/layouts/doc_pages/markdown.html.erb"), "app/views/layouts/markdown.html.erb"
20
+ end
21
+
22
+ def install
23
+ mount_engine
24
+ copy_home_page
25
+ append_to_manifest
26
+ end
27
+
28
+ def mount_engine
29
+ puts "Mounting Docs::Engine at \"/docs\" in config/routes.rb"
30
+ route "mount DocPages::Engine, at: \"/docs\""
31
+ end
32
+
33
+ def copy_home_page
34
+ puts "Copying home page to app/views/docs/home.html.md"
35
+ copy_file "home.html.md", "app/views/docs/home.html.md"
36
+ end
37
+
38
+ def append_to_manifest
39
+ puts "Appending to app/assets/config/manifest.js"
40
+ append_to_file "app/assets/config/manifest.js" do
41
+ "//= link doc_pages/application.css\n"
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,36 @@
1
+ # Docs
2
+
3
+ - This is the home page for your docs. To edit this page, update your `app/views/docs/home.html.md` file.
4
+ - All standard Markdown features are supported.
5
+
6
+ ---
7
+
8
+ ## Table of Contents
9
+ - [Getting Started](#getting-started)
10
+ - [Adding Pages](#adding-pages)
11
+ - [Customizing the Sidebar](#customizing-the-sidebar)
12
+ - [Customize Syntax Highlighting Theme](#customize-syntax-highlighting-theme)
13
+
14
+ ### <span id="getting-started">Getting Started</span>
15
+
16
+ - Add the following to your `Gemfile`:
17
+
18
+ ```ruby
19
+ gem 'doc_pages'
20
+ ```
21
+ - Run `bundle install`
22
+ - Or install it yourself as:
23
+
24
+ ```bash
25
+ $ bundle add doc_pages
26
+ ```
27
+ - Run `rails g doc_pages install`
28
+
29
+
30
+ ### <span id="adding-pages">Adding Pages</span>
31
+
32
+ - To add a new page, create a new file in the `app/views/docs` directory. The file name will be the URL path for the page. For example, `app/views/docs/my-new-page.html.md` will be available at `/docs/my-new-page`.
33
+
34
+ ### <span id="customizing-the-views">Customizing the views</span>
35
+
36
+ - To customize the views, run `rails g docs copy_views`.
@@ -0,0 +1,27 @@
1
+ module Handlers
2
+ class MarkdownHandler
3
+ def call(template, source)
4
+ markdown = Redcarpet::Markdown.new(
5
+ Redcarpet::Render::HTML,
6
+ autolink: true,
7
+ tables: true,
8
+ fenced_code_blocks: true,
9
+ underline: true,
10
+ highlight: true,
11
+ quote: true,
12
+ footnotes: true,
13
+ no_styles: true,
14
+ hard_wrap: true,
15
+ prettify: true,
16
+ safe_links_only: true,
17
+ no_intra_emphasis: true,
18
+ strikethrough: true,
19
+ superscript: true,
20
+ lax_spacing: true,
21
+ space_after_headers: true
22
+ # disable_indented_code_blocks: true # ????
23
+ )
24
+ "#{markdown.render(source).inspect}.html_safe"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :doc_pages do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: doc_pages
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - lbp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-06-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 7.0.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 7.0.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: redcarpet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
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: high_voltage
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
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: tailwindcss-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Description of Docs.
70
+ email:
71
+ - 43428385+leopolicastro@users.noreply.github.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - README.md
78
+ - Rakefile
79
+ - app/assets/config/doc_pages_manifest.js
80
+ - app/assets/stylesheets/doc_pages/application.css
81
+ - app/controllers/doc_pages/application_controller.rb
82
+ - app/controllers/doc_pages/docs_controller.rb
83
+ - app/helpers/doc_pages/application_helper.rb
84
+ - app/jobs/doc_pages/application_job.rb
85
+ - app/mailers/doc_pages/application_mailer.rb
86
+ - app/models/doc_pages/application_record.rb
87
+ - app/views/layouts/doc_pages/application.html.erb
88
+ - app/views/layouts/doc_pages/markdown.html.erb
89
+ - app/views/shared/_desktop_sidebar.html.erb
90
+ - app/views/shared/_mobile_sidebar.html.erb
91
+ - app/views/shared/_pages.html.erb
92
+ - app/views/shared/_sidebar.html.erb
93
+ - app/views/shared/_tailwind.html.erb
94
+ - config/initializers/doc_pages.rb
95
+ - config/routes.rb
96
+ - lib/doc_pages.rb
97
+ - lib/doc_pages/engine.rb
98
+ - lib/doc_pages/version.rb
99
+ - lib/generators/docs/USAGE
100
+ - lib/generators/docs/docs_generator.rb
101
+ - lib/generators/docs/templates/home.html.md
102
+ - lib/handlers/markdown_handler.rb
103
+ - lib/tasks/doc_pages_tasks.rake
104
+ homepage: https://github.com/leopolicastro/docs
105
+ licenses:
106
+ - MIT
107
+ metadata:
108
+ homepage_uri: https://github.com/leopolicastro/docs
109
+ source_code_uri: https://github.com/leopolicastro/docs
110
+ changelog_uri: https://github.com/leopolicastro/docs/blob/main/CHANGELOG.md
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubygems_version: 3.4.13
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: Summary of Docs.
130
+ test_files: []