knowledge_base 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +3 -1
  3. data/app/models/knowledge_base/category_article_association.rb +1 -2
  4. data/app/models/knowledge_base/section.rb +1 -5
  5. data/app/models/knowledge_base/sectionables/attachments.rb +7 -0
  6. data/app/models/knowledge_base/sectionables/attachments/attachment.rb +5 -0
  7. data/app/models/knowledge_base/sectionables/attachments/list.rb +5 -0
  8. data/app/models/knowledge_base/sectionables/gallery.rb +3 -7
  9. data/app/models/knowledge_base/sectionables/gallery/image.rb +1 -3
  10. data/app/models/knowledge_base/sectionables/image.rb +3 -7
  11. data/app/models/knowledge_base/sectionables/links.rb +3 -5
  12. data/app/models/knowledge_base/sectionables/links/link.rb +1 -6
  13. data/app/models/knowledge_base/sectionables/links/list.rb +5 -0
  14. data/app/models/knowledge_base/sectionables/list.rb +3 -7
  15. data/app/models/knowledge_base/sectionables/list/item.rb +1 -1
  16. data/app/models/knowledge_base/sectionables/sectionable.rb +3 -7
  17. data/app/models/knowledge_base/sectionables/text.rb +3 -5
  18. data/app/models/knowledge_base/sectionables/video.rb +3 -11
  19. data/app/uploaders/knowledge_base/generic_file_uploader.rb +7 -0
  20. data/app/uploaders/knowledge_base/image_uploader.rb +0 -48
  21. data/app/views/knowledge_base/articles/_article.html.erb +3 -3
  22. data/app/views/knowledge_base/articles/_search.html.erb +6 -0
  23. data/app/views/knowledge_base/articles/index.html.erb +11 -0
  24. data/app/views/knowledge_base/categories/_category.html.erb +2 -2
  25. data/app/views/knowledge_base/sectionables/attachments/lists/_list.html.erb +14 -0
  26. data/app/views/knowledge_base/sectionables/links/lists/_list.html.erb +13 -0
  27. data/app/views/knowledge_base/sectionables/lists/_list.html.erb +4 -0
  28. data/app/views/knowledge_base/sectionables/texts/_text.html.erb +4 -0
  29. data/app/views/knowledge_base/sectionables/videos/_video.html.erb +4 -1
  30. data/config/locales/en.yml +131 -0
  31. data/config/locales/nb.yml +94 -15
  32. data/config/routes.rb +2 -0
  33. data/db/migrate/20140318125210_default_position_fields.rb +10 -0
  34. data/db/migrate/20140318210722_change_knowledge_base_gallery_description_to_text.rb +9 -0
  35. data/db/migrate/20140320125825_add_image_to_texts.rb +5 -0
  36. data/db/migrate/20140325083548_add_image_to_sectionables_lists.rb +5 -0
  37. data/db/migrate/20140404234850_create_knowledge_base_sectionables_attachments.rb +8 -0
  38. data/db/migrate/20140410184906_create_knowledge_base_sectionables_attachment_lists.rb +7 -0
  39. data/db/migrate/20140410185528_add_attachment_list_reference_to_knowledge_base_sectionables_attachments.rb +8 -0
  40. data/db/migrate/20140410191611_migrate_attachments_over_to_lists.rb +49 -0
  41. data/db/migrate/20140410203342_rename_attachment_lists_to_attachments_lists.rb +5 -0
  42. data/db/migrate/20140410205056_rename_attachments_to_attachments_attachments.rb +5 -0
  43. data/db/migrate/20140410224403_rename_links_to_links_lists.rb +5 -0
  44. data/db/migrate/20140410231048_fix_sectionable_types_for_attachments.rb +13 -0
  45. data/db/migrate/20140410231433_fix_sectionable_types_for_links.rb +13 -0
  46. data/db/migrate/20140430112603_add_description_to_knowledge_base_attachments_attachment.rb +5 -0
  47. data/db/migrate/20140430112633_add_description_to_knowledge_base_links_link.rb +5 -0
  48. data/db/migrate/20140820114750_add_custom_style_to_knowledge_base_sectionables.rb +21 -0
  49. data/db/migrate/20140821081854_remove_custom_style_from_non_sectionables.rb +8 -0
  50. data/db/migrate/20140821085102_rename_custom_style_to_style.rb +11 -0
  51. data/db/migrate/20140821151832_add_title_to_knowledge_base_sectionables_videos.rb +5 -0
  52. data/db/migrate/20140930121510_add_title_to_attachment_lists.rb +5 -0
  53. data/fixtures/parrot.png +0 -0
  54. data/fixtures/sample.pdf +0 -0
  55. data/lib/generators/knowledge_base/active_admin/USAGE +8 -0
  56. data/lib/generators/knowledge_base/active_admin/active_admin_generator.rb +9 -0
  57. data/lib/generators/knowledge_base/active_admin/templates/article.rb +92 -0
  58. data/lib/generators/knowledge_base/active_admin/templates/category.rb +70 -0
  59. data/lib/generators/knowledge_base/active_admin/templates/sectionables/attachments/list.rb +25 -0
  60. data/lib/generators/knowledge_base/active_admin/templates/sectionables/gallery.rb +44 -0
  61. data/lib/generators/knowledge_base/active_admin/templates/sectionables/image.rb +37 -0
  62. data/lib/generators/knowledge_base/active_admin/templates/sectionables/links/list.rb +35 -0
  63. data/lib/generators/knowledge_base/active_admin/templates/sectionables/list.rb +48 -0
  64. data/lib/generators/knowledge_base/active_admin/templates/sectionables/text.rb +42 -0
  65. data/lib/generators/knowledge_base/active_admin/templates/sectionables/video.rb +20 -0
  66. data/lib/knowledge_base.rb +3 -0
  67. data/lib/knowledge_base/concerns/controllers/articles_controller.rb +21 -2
  68. data/lib/knowledge_base/concerns/controllers/categories_controller.rb +3 -2
  69. data/lib/knowledge_base/concerns/models.rb +31 -0
  70. data/lib/knowledge_base/concerns/models/article.rb +4 -3
  71. data/lib/knowledge_base/concerns/models/category.rb +2 -3
  72. data/lib/knowledge_base/concerns/models/category_article_association.rb +8 -0
  73. data/lib/knowledge_base/concerns/models/section.rb +13 -0
  74. data/lib/knowledge_base/concerns/models/sectionables/attachments/attachment.rb +11 -0
  75. data/lib/knowledge_base/concerns/models/sectionables/attachments/list.rb +15 -0
  76. data/lib/knowledge_base/concerns/models/sectionables/gallery.rb +17 -0
  77. data/lib/knowledge_base/concerns/models/sectionables/gallery/image.rb +9 -0
  78. data/lib/knowledge_base/concerns/models/sectionables/image.rb +13 -0
  79. data/lib/knowledge_base/concerns/models/sectionables/links/link.rb +7 -0
  80. data/lib/knowledge_base/concerns/models/sectionables/links/list.rb +15 -0
  81. data/lib/knowledge_base/concerns/models/sectionables/list.rb +17 -0
  82. data/lib/knowledge_base/concerns/models/sectionables/list/item.rb +7 -0
  83. data/lib/knowledge_base/concerns/models/sectionables/sectionable.rb +28 -0
  84. data/lib/knowledge_base/concerns/models/sectionables/text.rb +13 -0
  85. data/lib/knowledge_base/concerns/models/sectionables/video.rb +15 -0
  86. data/lib/knowledge_base/configuration.rb +10 -17
  87. data/lib/knowledge_base/engine.rb +4 -0
  88. data/lib/knowledge_base/seeds.rb +7 -3
  89. data/lib/knowledge_base/version.rb +1 -1
  90. data/spec/controllers/knowledge_base/articles_controller_spec.rb +15 -4
  91. data/spec/controllers/knowledge_base/categories_controller_spec.rb +1 -1
  92. data/spec/dummy/db/development.sqlite3 +0 -0
  93. data/spec/dummy/db/schema.rb +39 -13
  94. data/spec/dummy/db/test.sqlite3 +0 -0
  95. data/spec/dummy/log/development.log +887 -0
  96. data/spec/dummy/log/test.log +999 -0
  97. data/spec/factories/knowledge_base_articles.rb +3 -3
  98. data/spec/factories/knowledge_base_categories.rb +3 -3
  99. data/spec/factories/knowledge_base_sectionables_attachment_lists.rb +6 -0
  100. data/spec/lib/knowledge_base/configuration_spec.rb +32 -8
  101. data/spec/lib/knowledge_base_spec.rb +3 -3
  102. data/spec/models/knowledge_base/article_spec.rb +0 -1
  103. data/spec/models/knowledge_base/category_article_association_spec.rb +0 -1
  104. data/spec/models/knowledge_base/category_spec.rb +0 -1
  105. data/spec/models/knowledge_base/section_spec.rb +0 -1
  106. data/spec/models/knowledge_base/sectionables/attachments/attachment_spec.rb +6 -0
  107. data/spec/models/knowledge_base/sectionables/attachments/list_spec.rb +13 -0
  108. data/spec/models/knowledge_base/sectionables/gallery/image_spec.rb +0 -1
  109. data/spec/models/knowledge_base/sectionables/gallery_spec.rb +0 -1
  110. data/spec/models/knowledge_base/sectionables/image_spec.rb +0 -1
  111. data/spec/models/knowledge_base/sectionables/links/link_spec.rb +0 -1
  112. data/spec/models/knowledge_base/sectionables/links_spec.rb +0 -1
  113. data/spec/models/knowledge_base/sectionables/list/item_spec.rb +0 -1
  114. data/spec/models/knowledge_base/sectionables/list_spec.rb +0 -1
  115. data/spec/models/knowledge_base/sectionables/sectionable_spec.rb +34 -0
  116. data/spec/models/knowledge_base/sectionables/text_spec.rb +0 -1
  117. data/spec/models/knowledge_base/sectionables/video_spec.rb +0 -7
  118. data/spec/spec_helper.rb +3 -0
  119. data/spec/views/knowledge_base/articles/show.html.erb_spec.rb +0 -1
  120. data/spec/views/knowledge_base/categories/index.html.erb_spec.rb +0 -1
  121. data/spec/views/knowledge_base/categories/show.html.erb_spec.rb +0 -1
  122. metadata +179 -7
  123. data/app/views/knowledge_base/sectionables/links/_links.html.erb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 902f665c6b7069b91bfb814f3ac35a037b84dba8
