dokno 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +130 -0
  4. data/Rakefile +22 -0
  5. data/app/assets/config/dokno_manifest.js +3 -0
  6. data/app/assets/javascripts/dokno.js +144 -0
  7. data/app/assets/javascripts/dokno/application.js +15 -0
  8. data/app/assets/javascripts/feather.min.js +13 -0
  9. data/app/assets/javascripts/init.js +5 -0
  10. data/app/assets/stylesheets/dokno/application.css +137 -0
  11. data/app/assets/stylesheets/dokno/tailwind.min.css +1 -0
  12. data/app/controllers/dokno/application_controller.rb +7 -0
  13. data/app/controllers/dokno/articles_controller.rb +115 -0
  14. data/app/controllers/dokno/categories_controller.rb +63 -0
  15. data/app/controllers/dokno/pagination_concern.rb +15 -0
  16. data/app/controllers/dokno/user_concern.rb +38 -0
  17. data/app/helpers/dokno/application_helper.rb +17 -0
  18. data/app/models/dokno/application_record.rb +5 -0
  19. data/app/models/dokno/article.rb +215 -0
  20. data/app/models/dokno/article_slug.rb +7 -0
  21. data/app/models/dokno/category.rb +100 -0
  22. data/app/models/dokno/log.rb +7 -0
  23. data/app/views/dokno/_article_formatting.html.erb +89 -0
  24. data/app/views/dokno/_article_panel.html.erb +112 -0
  25. data/app/views/dokno/_panel_formatting.html.erb +95 -0
  26. data/app/views/dokno/_reset_formatting.html.erb +55 -0
  27. data/app/views/dokno/articles/_article_form.html.erb +60 -0
  28. data/app/views/dokno/articles/edit.html.erb +7 -0
  29. data/app/views/dokno/articles/new.html.erb +7 -0
  30. data/app/views/dokno/articles/show.html.erb +130 -0
  31. data/app/views/dokno/categories/_category_form.html.erb +33 -0
  32. data/app/views/dokno/categories/edit.html.erb +7 -0
  33. data/app/views/dokno/categories/index.html.erb +96 -0
  34. data/app/views/dokno/categories/new.html.erb +7 -0
  35. data/app/views/layouts/dokno/application.html.erb +100 -0
  36. data/app/views/partials/_form_errors.html.erb +18 -0
  37. data/app/views/partials/_logs.html.erb +52 -0
  38. data/app/views/partials/_pagination.html.erb +35 -0
  39. data/config/routes.rb +11 -0
  40. data/db/migrate/20201203190330_baseline.rb +62 -0
  41. data/lib/dokno.rb +4 -0
  42. data/lib/dokno/config/config.rb +73 -0
  43. data/lib/dokno/engine.rb +27 -0
  44. data/lib/dokno/version.rb +3 -0
  45. data/lib/generators/dokno/install/install_generator.rb +13 -0
  46. data/lib/generators/dokno/templates/config/dokno_template.md +5 -0
  47. data/lib/generators/dokno/templates/config/initializers/dokno.rb +14 -0
  48. data/lib/tasks/dokno_tasks.rake +4 -0
  49. metadata +253 -0