4
- data.tar.gz: b07ccea2e4bbd55331fdf4450e7f2f3ae854d755
3
+ metadata.gz: 9cb5a753f0a330d1ecdc720b54f4d0110f0cd343
4
+ data.tar.gz: 520627e63ae829f121465e11c72483bc85bdeb94
5
5
  SHA512:
6
- metadata.gz: 2b61a7f8da04f0203a213b49057ef44d4b4eb9901af0468000378bc475a0262322784b32b6b29897309b1f09fc9ead01e2dab5102785e53ab401dea25d625e72
7
- data.tar.gz: 95974a702dcf790fa2a60d5f974fad3963c02817242c2b5121668354a1fdab44546b5840db151a61f4e4979a5cdf23beef122f9b556fe98c0e360f89436880c7
6
+ metadata.gz: b2a19eef373954ca57f9815dbf71d56bd92fa8f21f82a982bf823e63d587da2e38c3d3931e504e29fad27b9c439f7c33db661c2a812a78410d6aa2443bd45c4e
7
+ data.tar.gz: b110fa52196088f3e8cdd3be1ca30550dd05a88ba1af10ef2df55e5cc5b20be7dc7abf62ec58eb18a9f193d7114f03a89d415d00b0e77ba7e3fd7657a7f83048
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ require 'thor'
2
+
1
3
  begin
2
4
  require 'bundler/setup'
3
5
  rescue LoadError
@@ -8,7 +10,7 @@ require 'rdoc/task'
8
10
 
9
11
  RDoc::Task.new(:rdoc) do |rdoc|
10
12
  rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'Mingle'
13
+ rdoc.title = 'Knowledge Base'
12
14
  rdoc.options << '--line-numbers'
13
15
  rdoc.rdoc_files.include('README.rdoc')
14
16
  rdoc.rdoc_files.include('lib/**/*.rb')
@@ -1,6 +1,5 @@
1
1
  module KnowledgeBase
2
2
  class CategoryArticleAssociation < ActiveRecord::Base
3
- belongs_to :category
4
- belongs_to :article
3
+ include Concerns::Models::CategoryArticleAssociation
5
4
  end
6
5
  end
@@ -1,9 +1,5 @@
1
1
  module KnowledgeBase
2
2
  class Section < ActiveRecord::Base
3
- # It sounds wrong that a section "belongs to" a sectionable, but we want the foreign
4
- # key to be on this side and declaring `belongs_to` is the only way to do that.
5
- belongs_to :sectionable, polymorphic: true
6
-
7
- belongs_to :container, polymorphic: true
3
+ include Concerns::Models::Section
8
4
  end
9
5
  end