@@ -0,0 +1,18 @@
1
+ <div id="error_explanation" class="bg-white mb-10">
2
+ <i data-feather="alert-octagon" class="float-right"></i>
3
+ <h2 class="font-semibold">
4
+ There
5
+ <% if errors.count == 1 %>
6
+ is a problem
7
+ <% else %>
8
+ are <%= pluralize(errors.count, "problem") %>
9
+ <% end %>
10
+ that must be resolved before saving:
11
+ </h2>
12
+
13
+ <ul class="mt-5 list-disc list-inside bg-gray-100 p-5 rounded">
14
+ <% errors.full_messages.each do |message| %>
15
+ <li><%= message %></li>
16
+ <% end %>
17
+ </ul>
18
+ </div>
@@ -0,0 +1,52 @@
1
+ <% if article&.logs.present? %>
2
+ <div class="py-10 px-16 text-gray-200 bg-gray-900">
3
+ <div class="w-full max-w-screen-xl m-auto">
4
+ <div class="text-xl text-gray-600 cursor-pointer" onclick="toggleVisibility('change-log');">
5
+ Change log for this article
6
+
7
+ <div class="inline toggle-visibility-indicator-container change-log">
8
+ <i data-feather="chevron-left" class="inline toggle-visibility-indicator change-log"></i>
9
+ </div>
10
+ </div>
11
+
12
+ <div id="change-log" class="bg-gray-800 px-10 mt-8 rounded hidden text-gray-500">
13
+ <ul>
14
+ <% article.logs.includes(article: :categories).each do |log| %>
15
+ <li class="my-10">
16
+ <div>
17
+ <% if article.blank? %>
18
+ <div class="text-white text-xl"><a href="<%= article_path log.article.slug %>" title="View Article"><%= log.article.title %></a></div>
19
+ <div class="mb-5"><%= log.article.category_name_list %></div>
20
+ <% end %>
21
+
22
+ <div class="text-gray-500 bg-gray-700 p-5 pr-10 rounded <%= 'cursor-pointer' if log.diff_left != log.diff_right %> flex items-center" onclick="toggleVisibility('article-diff-<%= log.id %>');" title="Show / Hide Diff">
23
+ <div class="w-4/5">
24
+ <%= time_ago_in_words log.created_at %> ago
25
+ <% if log.username.present? %>
26
+ by <%= log.username %>
27
+ <% end %>
28
+
29
+ <% if log.meta.present? %>
30
+ <br /><span class="text-gray-300"><%= log.meta %></span>
31
+ <% end %>
32
+ </div>
33
+
34
+ <div class="w-1/5 text-right toggle-visibility-indicator-container article-diff-<%= log.id %>">
35
+ <% if log.diff_left != log.diff_right %><i data-feather="chevron-left" class="inline toggle-visibility-indicator article-diff-<%= log.id %>"></i><% end %>
36
+ </div>
37
+ </div>
38
+
39
+ <% if log.diff_left != log.diff_right %>
40
+ <div id="article-diff-<%= log.id %>" class="flex hidden">
41
+ <div class="w-1/2 p-5">Before:<br /><%= log.diff_left.html_safe %></div>
42
+ <div class="w-1/2 p-5">After:<br /><%= log.diff_right.html_safe %></div>
43
+ </div>
44
+ <% end %>
45
+ </div>
46
+ </li>
47
+ <% end %>
48
+ </ul>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ <% end %>
@@ -0,0 +1,35 @@
1
+ <span class="mr-5">
2
+ <% if @page > 1 %>
3
+ <span class="mr-1 inline-block"><a href="?search_term=<%= CGI.escape @search_term.to_s %>&order=<%= @order %>&page=<%= (@page - 1) %>"><i data-feather="arrow-left" class="h-5 inline-block" title="Previous page"></i></a></span>
4
+ <% end %>
5
+
6
+ <span class="mr-1 inline-block">Page</span>
7
+
8
+ <%= form_with(url: article_index_path, method: :get, class: 'inline') do %>
9
+ <input type="hidden" name="id" value="<%= @category&.id %>">
10
+ <input type="hidden" name="search_term" value="<%= @search_term %>">
11
+ <input type="hidden" name="order" value="<%= @order %>">
12
+ <input type="text" name="page" id="page" value="<%= @page %>" onclick="this.select();" class="w-10 text-center bg-gray-200 rounded" />
13
+
14
+ <span class="mx-1 inline-block">of</span>
15
+ <span class="text-center inline-block"><%= @total_pages %></span>
16
+ <% end %>
17
+
18
+ <% if @page < @total_pages %>
19
+ <span class="ml-1 inline-block"><a href="?search_term=<%= CGI.escape @search_term.to_s %>&order=<%= @order %>&page=<%= (@page + 1) %>"><i data-feather="arrow-right" class="h-5 inline-block" title="Next page"></i></a></span>
20
+ <% end %>
21
+ </span>
22
+
23
+ <span class="text-gray-400">
24
+ <%= @total_records %>
25
+ <%= 'uncategorized' if @category.blank? && @search_term.blank? %>
26
+ <%= 'article'.pluralize(@total_records) %>
27
+
28
+ <% if @search_term.present? %>
29
+ containing <span class="font-serif">&ldquo;</span><%= @search_term %><span class="font-serif">&rdquo;</span>
30
+ <% end %>
31
+
32
+ <% if @category.present? %>
33
+ in <%= "#{(children_count = @category.branch.count) == 1 ? 'this' : children_count} #{'category'.pluralize(children_count)}" %>
34
+ <% end %>
35
+ </span>
@@ -0,0 +1,11 @@
1
+ Dokno::Engine.routes.draw do
2
+ resources :categories, except: [:show]
3
+ resources :articles
4
+
5
+ get '/(:cat_code)', to: 'categories#index', as: :article_index
6
+ get 'article_panel/(:slug)', to: 'articles#panel', as: :panel
7
+ post 'article_log', to: 'articles#article_log', as: :article_log
8
+ post 'article_preview', to: 'articles#preview', as: :preview
9
+ post 'article_status', to: 'articles#status', as: :status
10
+ root 'categories#index'
11
+ end
@@ -0,0 +1,62 @@
1
+ class Baseline < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table "dokno_article_slugs", force: :cascade do |t|
4
+ t.string "slug", null: false
5
+ t.bigint "article_id"
6
+ t.datetime "created_at", precision: 6, null: false
7
+ t.datetime "updated_at", precision: 6, null: false
8
+ t.index ["article_id"], name: "index_dokno_article_slugs_on_article_id"
9
+ t.index ["slug"], name: "index_dokno_article_slugs_on_slug", unique: true
10
+ end
11
+
12
+ create_table "dokno_articles", force: :cascade do |t|
13
+ t.string "slug"
14
+ t.string "title"
15
+ t.text "markdown"
16
+ t.datetime "created_at", precision: 6, null: false
17
+ t.datetime "updated_at", precision: 6, null: false
18
+ t.text "summary"
19
+ t.boolean "active", default: true
20
+ t.bigint "views", default: 0
21
+ t.datetime "last_viewed_at"
22
+ t.index ["slug"], name: "index_dokno_articles_on_slug", unique: true
23
+ end
24
+
25
+ create_table "dokno_articles_categories", id: false, force: :cascade do |t|
26
+ t.bigint "article_id"
27
+ t.bigint "category_id"
28
+ t.index ["article_id", "category_id"], name: "index_dokno_articles_categories_on_article_id_and_category_id", unique: true
29
+ t.index ["article_id"], name: "index_dokno_articles_categories_on_article_id"
30
+ t.index ["category_id"], name: "index_dokno_articles_categories_on_category_id"
31
+ end
32
+
33
+ create_table "dokno_categories", force: :cascade do |t|
34
+ t.string "name"
35
+ t.datetime "created_at", precision: 6, null: false
36
+ t.datetime "updated_at", precision: 6, null: false
37
+ t.bigint "category_id"
38
+ t.string "code", null: false
39
+ t.index ["category_id"], name: "index_dokno_categories_on_category_id"
40
+ t.index ["code"], name: "index_dokno_categories_on_code", unique: true
41
+ t.index ["name"], name: "index_dokno_categories_on_name", unique: true
42
+ end
43
+
44
+ create_table "dokno_logs", force: :cascade do |t|
45
+ t.bigint "article_id"
46
+ t.string "username"
47
+ t.text "meta"
48
+ t.text "diff_left"
49
+ t.text "diff_right"
50
+ t.datetime "created_at", precision: 6, null: false
51
+ t.datetime "updated_at", precision: 6, null: false
52
+ t.index ["article_id"], name: "index_dokno_logs_on_article_id"
53
+ t.index ["username"], name: "index_dokno_logs_on_username"
54
+ end
55
+
56
+ add_foreign_key "dokno_article_slugs", "dokno_articles", column: "article_id"
57
+ add_foreign_key "dokno_articles_categories", "dokno_articles", column: "article_id"
58
+ add_foreign_key "dokno_articles_categories", "dokno_categories", column: "category_id"
59
+ add_foreign_key "dokno_categories", "dokno_categories", column: "category_id"
60
+ add_foreign_key "dokno_logs", "dokno_articles", column: "article_id"
61
+ end
62
+ end
@@ -0,0 +1,4 @@
1
+ require "dokno/engine"
2
+
3
+ module Dokno
4
+ end
@@ -0,0 +1,73 @@
1
+ module Dokno
2
+ def self.configure
3
+ yield config
4
+ config.validate
5
+ end
6
+
7
+ def self.config
8
+ @config ||= Config.new
9
+ end
10
+
11
+ def self.config=(val)
12
+ @config = val
13
+ end
14
+
15
+ class Config
16
+ # (String) Host application name for display within the mounted dashboard
17
+ attr_accessor :app_name
18
+
19
+ # (Enumerable) Determines which HTML tags are allowed in Article markdown
20
+ attr_accessor :tag_whitelist
21
+
22
+ # (Enumerable) Determines which HTML attributes are allowed in Article markdown
23
+ attr_accessor :attr_whitelist
24
+
25
+ # (String) Host application's user object
26
+ attr_accessor :app_user_object
27
+
28
+ # (Symbol) Host application's user object method that should be used to authorize users to edit Dokno data
29
+ # Should return boolean.
30
+ attr_accessor :app_user_auth_method
31
+
32
+ # (Symbol) Host application's user object method that should return the authenticated user's name or other
33
+ # identifier that will be included in change log events. Should return a string.
34
+ attr_accessor :app_user_name_method
35
+
36
+ # Defaults
37
+ TAG_WHITELIST = %w[code img h1 h2 h3 h4 h5 h6 a em u i b strong ol ul li table thead tbody tfoot tr th td blockquote hr br p]
38
+ ATTR_WHITELIST = %w[src alt title href target]
39
+ APP_USER_OBJECT = 'current_user'
40
+ APP_USER_AUTH_METHOD = 'admin?'
41
+ APP_USER_NAME_METHOD = 'name'
42
+
43
+ def initialize
44
+ self.app_name = Rails.application.class.module_parent.name.underscore.humanize.upcase
45
+ self.tag_whitelist = TAG_WHITELIST
46
+ self.attr_whitelist = ATTR_WHITELIST
47
+ self.app_user_object = APP_USER_OBJECT
48
+ self.app_user_auth_method = APP_USER_AUTH_METHOD
49
+ self.app_user_name_method = APP_USER_NAME_METHOD
50
+ end
51
+
52
+ def validate
53
+ validate_tag_whitelist
54
+ validate_attr_whitelist
55
+ end
56
+
57
+ def validate_tag_whitelist
58
+ return unless !tag_whitelist.is_a?(Enumerable)
59
+
60
+ raise "#{config_error_prefix} tag_whitelist must be Enumerable"
61
+ end
62
+
63
+ def validate_attr_whitelist
64
+ return unless !attr_whitelist.is_a?(Enumerable)
65
+
66
+ raise "#{config_error_prefix} attr_whitelist must be Enumerable"
67
+ end
68
+
69
+ def config_error_prefix
70
+ "Dokno configuration error (check config/initializers/dokno.rb):"
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'config/config'
2
+
3
+ module Dokno
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Dokno
6
+
7
+ initializer 'Dokno precompile', group: :all do |app|
8
+ app.config.assets.precompile << "dokno_manifest.js"
9
+ end
10
+
11
+ config.generators do |g|
12
+ g.test_framework :rspec
13
+ end
14
+
15
+ initializer :append_migrations do |app|
16
+ config.paths["db/migrate"].expanded.each do |expanded_path|
17
+ app.config.paths["db/migrate"] << expanded_path
18
+ end
19
+ end
20
+
21
+ initializer 'local_helper.action_controller' do
22
+ ActiveSupport.on_load :action_controller do
23
+ helper Dokno::ApplicationHelper
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Dokno
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,13 @@
1
+ module Dokno
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../../templates', __FILE__)
5
+
6
+ desc 'Copies the Dokno configuration templates to the host app'
7
+ def copy_initializer
8
+ template 'config/initializers/dokno.rb', 'config/initializers/dokno.rb'
9
+ template 'config/dokno_template.md', 'config/dokno_template.md'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ This is your article template. It's helpful for adding consistency to your app's knowledgebase articles.
2
+
3
+ Articles support <strong>basic HTML</strong> and **markdown**.
4
+
5
+ You can modify this template in `/config/dokno_template.md`
@@ -0,0 +1,14 @@
1
+ Dokno.configure do |config|
2
+ config.tag_whitelist = Dokno::Config::TAG_WHITELIST
3
+ config.attr_whitelist = Dokno::Config::ATTR_WHITELIST
4
+
5
+ # To restrict Dokno data modification and include indentifying information
6
+ # in change log entries, provide the appropriate user values for your app below.
7
+ # (String) app_user_object
8
+ # (Symbol) app_user_auth_method
9
+ # (Symbol) app_user_name_method
10
+
11
+ # config.app_user_object = 'current_user'
12
+ # config.app_user_auth_method = :admin?
13
+ # config.app_user_name_method = :name
14
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :dokno do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,253 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dokno
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Courtney Payne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-12-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: diffy
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: redcarpet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: database_cleaner-active_record
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pg
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 1.2.3
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.2'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.2.3
75
+ - !ruby/object:Gem::Dependency
76
+ name: pry-byebug
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.9'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.9'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rails
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 6.0.3
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 6.0.3.4
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: 6.0.3
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 6.0.3.4
109
+ - !ruby/object:Gem::Dependency
110
+ name: rspec-rails
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '4.0'
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 4.0.1
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '4.0'
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: 4.0.1
129
+ - !ruby/object:Gem::Dependency
130
+ name: simplecov
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: 0.19.1
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: 0.19.1
143
+ - !ruby/object:Gem::Dependency
144
+ name: bullet
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '6.1'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '6.1'
157
+ - !ruby/object:Gem::Dependency
158
+ name: faker
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "~>"
162
+ - !ruby/object:Gem::Version
163
+ version: '2.15'
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '2.15'
171
+ description: Dokno allows you to easily mount a self-contained knowledgebase / wiki
172
+ / help system to your Rails app where you and your users can author articles relevant
173
+ to your app.
174
+ email:
175
+ - cpayne624@gmail.com
176
+ executables: []
177
+ extensions: []
178
+ extra_rdoc_files: []
179
+ files:
180
+ - MIT-LICENSE
181
+ - README.md
182
+ - Rakefile
183
+ - app/assets/config/dokno_manifest.js
184
+ - app/assets/javascripts/dokno.js
185
+ - app/assets/javascripts/dokno/application.js
186
+ - app/assets/javascripts/feather.min.js
187
+ - app/assets/javascripts/init.js
188
+ - app/assets/stylesheets/dokno/application.css
189
+ - app/assets/stylesheets/dokno/tailwind.min.css
190
+ - app/controllers/dokno/application_controller.rb
191
+ - app/controllers/dokno/articles_controller.rb
192
+ - app/controllers/dokno/categories_controller.rb
193
+ - app/controllers/dokno/pagination_concern.rb
194
+ - app/controllers/dokno/user_concern.rb
195
+ - app/helpers/dokno/application_helper.rb
196
+ - app/models/dokno/application_record.rb
197
+ - app/models/dokno/article.rb
198
+ - app/models/dokno/article_slug.rb
199
+ - app/models/dokno/category.rb
200
+ - app/models/dokno/log.rb
201
+ - app/views/dokno/_article_formatting.html.erb
202
+ - app/views/dokno/_article_panel.html.erb
203
+ - app/views/dokno/_panel_formatting.html.erb
204
+ - app/views/dokno/_reset_formatting.html.erb
205
+ - app/views/dokno/articles/_article_form.html.erb
206
+ - app/views/dokno/articles/edit.html.erb
207
+ - app/views/dokno/articles/new.html.erb
208
+ - app/views/dokno/articles/show.html.erb
209
+ - app/views/dokno/categories/_category_form.html.erb
210
+ - app/views/dokno/categories/edit.html.erb
211
+ - app/views/dokno/categories/index.html.erb
212
+ - app/views/dokno/categories/new.html.erb
213
+ - app/views/layouts/dokno/application.html.erb
214
+ - app/views/partials/_form_errors.html.erb
215
+ - app/views/partials/_logs.html.erb
216
+ - app/views/partials/_pagination.html.erb
217
+ - config/routes.rb
218
+ - db/migrate/20201203190330_baseline.rb
219
+ - lib/dokno.rb
220
+ - lib/dokno/config/config.rb
221
+ - lib/dokno/engine.rb
222
+ - lib/dokno/version.rb
223
+ - lib/generators/dokno/install/install_generator.rb
224
+ - lib/generators/dokno/templates/config/dokno_template.md
225
+ - lib/generators/dokno/templates/config/initializers/dokno.rb
226
+ - lib/tasks/dokno_tasks.rake
227
+ homepage: https://github.com/cpayne624/dokno
228
+ licenses:
229
+ - MIT
230
+ metadata:
231
+ bug_tracker_uri: https://github.com/cpayne624/dokno/issues
232
+ changelog_uri: https://github.com/cpayne624/dokno/blob/master/CHANGELOG.md
233
+ post_install_message:
234
+ rdoc_options: []
235
+ require_paths:
236
+ - lib
237
+ required_ruby_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - ">="
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ requirements: []
248
+ rubygems_version: 3.1.4
249
+ signing_key:
250
+ specification_version: 4
251
+ summary: Dokno (dough-no) is a lightweight mountable Rails Engine for storing and
252
+ managing your app's domain knowledge.
253
+ test_files: []