@@ -0,0 +1,7 @@
1
+ module KnowledgeBase::Sectionables
2
+ module Attachments
3
+ def self.table_name_prefix
4
+ "knowledge_base_sectionables_attachments_"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module KnowledgeBase
2
+ class Sectionables::Attachments::Attachment < ActiveRecord::Base
3
+ include Concerns::Models::Sectionables::Attachments::Attachment
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module KnowledgeBase
2
+ class Sectionables::Attachments::List < Sectionables::Sectionable
3
+ include Concerns::Models::Sectionables::Attachments::List
4
+ end
5
+ end
@@ -1,9 +1,5 @@
1
- module KnowledgeBase::Sectionables
2
- class Gallery < Sectionable
3
- has_many :images, -> { order 'position DESC' }
4
-
5
- def to_s
6
- "#{super}: #{title}"
7
- end
1
+ module KnowledgeBase
2
+ class Sectionables::Gallery < Sectionables::Sectionable
3
+ include Concerns::Models::Sectionables::Gallery
8
4
  end
9
5
  end
@@ -1,7 +1,5 @@
1
1
  module KnowledgeBase
2
2
  class Sectionables::Gallery::Image < ActiveRecord::Base
3
- belongs_to :gallery
4
-
5
- mount_uploader :image, ImageUploader
3
+ include Concerns::Models::Sectionables::Gallery::Image
6
4
  end
7
5
  end
@@ -1,9 +1,5 @@
1
- module KnowledgeBase::Sectionables
2
- class Image < Sectionable
3
- mount_uploader :image, ImageUploader
4
-
5
- def to_s
6
- "#{super}: #{caption}"
7
- end
1
+ module KnowledgeBase
2
+ class Sectionables::Image < Sectionables::Sectionable
3
+ include Concerns::Models::Sectionables::Image
8
4
  end
9
5
  end
@@ -1,9 +1,7 @@
1
1
  module KnowledgeBase::Sectionables
2
- class Links < Sectionable
3
- has_many :links
4
-
5
- def to_s
6
- "#{super}: #{links.map(&:title).join(', ')}"
2
+ module Links
3
+ def self.table_name_prefix
4
+ 'knowledge_base_sectionables_links_'
7
5
  end
8
6
  end
9
7
  end
@@ -1,10 +1,5 @@
1
1
  module KnowledgeBase
2
2
  class Sectionables::Links::Link < ActiveRecord::Base
3
- # ActiveRecord assumes our table will be called 'knowledge_base_sectionables_link_links'
4
- # because it likes to singularize modules. 'Links' It is not a module, however, but rather
5
- # a class that represents a collection of links.
6
- self.table_name = 'knowledge_base_sectionables_links_links'
7
-
8
- belongs_to :links
3
+ include Concerns::Models::Sectionables::Links::Link
9
4
  end
10
5
  end
@@ -0,0 +1,5 @@
1
+ module KnowledgeBase
2
+ class Sectionables::Links::List < Sectionables::Sectionable
3
+ include Concerns::Models::Sectionables::Links::List
4
+ end
5
+ end
@@ -1,9 +1,5 @@
1
- module KnowledgeBase::Sectionables
2
- class List < Sectionable
3
- has_many :items, -> { order 'position ASC' }
4
-
5
- def to_s
6
- "#{super}: #{title}"
7
- end
1
+ module KnowledgeBase
2
+ class Sectionables::List < Sectionables::Sectionable
3
+ include Concerns::Models::Sectionables::List
8
4
  end
9
5
  end
@@ -1,5 +1,5 @@
1
1
  module KnowledgeBase
2
2
  class Sectionables::List::Item < ActiveRecord::Base
3
- belongs_to :list
3
+ include Concerns::Models::Sectionables::List::Item
4
4
  end
5
5
  end
@@ -1,9 +1,5 @@
1
- module KnowledgeBase::Sectionables
2
- class Sectionable < ActiveRecord::Base
3
- self.abstract_class = true
4
-
5
- def to_s
6
- self.class.model_name.human
7
- end
1
+ module KnowledgeBase
2
+ class Sectionables::Sectionable < ActiveRecord::Base
3
+ include Concerns::Models::Sectionables::Sectionable
8
4
  end
9
5
  end
@@ -1,7 +1,5 @@
1
- module KnowledgeBase::Sectionables
2
- class Text < Sectionable
3
- def to_s
4
- "#{super}: #{heading}"
5
- end
1
+ module KnowledgeBase
2
+ class Sectionables::Text < Sectionables::Sectionable
3
+ include Concerns::Models::Sectionables::Text
6
4
  end
7
5
  end
@@ -1,13 +1,5 @@
1
- module KnowledgeBase::Sectionables
2
- class Video < Sectionable
3
- VIDEO_ID_EXPRESSION = %r{^https?://(?:(?:www|m)\.)?youtube\.com/watch\?v=([^&]+)}
4
-
5
- def youtube_id
6
- url[VIDEO_ID_EXPRESSION, 1]
7
- end
8
-
9
- def to_s
10
- "#{super}: #{url}"
11
- end
1
+ module KnowledgeBase
2
+ class Sectionables::Video < Sectionables::Sectionable
3
+ include Concerns::Models::Sectionables::Video
12
4
  end
13
5
  end
@@ -0,0 +1,7 @@
1
+ module KnowledgeBase
2
+ class GenericFileUploader < CarrierWave::Uploader::Base
3
+ def store_dir
4
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
5
+ end
6
+ end
7
+ end
@@ -1,52 +1,4 @@
1
- # encoding: utf-8
2
-
3
1
  module KnowledgeBase
4
2
  class ImageUploader < CarrierWave::Uploader::Base
5
-
6
- # Include RMagick or MiniMagick support:
7
- # include CarrierWave::RMagick
8
- # include CarrierWave::MiniMagick
9
-
10
- # Choose what kind of storage to use for this uploader:
11
- storage KnowledgeBase.config.storage
12
-
13
- # Override the directory where uploaded files will be stored.
14
- # This is a sensible default for uploaders that are meant to be mounted:
15
- def store_dir
16
- "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
17
- end
18
-
19
- # Provide a default URL as a default if there hasn't been a file uploaded:
20
- # def default_url
21
- # # For Rails 3.1+ asset pipeline compatibility:
22
- # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
23
- #
24
- # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
25
- # end
26
-
27
- # Process files as they are uploaded:
28
- # process :scale => [200, 300]
29
- #
30
- # def scale(width, height)
31
- # # do something
32
- # end
33
-
34
- # Create different versions of your uploaded files:
35
- # version :thumb do
36
- # process :resize_to_fit => [50, 50]
37
- # end
38
-
39
- # Add a white list of extensions which are allowed to be uploaded.
40
- # For images you might use something like this:
41
- # def extension_white_list
42
- # %w(jpg jpeg gif png)
43
- # end
44
-
45
- # Override the filename of the uploaded files:
46
- # Avoid using model.id or version_name here, see uploader/store.rb for details.
47
- # def filename
48
- # "something.jpg" if original_filename
49
- # end
50
-
51
3
  end
52
4
  end
@@ -9,9 +9,9 @@
9
9
 
10
10
  <div class="sections">
11
11
  <% article.sections.each do |section| %>
12
- <div class="<%= section.sectionable.class.name.demodulize.downcase %> section">
13
- <%= render section.sectionable %>
14
- </div>
12
+ <div class="<%= section.sectionable.class.name.demodulize.downcase %> section <%= section.sectionable.style %>">
13
+ <%= render section.sectionable %>
14
+ </div>
15
15
  <% end %>
16
16
  </div>
17
17
  </div>
@@ -0,0 +1,6 @@
1
+ <div class="search">
2
+ <%= search_form_for @search do |f| %>
3
+ <%= f.label :title_or_description_cont %>
4
+ <%= f.search_field :title_or_description_cont %>
5
+ <% end %>
6
+ </div>
@@ -0,0 +1,11 @@
1
+ <%= render "search" %>
2
+
3
+ <div class="articles">
4
+ <% @articles.each do |article| %>
5
+ <div class="article">
6
+ <h2 class="title"><%= link_to article.title, article_path(article) %></h2>
7
+
8
+ <div class="description"><%= simple_format article.description %></div>
9
+ </div>
10
+ <% end %>
11
+ </div>
@@ -8,9 +8,9 @@
8
8
  </div>
9
9
 
10
10
  <div class="articles">
11
- <% category.articles.each do |article| %>
11
+ <% @articles.each do |article| %>
12
12
  <div class="article">
13
- <h2 class="title"><%= link_to article.title, category_article_path(category, article) %></h2>
13
+ <h2 class="title"><%= link_to article.title, article_path(article) %></h2>
14
14
 
15
15
  <div class="description"><%= simple_format article.description %></div>
16
16
  </div>
@@ -0,0 +1,14 @@
1
+ <section class="attachments">
2
+ <% list.attachments.each do |attachment| %>
3
+ <div class="link"><%= link_to attachment.title,
4
+ attachment.file.to_s,
5
+ download: File.basename(attachment.file.to_s) %>
6
+ </div>
7
+
8
+ <% if attachment.description.present? %>
9
+ <div class="description">
10
+ <%= simple_format attachment.description %>
11
+ </div>
12
+ <% end %>
13
+ <% end %>
14
+ </section>
@@ -0,0 +1,13 @@
1
+ <nav class="links">
2
+ <% list.links.each do |link| %>
3
+ <div class="link">
4
+ <%= link_to link.title, link.url %>
5
+ </div>
6
+
7
+ <% if link.description.present? %>
8
+ <div class="description">
9
+ <%= simple_format link.description %>
10
+ </div>
11
+ <% end %>
12
+ <% end %>
13
+ </nav>
@@ -1,5 +1,9 @@
1
1
  <h2 class="title"><%= list.title %></h2>
2
2
 
3
+ <% if list.image? %>
4
+ <%= image_tag list.image %>
5
+ <% end %>
6
+
3
7
  <div class="description">
4
8
  <%= simple_format list.description %>
5
9
  </div>
@@ -1,5 +1,9 @@
1
1
  <h2 class="heading"><%= text.heading %></h2>
2
2
 
3
+ <% if text.image? %>
4
+ <%= image_tag text.image %>
5
+ <% end %>
6
+
3
7
  <div class="lead">
4
8
  <%= simple_format text.lead %>
5
9
  </div>
@@ -1 +1,4 @@
1
- <iframe width="420" height="315" src="//www.youtube.com/embed/<%= video.youtube_id %>" frameborder="0" allowfullscreen></iframe>
1
+ <% if video.title %>
2
+ <h1><%= video.title %></h1>
3
+ <% end %>
4
+ <iframe width="420" height="315" src="//www.youtube.com/embed/<%= video.video_id %>" frameborder="0" allowfullscreen></iframe>
@@ -0,0 +1,131 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ knowledge_base/category:
5
+ one: Category
6
+ other: Categories
7
+ knowledge_base/article:
8
+ one: Article
9
+ other: Articles
10
+ knowledge_base/category_article_association:
11
+ one: Link
12
+ other: Links
13
+ knowledge_base/section:
14
+ one: Section
15
+ other: Sections
16
+ knowledge_base/sectionable:
17
+ one: Sectionable
18
+ other: Sectionables
19
+ knowledge_base/sectionables/attachments/attachment:
20
+ one: Attachment
21
+ other: Attachments
22
+ knowledge_base/sectionables/attachments/list:
23
+ one: Attachment list
24
+ other: Attachment lists
25
+ knowledge_base/sectionables/text:
26
+ one: Text
27
+ other: Texts
28
+ knowledge_base/sectionables/image:
29
+ one: Image
30
+ other: Images
31
+ knowledge_base/sectionables/gallery:
32
+ one: Gallery
33
+ other: Galleries
34
+ knowledge_base/sectionables/gallery/image:
35
+ one: Image
36
+ other: Images
37
+ knowledge_base/sectionables/list:
38
+ one: List
39
+ other: Lists
40
+ knowledge_base/sectionables/list/item:
41
+ one: List item
42
+ other: List items
43
+ knowledge_base/sectionables/links/list:
44
+ one: Link list
45
+ other: Link lists
46
+ knowledge_base/sectionables/links/link:
47
+ one: Link
48
+ other: Links
49
+ knowledge_base/sectionables/video:
50
+ one: Video
51
+ other: Videos
52
+
53
+ attributes:
54
+ common: &common
55
+ title: Title
56
+ slug: Slug
57
+ description: Description
58
+ position: Position
59
+ created_at: Created at
60
+ updated_at: Updated at
61
+
62
+ sectionables: &sectionables
63
+ style: Style
64
+
65
+ knowledge_base/category:
66
+ <<: *common
67
+ category: Category
68
+ category_id: Category
69
+ published_at: Published at
70
+ knowledge_base/article:
71
+ <<: *common
72
+ categories: Categories
73
+ category_article_assocations: Links between categories and articles
74
+ published_at: Published at
75
+ sections: Sections
76
+ knowledge_base/category_article_association:
77
+ <<: *common
78
+ article: Article
79
+ article_id: Article
80
+ category: Category
81
+ category_id: Category
82
+ knowledge_base/section:
83
+ <<: *common
84
+ sectionable: Sectionable
85
+ sectionable_type: Sectionable type
86
+ knowledge_base/sectionables/attachments/attachment:
87
+ <<: *common
88
+ file: File
89
+ title: Title
90
+ knowledge_base/sectionables/attachments/list:
91
+ <<: *common
92
+ <<: *sectionables
93
+ attachments: Attachments
94
+ file: File
95
+ title: Title
96
+ knowledge_base/sectionables/text:
97
+ <<: *common
98
+ <<: *sectionables
99
+ body: Body text
100
+ heading: Heading
101
+ lead: Lead paragraph
102
+ remove_image: Remove image
103
+ knowledge_base/sectionables/image:
104
+ <<: *common
105
+ <<: *sectionables
106
+ caption: Image caption
107
+ image: Image
108
+ knowledge_base/sectionables/gallery:
109
+ <<: *common
110
+ <<: *sectionables
111
+ knowledge_base/sectionables/gallery/image:
112
+ <<: *common
113
+ caption: Image caption
114
+ image: Image
115
+ knowledge_base/sectionables/list:
116
+ <<: *common
117
+ <<: *sectionables
118
+ remove_image: Remove image
119
+ knowledge_base/sectionables/list/item:
120
+ <<: *common
121
+ body: Body text
122
+ knowledge_base/sectionables/links/list:
123
+ <<: *common
124
+ <<: *sectionables
125
+ knowledge_base/sectionables/links/link:
126
+ <<: *common
127
+ url: URL
128
+ knowledge_base/sectionables/video:
129
+ <<: *common
130
+ <<: *sectionables
131
+ url: URL