rails_app_generator 0.2.8 → 0.2.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/after_templates/addons/administrate/_.rb +45 -0
  4. data/after_templates/addons/administrate/app/controllers/home_controller.rb +4 -0
  5. data/after_templates/addons/administrate/app/dashboards/author_dashboard.rb +74 -0
  6. data/after_templates/addons/administrate/app/dashboards/post_dashboard.rb +74 -0
  7. data/after_templates/addons/administrate/app/dashboards/product_dashboard.rb +71 -0
  8. data/after_templates/addons/administrate/app/models/author.rb +6 -0
  9. data/after_templates/addons/administrate/app/models/post.rb +5 -0
  10. data/after_templates/addons/administrate/app/views/home/index.html.erb +3 -0
  11. data/after_templates/addons/administrate/app/views/layouts/_footer.html.erb +3 -0
  12. data/after_templates/addons/administrate/app/views/layouts/_navbar.html.erb +5 -0
  13. data/after_templates/addons/administrate/app/views/layouts/application.html.erb +23 -0
  14. data/after_templates/addons/administrate/db/seeds.rb +116 -0
  15. data/after_templates/addons/redcarpet/_.rb +22 -0
  16. data/after_templates/addons/redcarpet/app/controllers/home_controller.rb +299 -0
  17. data/after_templates/addons/redcarpet/app/views/home/index.html.erb +5 -0
  18. data/after_templates/addons/redcarpet/app/views/layouts/_footer.html.erb +3 -0
  19. data/after_templates/addons/redcarpet/app/views/layouts/_navbar.html.erb +4 -0
  20. data/after_templates/addons/redcarpet/app/views/layouts/application.html.erb +23 -0
  21. data/docs/last_run/app_generator_class.json +16 -0
  22. data/docs/last_run/app_generator_data.json +7 -5
  23. data/docs/last_run/rails_options_class.json +16 -0
  24. data/docs/last_run/rails_options_data.json +7 -5
  25. data/lib/rails_app_generator/addons/administrate.rb +30 -0
  26. data/lib/rails_app_generator/addons/redcarpet.rb +13 -0
  27. data/lib/rails_app_generator/rag_initializer.rb +2 -0
  28. data/lib/rails_app_generator/version.rb +1 -1
  29. data/package-lock.json +2 -2
  30. data/package.json +1 -1
  31. data/profiles/addons/administrate.json +15 -0
  32. data/profiles/addons/redcarpet.json +12 -0
  33. data/tasks/profile.thor +0 -1
  34. data/templates/thor_task/addon/addon.tt +1 -1
  35. data/templates/thor_task/profile/app/controllers/home_controller.rb +0 -3
  36. data/templates/thor_task/profile/app/views/home/index.html.erb.tt +0 -8
  37. metadata +24 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e803a1080601b2097577a2d62570ed49a99e4ba73a5d17308e116a3da303ea9
4
- data.tar.gz: 0ce18a4307afb75ceaa51ec62f24e25a30cd32b96a32a5e7c5a3269a960eaec2
3
+ metadata.gz: e6c154de84c08fa40c02064d9521397096c1bdf33c4180a143b874aac3fc241d
4
+ data.tar.gz: 8a002deb836d4d51c2f18248d0798f47109db7dce25e72eb725d1a697ed3a081
5
5
  SHA512:
6
- metadata.gz: 1863f937b018927dc812d5fddbd36af00cb77b0c6e9e1550cf060fd08007a11d1c0a9824e87d0deea328a583e5c75b584a529a55c006a0fb509d2333ae0f0c2f
7
- data.tar.gz: a9a0814e79a2dc2eca868ec1e1e60849362063668970bb5e4bbeda998c70e65ab2ea9f0e54cc13507d8e624002857812ae5b18251b3d6ae040dc603cc5d53b57
6
+ metadata.gz: f59e8acec1a8e1c6dae728c316901ca75320f205bf4b8c562d9608d1c2f00b5a5ca5e264760da2a26cc41d832a8137e8215ce3fea2d121276fb04fdf366afe90
7
+ data.tar.gz: e63dde420822b9612ecfe98140e846eb20af617851be18a00a0018d25f943d5a7dfca92582e264d1de0e948058ce9654f1600dddb4d94a05d10238eaf75c8248
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## [0.2.10](https://github.com/klueless-io/rails_app_generator/compare/v0.2.9...v0.2.10) (2022-08-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add administrate addon ([330ce3c](https://github.com/klueless-io/rails_app_generator/commit/330ce3c0db2148ccb34585eb7fb45dae8b267884))
7
+
8
+ ## [0.2.9](https://github.com/klueless-io/rails_app_generator/compare/v0.2.8...v0.2.9) (2022-08-11)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add redcarpet addon ([fb8acf0](https://github.com/klueless-io/rails_app_generator/commit/fb8acf09d3d1be3d4eb9b82e5fc1d9af1fea0e0c))
14
+
15
+ ## [0.2.8](https://github.com/klueless-io/rails_app_generator/compare/v0.2.7...v0.2.8) (2022-08-11)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * add bcrypt_ruby profile ([a07dfdb](https://github.com/klueless-io/rails_app_generator/commit/a07dfdb04190826edfe3a1258b00e00653326e10))
21
+
1
22
  ## [0.2.7](https://github.com/klueless-io/rails_app_generator/compare/v0.2.6...v0.2.7) (2022-08-11)
2
23
 
3
24
 
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Administrate is inspired by Rails Admin and ActiveAdmin, but aims to provide a better developer/user experience.
4
+ #
5
+ # exe/rag addons/administrate
6
+
7
+ self.local_template_path = File.dirname(__FILE__)
8
+
9
+ gac 'base rails 7 image created'
10
+
11
+ bundle_install
12
+
13
+ add_controller('home', 'index')
14
+
15
+ route("root 'home#index'")
16
+
17
+ force_copy
18
+
19
+ directory "app/controllers"
20
+ directory "app/views/home"
21
+ directory "app/views/layouts"
22
+ template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
23
+
24
+ template 'db/seeds.rb' , 'db/seeds.rb'
25
+
26
+ after_bundle do
27
+ setup_db
28
+
29
+ generate('administrate:install')
30
+
31
+ directory "app/dashboards"
32
+
33
+ rubocop
34
+ end
35
+
36
+ def setup_db
37
+ add_scaffold('author', 'name:string email:string bio:text')
38
+ add_scaffold('post', 'title:string content:text published:boolean author:references')
39
+ add_scaffold('product', 'name', 'quantity:integer', 'price:decimal')
40
+
41
+ directory "app/models"
42
+
43
+ db_migrate
44
+ db_seed
45
+ end
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'administrate/base_dashboard'
4
+
5
+ class AuthorDashboard < Administrate::BaseDashboard
6
+ # ATTRIBUTE_TYPES
7
+ # a hash that describes the type of each of the model's fields.
8
+ #
9
+ # Each different type represents an Administrate::Field object,
10
+ # which determines how the attribute is displayed
11
+ # on pages throughout the dashboard.
12
+ ATTRIBUTE_TYPES = {
13
+ id: Field::Number,
14
+ name: Field::String,
15
+ email: Field::String,
16
+ bio: Field::Text,
17
+ posts: Field::HasMany,
18
+ created_at: Field::DateTime,
19
+ updated_at: Field::DateTime
20
+ }.freeze
21
+
22
+ # COLLECTION_ATTRIBUTES
23
+ # an array of attributes that will be displayed on the model's index page.
24
+ #
25
+ # By default, it's limited to four items to reduce clutter on index pages.
26
+ # Feel free to add, remove, or rearrange items.
27
+ COLLECTION_ATTRIBUTES = %i[
28
+ id
29
+ name
30
+ email
31
+ posts
32
+ ].freeze
33
+
34
+ # SHOW_PAGE_ATTRIBUTES
35
+ # an array of attributes that will be displayed on the model's show page.
36
+ SHOW_PAGE_ATTRIBUTES = %i[
37
+ id
38
+ name
39
+ email
40
+ bio
41
+ posts
42
+ created_at
43
+ updated_at
44
+ ].freeze
45
+
46
+ # FORM_ATTRIBUTES
47
+ # an array of attributes that will be displayed
48
+ # on the model's form (`new` and `edit`) pages.
49
+ FORM_ATTRIBUTES = %i[
50
+ name
51
+ email
52
+ bio
53
+ posts
54
+ ].freeze
55
+
56
+ # COLLECTION_FILTERS
57
+ # a hash that defines filters that can be used while searching via the search
58
+ # field of the dashboard.
59
+ #
60
+ # For example to add an option to search for open resources by typing "open:"
61
+ # in the search field:
62
+ #
63
+ # COLLECTION_FILTERS = {
64
+ # open: ->(resources) { resources.where(open: true) }
65
+ # }.freeze
66
+ COLLECTION_FILTERS = {}.freeze
67
+
68
+ # Overwrite this method to customize how authors are displayed
69
+ # across all pages of the admin dashboard.
70
+ #
71
+ # def display_resource(author)
72
+ # "Author ##{author.id}"
73
+ # end
74
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'administrate/base_dashboard'
4
+
5
+ class PostDashboard < Administrate::BaseDashboard
6
+ # ATTRIBUTE_TYPES
7
+ # a hash that describes the type of each of the model's fields.
8
+ #
9
+ # Each different type represents an Administrate::Field object,
10
+ # which determines how the attribute is displayed
11
+ # on pages throughout the dashboard.
12
+ ATTRIBUTE_TYPES = {
13
+ author: Field::BelongsTo,
14
+ id: Field::Number,
15
+ title: Field::String,
16
+ content: Field::Text,
17
+ published: Field::Boolean,
18
+ created_at: Field::DateTime,
19
+ updated_at: Field::DateTime
20
+ }.freeze
21
+
22
+ # COLLECTION_ATTRIBUTES
23
+ # an array of attributes that will be displayed on the model's index page.
24
+ #
25
+ # By default, it's limited to four items to reduce clutter on index pages.
26
+ # Feel free to add, remove, or rearrange items.
27
+ COLLECTION_ATTRIBUTES = %i[
28
+ author
29
+ id
30
+ title
31
+ content
32
+ ].freeze
33
+
34
+ # SHOW_PAGE_ATTRIBUTES
35
+ # an array of attributes that will be displayed on the model's show page.
36
+ SHOW_PAGE_ATTRIBUTES = %i[
37
+ author
38
+ id
39
+ title
40
+ content
41
+ published
42
+ created_at
43
+ updated_at
44
+ ].freeze
45
+
46
+ # FORM_ATTRIBUTES
47
+ # an array of attributes that will be displayed
48
+ # on the model's form (`new` and `edit`) pages.
49
+ FORM_ATTRIBUTES = %i[
50
+ author
51
+ title
52
+ content
53
+ published
54
+ ].freeze
55
+
56
+ # COLLECTION_FILTERS
57
+ # a hash that defines filters that can be used while searching via the search
58
+ # field of the dashboard.
59
+ #
60
+ # For example to add an option to search for open resources by typing "open:"
61
+ # in the search field:
62
+ #
63
+ # COLLECTION_FILTERS = {
64
+ # open: ->(resources) { resources.where(open: true) }
65
+ # }.freeze
66
+ COLLECTION_FILTERS = {}.freeze
67
+
68
+ # Overwrite this method to customize how posts are displayed
69
+ # across all pages of the admin dashboard.
70
+ #
71
+ # def display_resource(post)
72
+ # "Post ##{post.id}"
73
+ # end
74
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'administrate/base_dashboard'
4
+
5
+ class ProductDashboard < Administrate::BaseDashboard
6
+ # ATTRIBUTE_TYPES
7
+ # a hash that describes the type of each of the model's fields.
8
+ #
9
+ # Each different type represents an Administrate::Field object,
10
+ # which determines how the attribute is displayed
11
+ # on pages throughout the dashboard.
12
+ ATTRIBUTE_TYPES = {
13
+ id: Field::Number,
14
+ name: Field::String,
15
+ quantity: Field::Number,
16
+ price: Field::String.with_options(searchable: false),
17
+ created_at: Field::DateTime,
18
+ updated_at: Field::DateTime
19
+ }.freeze
20
+
21
+ # COLLECTION_ATTRIBUTES
22
+ # an array of attributes that will be displayed on the model's index page.
23
+ #
24
+ # By default, it's limited to four items to reduce clutter on index pages.
25
+ # Feel free to add, remove, or rearrange items.
26
+ COLLECTION_ATTRIBUTES = %i[
27
+ id
28
+ name
29
+ quantity
30
+ price
31
+ ].freeze
32
+
33
+ # SHOW_PAGE_ATTRIBUTES
34
+ # an array of attributes that will be displayed on the model's show page.
35
+ SHOW_PAGE_ATTRIBUTES = %i[
36
+ id
37
+ name
38
+ quantity
39
+ price
40
+ created_at
41
+ updated_at
42
+ ].freeze
43
+
44
+ # FORM_ATTRIBUTES
45
+ # an array of attributes that will be displayed
46
+ # on the model's form (`new` and `edit`) pages.
47
+ FORM_ATTRIBUTES = %i[
48
+ name
49
+ quantity
50
+ price
51
+ ].freeze
52
+
53
+ # COLLECTION_FILTERS
54
+ # a hash that defines filters that can be used while searching via the search
55
+ # field of the dashboard.
56
+ #
57
+ # For example to add an option to search for open resources by typing "open:"
58
+ # in the search field:
59
+ #
60
+ # COLLECTION_FILTERS = {
61
+ # open: ->(resources) { resources.where(open: true) }
62
+ # }.freeze
63
+ COLLECTION_FILTERS = {}.freeze
64
+
65
+ # Overwrite this method to customize how products are displayed
66
+ # across all pages of the admin dashboard.
67
+ #
68
+ # def display_resource(product)
69
+ # "Product ##{product.id}"
70
+ # end
71
+ end
@@ -0,0 +1,6 @@
1
+ class Author < ApplicationRecord
2
+ has_many :posts
3
+
4
+ validates :name, presence: true
5
+ validates :bio, length: { maximum: 100 }
6
+ end
@@ -0,0 +1,5 @@
1
+ class Post < ApplicationRecord
2
+ belongs_to :author, required: true
3
+
4
+ validates :title, presence: true, format: { with: /\A[a-zA-Z &0-9+!]+\z/, message: "only allows letters, numbers plus &!+" }
5
+ end
@@ -0,0 +1,3 @@
1
+ <h1>Administrate</h1>
2
+
3
+ <p>Administrate is inspired by Rails Admin and ActiveAdmin, but aims to provide a better developer/user experience.</p>
@@ -0,0 +1,3 @@
1
+ <footer>
2
+ <hr />
3
+ </footer>
@@ -0,0 +1,5 @@
1
+ <header>
2
+ <%= link_to 'Home', root_path %> |
3
+ <%= link_to 'Admin', admin_root_path %>
4
+ <hr />
5
+ </header>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= camelized %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <%%= csrf_meta_tags %>
7
+ <%%= csp_meta_tag %>
8
+
9
+ <%- if options[:skip_hotwire] || options[:skip_javascript] -%>
10
+ <%%= stylesheet_link_tag "application" %>
11
+ <%- else -%>
12
+ <%%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
13
+ <%- end -%>
14
+ </head>
15
+
16
+ <body>
17
+ <%%= render 'layouts/navbar' %>
18
+ <main>
19
+ <%%= yield %>
20
+ </main>
21
+ <%%= render 'layouts/footer' %>
22
+ </body>
23
+ </html>
@@ -0,0 +1,116 @@
1
+ def fake_title
2
+ [
3
+ 'Fundamentals of Wavelets',
4
+ 'Data Smart',
5
+ 'God Created the Integers',
6
+ 'Superfreakonomics',
7
+ 'Orientalism',
8
+ 'Nature of Statistical Learning Theory',
9
+ 'Integration of the Indian States',
10
+ 'Image Processing & Mathematical Morphology',
11
+ 'How to Think Like Sherlock Holmes',
12
+ 'Data Scientists at Work',
13
+ 'Slaughterhouse Five',
14
+ 'Birth of a Theorem',
15
+ 'Structure & Interpretation of Computer Programs',
16
+ 'Age of Wrath',
17
+ 'Trial',
18
+ 'Data Mining Handbook',
19
+ 'New Machiavelli',
20
+ 'Physics & Philosophy',
21
+ 'Making Software',
22
+ 'Analysis',
23
+ 'Machine Learning for Hackers',
24
+ 'Signal and the Noise',
25
+ 'Python for Data Analysis',
26
+ 'Introduction to Algorithms',
27
+ 'Beautiful and the Damned',
28
+ 'Outsider',
29
+ 'Complete Sherlock Holmes',
30
+ 'Complete Sherlock Holmes',
31
+ 'Wealth of Nations',
32
+ 'Pillars of the Earth',
33
+ 'Mein Kampf',
34
+ 'Tao of Physics',
35
+ 'Farewell to Arms',
36
+ 'Veteran',
37
+ 'False Impressions',
38
+ 'Last Lecture',
39
+ 'Return of the Primitive',
40
+ 'Jurassic Park',
41
+ 'Russian Journal',
42
+ 'Tales of Mystery and Imagination',
43
+ 'Freakonomics',
44
+ 'Hidden Connections',
45
+ 'Story of Philosophy',
46
+ 'Asami Asami',
47
+ 'Journal of a Novel',
48
+ 'Once There Was a War',
49
+ 'Moon is Down',
50
+ 'Brethren',
51
+ 'In a Free State',
52
+ 'Catch 22',
53
+ 'Complete Mastermind',
54
+ 'Dylan on Dylan',
55
+ 'Soft Computing & Intelligent Systems',
56
+ 'Textbook of Economic Theory',
57
+ 'Econometric Analysis',
58
+ 'Learning OpenCV',
59
+ 'Data Structures Using C & C++',
60
+ 'Computer Vision',
61
+ 'Principles of Communication Systems',
62
+ 'Let Us C',
63
+ 'Amulet of Samarkand',
64
+ 'Crime and Punishment',
65
+ 'Angels & Demons',
66
+ 'Argumentative Indian',
67
+ 'Sea of Poppies',
68
+ 'Idea of Justice',
69
+ 'Raisin in the Sun',
70
+ 'Prisoner of Birth',
71
+ 'Scoop!',
72
+ 'Ahe Manohar Tari',
73
+ 'Last Mughal',
74
+ 'Social Choice & Welfare',
75
+ 'Radiowaril Bhashane & Shrutika',
76
+ 'Gun Gayin Awadi',
77
+ 'Aghal Paghal',
78
+ 'Beyond Degrees',
79
+ 'Manasa',
80
+ 'India from Midnight to Milennium',
81
+ 'Great Indian Novel',
82
+ 'O Jerusalem!',
83
+ 'City of Joy',
84
+ 'Freedom at Midnight',
85
+ 'Winter of Our Discontent',
86
+ 'On Education',
87
+ 'Free Will',
88
+ 'Bookless in Baghdad',
89
+ 'Case of the Lame Canary',
90
+ 'Theory of Everything',
91
+ 'New Markets & Other Essays',
92
+ 'Electric Universe',
93
+ 'Hunchback of Notre Dame',
94
+ 'Burning Bright',
95
+ 'Age of Discontuinity'
96
+ ].sample
97
+ end
98
+
99
+ 60.times do
100
+ Author.create!(name: Faker::Name.name, bio: Faker::Lorem.words(number: 5).join(' '), email: Faker::Internet.email)
101
+ end
102
+
103
+ 100.times do |i|
104
+ Post.create!(title: fake_title,
105
+ content: "This is the body of post #{i}",
106
+ published: Faker::Boolean.boolean(true_ratio: 0.6),
107
+ author: Author.all.sample)
108
+ end
109
+
110
+ 200.times do
111
+ Product.create!(
112
+ name: Faker::Name.name,
113
+ quantity: Faker::Number.number(digits: 2),
114
+ price: Faker::Number.decimal(l_digits: 4)
115
+ )
116
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A fast, safe and extensible Markdown to (X)HTML parser
4
+ #
5
+ # exe/rag addons/redcarpet
6
+
7
+ self.local_template_path = File.dirname(__FILE__)
8
+
9
+ gac 'base rails 7 image created'
10
+
11
+ bundle_install
12
+
13
+ add_controller('home', 'index')
14
+
15
+ route("root 'home#index'")
16
+
17
+ force_copy
18
+
19
+ directory "app/controllers"
20
+ directory "app/views/home"
21
+ directory "app/views/layouts"
22
+ template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
@@ -0,0 +1,299 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ opts = {
4
+ tables: true,
5
+ strikethrough: true,
6
+ fenced_code_blocks: true
7
+ }
8
+ # Initializes a Markdown parser
9
+ markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, **opts)
10
+
11
+ @html = markdown.render(markdown_example).html_safe
12
+ end
13
+
14
+ private
15
+
16
+ def markdown_example
17
+ <<-MARKDOWN
18
+ H1s are easy in Markdown
19
+ ========================
20
+
21
+ ## H2
22
+
23
+ ### H3
24
+
25
+ #### H4
26
+
27
+ ##### H5
28
+
29
+ ###### H6
30
+
31
+ Paragraphs are separated by a blank line.
32
+
33
+ 2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists
34
+ look like:
35
+
36
+ * this one
37
+ * that one
38
+ * the other one
39
+
40
+ Emphasis, aka italics, with *asterisks* or _underscores_.
41
+
42
+ Strong emphasis, aka bold, with **asterisks** or __underscores__.
43
+
44
+ Strikethrough uses two tildes. ~~Scratch this.~~
45
+
46
+ ![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
47
+
48
+ ```
49
+ No language indicated, so no syntax highlighting.
50
+ But let's throw in a <b>tag</b>.
51
+ ```
52
+
53
+ | Tables | Are | Cool |
54
+ | ------------- |:-------------:| -----:|
55
+ | col 3 is | right-aligned | $1600 |
56
+ | col 2 is | centered | $12 |
57
+ | zebra stripes | are neat | $1 |
58
+
59
+ > Blockquotes are very handy in email to emulate reply text.
60
+ > This line is part of the same quote.
61
+
62
+ Quote break.
63
+
64
+ > This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.
65
+
66
+
67
+ [![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/mpWFrUwAN88/0.jpg)](http://www.youtube.com/watch?v=mpWFrUwAN88)
68
+
69
+
70
+ MARKDOWN
71
+ end
72
+
73
+ def markdown_example2
74
+ <<-MARKDOWN
75
+ ---
76
+ __Advertisement :)__
77
+
78
+ - __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image
79
+ resize in browser.
80
+ - __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly
81
+ i18n with plurals support and easy syntax.
82
+
83
+
84
+
85
+ You will like those projects!
86
+
87
+ ---
88
+
89
+ # h1 Heading 8-)
90
+ ## h2 Heading
91
+ ### h3 Heading
92
+ #### h4 Heading
93
+ ##### h5 Heading
94
+ ###### h6 Heading
95
+
96
+
97
+ ## Horizontal Rules
98
+
99
+ ___
100
+
101
+ ---
102
+
103
+ ***
104
+
105
+
106
+ ## Typographic replacements
107
+
108
+ Enable typographer option to see result.
109
+
110
+ (c) (C) (r) (R) (tm) (TM) (p) (P) +-
111
+
112
+ test.. test... test..... test?..... test!....
113
+
114
+ !!!!!! ???? ,, -- ---
115
+
116
+ "Smartypants, double quotes" and 'single quotes'
117
+
118
+
119
+ ## Emphasis
120
+
121
+ **This is bold text**
122
+
123
+ __This is bold text__
124
+
125
+ *This is italic text*
126
+
127
+ _This is italic text_
128
+
129
+ ~~Strikethrough~~
130
+
131
+
132
+ ## Blockquotes
133
+
134
+
135
+ > Blockquotes can also be nested...
136
+ >> ...by using additional greater-than signs right next to each other...
137
+ > > > ...or with spaces between arrows.
138
+
139
+
140
+ ## Lists
141
+
142
+ Unordered
143
+
144
+ + Create a list by starting a line with `+`, `-`, or `*`
145
+ + Sub-lists are made by indenting 2 spaces:
146
+ - Marker character change forces new list start:
147
+ * Ac tristique libero volutpat at
148
+ + Facilisis in pretium nisl aliquet
149
+ - Nulla volutpat aliquam velit
150
+ + Very easy!
151
+
152
+ Ordered
153
+
154
+ 1. Lorem ipsum dolor sit amet
155
+ 2. Consectetur adipiscing elit
156
+ 3. Integer molestie lorem at massa
157
+
158
+
159
+ 1. You can use sequential numbers...
160
+ 1. ...or keep all the numbers as `1.`
161
+
162
+ Start numbering with offset:
163
+
164
+ 57. foo
165
+ 1. bar
166
+
167
+
168
+ ## Code
169
+
170
+ Inline `code`
171
+
172
+ Indented code
173
+
174
+ // Some comments
175
+ line 1 of code
176
+ line 2 of code
177
+ line 3 of code
178
+
179
+
180
+ ## Tables
181
+
182
+ | Option | Description |
183
+ | ------ | ----------- |
184
+ | data | path to data files to supply the data that will be passed into templates. |
185
+ | engine | engine to be used for processing templates. Handlebars is the default. |
186
+ | ext | extension to be used for dest files. |
187
+
188
+ Right aligned columns
189
+
190
+ | Option | Description |
191
+ | ------:| -----------:|
192
+ | data | path to data files to supply the data that will be passed into templates. |
193
+ | engine | engine to be used for processing templates. Handlebars is the default. |
194
+ | ext | extension to be used for dest files. |
195
+
196
+
197
+ ## Links
198
+
199
+ [link text](http://dev.nodeca.com)
200
+
201
+ [link with title](http://nodeca.github.io/pica/demo/ "title text!")
202
+
203
+
204
+ ## Plugins
205
+
206
+ The killer feature of `markdown-it` is very effective support of
207
+ [syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).
208
+
209
+
210
+ ### [Emojies](https://github.com/markdown-it/markdown-it-emoji)
211
+
212
+ > Classic markup: :wink: :crush: :cry: :tear: :laughing: :yum:
213
+ >
214
+ > Shortcuts (emoticons): :-) :-( 8-) ;)
215
+
216
+ see [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.
217
+
218
+
219
+ ### [Subscript](https://github.com/markdown-it/markdown-it-sub) / [Superscript](https://github.com/markdown-it/markdown-it-sup)
220
+
221
+ - 19^th^
222
+ - H~2~O
223
+
224
+
225
+ ### [\<ins>](https://github.com/markdown-it/markdown-it-ins)
226
+
227
+ ++Inserted text++
228
+
229
+
230
+ ### [\<mark>](https://github.com/markdown-it/markdown-it-mark)
231
+
232
+ ==Marked text==
233
+
234
+
235
+ ### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)
236
+
237
+ Footnote 1 link[^first].
238
+
239
+ Footnote 2 link[^second].
240
+
241
+ Inline footnote^[Text of inline footnote] definition.
242
+
243
+ Duplicated footnote reference[^second].
244
+
245
+ [^first]: Footnote **can have markup**
246
+
247
+ and multiple paragraphs.
248
+
249
+ [^second]: Footnote text.
250
+
251
+
252
+ ### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)
253
+
254
+ Term 1
255
+
256
+ : Definition 1
257
+ with lazy continuation.
258
+
259
+ Term 2 with *inline markup*
260
+
261
+ : Definition 2
262
+
263
+ { some code, part of Definition 2 }
264
+
265
+ Third paragraph of definition 2.
266
+
267
+ _Compact style:_
268
+
269
+ Term 1
270
+ ~ Definition 1
271
+
272
+ Term 2
273
+ ~ Definition 2a
274
+ ~ Definition 2b
275
+
276
+
277
+ ### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)
278
+
279
+ This is HTML abbreviation example.
280
+
281
+ It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on.
282
+
283
+ *[HTML]: Hyper Text Markup Language
284
+
285
+ ### [Custom containers](https://github.com/markdown-it/markdown-it-container)
286
+
287
+ ::: warning
288
+ *here be dragons*
289
+ :::
290
+
291
+ ## Images
292
+
293
+ ![Minion](https://octodex.github.com/images/minion.png)
294
+ ![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat")
295
+
296
+ Like links, Images also have a footnote style syntax
297
+ MARKDOWN
298
+ end
299
+ end
@@ -0,0 +1,5 @@
1
+ <h1>Redcarpet</h1>
2
+
3
+ <h2>A fast, safe and extensible Markdown to (X)HTML parser</h2>
4
+
5
+ <%= @html %>
@@ -0,0 +1,3 @@
1
+ <footer>
2
+ <hr />
3
+ </footer>
@@ -0,0 +1,4 @@
1
+ <header>
2
+ <%= link_to 'Home', root_path %>
3
+ <hr />
4
+ </header>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= camelized %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <%%= csrf_meta_tags %>
7
+ <%%= csp_meta_tag %>
8
+
9
+ <%- if options[:skip_hotwire] || options[:skip_javascript] -%>
10
+ <%%= stylesheet_link_tag "application" %>
11
+ <%- else -%>
12
+ <%%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
13
+ <%- end -%>
14
+ </head>
15
+
16
+ <body>
17
+ <%%= render 'layouts/navbar' %>
18
+ <main>
19
+ <%%= yield %>
20
+ </main>
21
+ <%%= render 'layouts/footer' %>
22
+ </body>
23
+ </html>
@@ -46,6 +46,7 @@
46
46
  "add_annotate",
47
47
  "add_lograge",
48
48
  "add_acts_as_list",
49
+ "add_administrate",
49
50
  "add_browser",
50
51
  "add_bcrypt_ruby",
51
52
  "add_chartkick",
@@ -58,6 +59,7 @@
58
59
  "add_phony_rails",
59
60
  "add_public_suffix",
60
61
  "add_rails_html_sanitizer",
62
+ "add_redcarpet",
61
63
  "add_twilio_ruby"
62
64
  ],
63
65
  "class_options": [
@@ -383,6 +385,13 @@
383
385
  "default": false,
384
386
  "required": false
385
387
  },
388
+ {
389
+ "name": "add_administrate",
390
+ "description": "Indicates when to generate add administrate",
391
+ "type": "boolean",
392
+ "default": false,
393
+ "required": false
394
+ },
386
395
  {
387
396
  "name": "add_browser",
388
397
  "description": "Indicates when to generate add browser",
@@ -467,6 +476,13 @@
467
476
  "default": false,
468
477
  "required": false
469
478
  },
479
+ {
480
+ "name": "add_redcarpet",
481
+ "description": "Indicates when to generate add redcarpet",
482
+ "type": "boolean",
483
+ "default": false,
484
+ "required": false
485
+ },
470
486
  {
471
487
  "name": "add_twilio_ruby",
472
488
  "description": "Indicates when to generate add twilio ruby",
@@ -32,14 +32,15 @@
32
32
  "test": "rspec",
33
33
  "add_devise": false,
34
34
  "add_dotenv": false,
35
- "add_rubocop": false,
36
- "add_annotate": false,
35
+ "add_rubocop": true,
36
+ "add_annotate": true,
37
37
  "add_lograge": false,
38
38
  "add_acts_as_list": false,
39
+ "add_administrate": true,
39
40
  "add_browser": false,
40
- "add_bcrypt_ruby": true,
41
+ "add_bcrypt_ruby": false,
41
42
  "add_chartkick": false,
42
- "add_faker": false,
43
+ "add_faker": true,
43
44
  "add_groupdate": false,
44
45
  "add_hexapdf": false,
45
46
  "add_httparty": false,
@@ -48,7 +49,8 @@
48
49
  "add_phony_rails": false,
49
50
  "add_public_suffix": false,
50
51
  "add_rails_html_sanitizer": false,
52
+ "add_redcarpet": false,
51
53
  "add_twilio_ruby": false,
52
- "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/bcrypt_ruby/_.rb"
54
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/administrate/_.rb"
53
55
  }
54
56
  }
@@ -46,6 +46,7 @@
46
46
  "add_annotate",
47
47
  "add_lograge",
48
48
  "add_acts_as_list",
49
+ "add_administrate",
49
50
  "add_browser",
50
51
  "add_bcrypt_ruby",
51
52
  "add_chartkick",
@@ -58,6 +59,7 @@
58
59
  "add_phony_rails",
59
60
  "add_public_suffix",
60
61
  "add_rails_html_sanitizer",
62
+ "add_redcarpet",
61
63
  "add_twilio_ruby"
62
64
  ],
63
65
  "class_options": [
@@ -383,6 +385,13 @@
383
385
  "default": false,
384
386
  "required": false
385
387
  },
388
+ {
389
+ "name": "add_administrate",
390
+ "description": "",
391
+ "type": "boolean",
392
+ "default": false,
393
+ "required": false
394
+ },
386
395
  {
387
396
  "name": "add_browser",
388
397
  "description": "",
@@ -467,6 +476,13 @@
467
476
  "default": false,
468
477
  "required": false
469
478
  },
479
+ {
480
+ "name": "add_redcarpet",
481
+ "description": "",
482
+ "type": "boolean",
483
+ "default": false,
484
+ "required": false
485
+ },
470
486
  {
471
487
  "name": "add_twilio_ruby",
472
488
  "description": "",
@@ -7,7 +7,7 @@
7
7
  "quiet": false,
8
8
  "skip": false,
9
9
  "ruby": "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby",
10
- "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/bcrypt_ruby/_.rb",
10
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/administrate/_.rb",
11
11
  "database": "sqlite3",
12
12
  "skip_git": true,
13
13
  "skip_keeps": false,
@@ -42,14 +42,15 @@
42
42
  "test": "rspec",
43
43
  "add_devise": false,
44
44
  "add_dotenv": false,
45
- "add_rubocop": false,
46
- "add_annotate": false,
45
+ "add_rubocop": true,
46
+ "add_annotate": true,
47
47
  "add_lograge": false,
48
48
  "add_acts_as_list": false,
49
+ "add_administrate": true,
49
50
  "add_browser": false,
50
- "add_bcrypt_ruby": true,
51
+ "add_bcrypt_ruby": false,
51
52
  "add_chartkick": false,
52
- "add_faker": false,
53
+ "add_faker": true,
53
54
  "add_groupdate": false,
54
55
  "add_hexapdf": false,
55
56
  "add_httparty": false,
@@ -58,6 +59,7 @@
58
59
  "add_phony_rails": false,
59
60
  "add_public_suffix": false,
60
61
  "add_rails_html_sanitizer": false,
62
+ "add_redcarpet": false,
61
63
  "add_twilio_ruby": false
62
64
  }
63
65
  }
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add Administrate to rails application
7
+ class Administrate < RailsAppGenerator::Addon
8
+ required_gem gem.version('administrate', '0.17.0', 'Administrate is inspired by Rails Admin and ActiveAdmin, but aims to provide a better developer/user experience.')
9
+
10
+ def apply
11
+ say 'Setting up Administrate'
12
+ # template('administrate_template.rb', 'target/administrate.rb', force: true)
13
+ # template('app/javascript/stylesheets/components.scss')
14
+ # create_file('target/administrate.rb', 'put your content here')
15
+ # directory 'app/template', 'app/target', force: true
16
+ # empty_directory 'app/target'
17
+ # inject_into_file('app/application.js', "some content")
18
+ # rails_command('tailwindcss:install')
19
+ end
20
+
21
+ def before_bundle
22
+ say 'Setting up Administrate - before bundle install'
23
+ end
24
+
25
+ def after_bundle
26
+ say 'Setting up Administrate - after bundle install'
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add RedCarpet to rails application
7
+ class Redcarpet < RailsAppGenerator::Addon
8
+ required_gem gem.version('redcarpet', '3.5.1', 'A fast, safe and extensible Markdown to (X)HTML parser')
9
+
10
+ def apply; end
11
+ end
12
+ end
13
+ end
@@ -107,6 +107,7 @@ KConfig.configure do |config|
107
107
 
108
108
  # NEW GEM ADDONS
109
109
  rag.add_option :add_acts_as_list , type: :boolean, default: false
110
+ rag.add_option :add_administrate , type: :boolean, default: false
110
111
  rag.add_option :add_browser , type: :boolean, default: false
111
112
  rag.add_option :add_bcrypt_ruby , type: :boolean, default: false
112
113
  rag.add_option :add_chartkick , type: :boolean, default: false
@@ -119,6 +120,7 @@ KConfig.configure do |config|
119
120
  rag.add_option :add_phony_rails , type: :boolean, default: false
120
121
  rag.add_option :add_public_suffix , type: :boolean, default: false
121
122
  rag.add_option :add_rails_html_sanitizer , type: :boolean, default: false
123
+ rag.add_option :add_redcarpet , type: :boolean, default: false
122
124
  rag.add_option :add_twilio_ruby , type: :boolean, default: false
123
125
  end
124
126
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.2.8'
4
+ VERSION = '0.2.11'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.8",
3
+ "version": "0.2.11",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "rails_app_generator",
9
- "version": "0.2.8",
9
+ "version": "0.2.11",
10
10
  "dependencies": {
11
11
  "daisyui": "^2.20.0"
12
12
  },
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.8",
3
+ "version": "0.2.11",
4
4
  "description": "Create new Rails Application with custom opinions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
@@ -0,0 +1,15 @@
1
+ {
2
+ "args": {
3
+ "app_path": "administrate",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/administrate/_.rb",
10
+ "add_annotate": true,
11
+ "add_administrate": true,
12
+ "add_faker": true,
13
+ "add_rubocop": true
14
+ }
15
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "args": {
3
+ "app_path": "redcarpet",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/redcarpet/_.rb",
10
+ "add_redcarpet": true
11
+ }
12
+ }
data/tasks/profile.thor CHANGED
@@ -44,7 +44,6 @@ class Profile < Thor
44
44
  template('profile/app/controllers/home_controller.rb' , after_template_path('app/controllers/home_controller.rb') , force: options[:force])
45
45
  template('profile/app/views/home/index.html.erb' , after_template_path('app/views/home/index.html.erb') , force: options[:force])
46
46
 
47
- copy_file('profile/app/views/layouts/_alerts.html.erb' , after_template_path('app/views/layouts/_alerts.html.erb') , force: options[:force])
48
47
  copy_file('profile/app/views/layouts/_navbar.html.erb' , after_template_path('app/views/layouts/_navbar.html.erb') , force: options[:force])
49
48
  copy_file('profile/app/views/layouts/_footer.html.erb' , after_template_path('app/views/layouts/_footer.html.erb') , force: options[:force])
50
49
  copy_file('profile/app/views/layouts/application.html.erb' , after_template_path('app/views/layouts/application.html.erb') , force: options[:force])
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # lib/rails_app_generator/rag_initializer.rb
4
- # rag.add_option :add_<%= data.name_snake %> , type: :boolean, default: false
4
+ # rag.add_option :add_<%= data.name_snake %> , type: :boolean, default: false
5
5
 
6
6
  module RailsAppGenerator
7
7
  # Custom add-ons for RailsAppGenerator
@@ -1,7 +1,4 @@
1
1
  class HomeController < ApplicationController
2
2
  def index
3
3
  end
4
-
5
- def some_action
6
- end
7
4
  end
@@ -1,11 +1,3 @@
1
- <style>
2
- .alert { color: red; }
3
- .notice { color: green; }
4
- </style>
5
-
6
- <%% flash.each do |type, msg| %><div class="<%%= type %>"><%%= msg %></div><%% end %>
7
- <%% if flash.any? %><hr /><%% end %>
8
-
9
1
  <h1><%= data.name_human %></h1>
10
2
 
11
3
  <h2><%= data.description %></h2>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_app_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-11 00:00:00.000000000 Z
11
+ date: 2022-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bootsnap
@@ -189,6 +189,18 @@ files:
189
189
  - after_templates/addons/acts_as_list/app/views/todo_items/index.html.erb
190
190
  - after_templates/addons/acts_as_list/config/routes.rb
191
191
  - after_templates/addons/acts_as_list/db/seeds.rb
192
+ - after_templates/addons/administrate/_.rb
193
+ - after_templates/addons/administrate/app/controllers/home_controller.rb
194
+ - after_templates/addons/administrate/app/dashboards/author_dashboard.rb
195
+ - after_templates/addons/administrate/app/dashboards/post_dashboard.rb
196
+ - after_templates/addons/administrate/app/dashboards/product_dashboard.rb
197
+ - after_templates/addons/administrate/app/models/author.rb
198
+ - after_templates/addons/administrate/app/models/post.rb
199
+ - after_templates/addons/administrate/app/views/home/index.html.erb
200
+ - after_templates/addons/administrate/app/views/layouts/_footer.html.erb
201
+ - after_templates/addons/administrate/app/views/layouts/_navbar.html.erb
202
+ - after_templates/addons/administrate/app/views/layouts/application.html.erb
203
+ - after_templates/addons/administrate/db/seeds.rb
192
204
  - after_templates/addons/bcrypt_ruby/_.rb
193
205
  - after_templates/addons/bcrypt_ruby/app/controllers/home_controller.rb
194
206
  - after_templates/addons/bcrypt_ruby/app/models/user.rb
@@ -271,6 +283,12 @@ files:
271
283
  - after_templates/addons/public_suffix/app/views/layouts/application.html.erb
272
284
  - after_templates/addons/rails_html_sanitizer/_.rb
273
285
  - after_templates/addons/rails_html_sanitizer/home/index.html.erb
286
+ - after_templates/addons/redcarpet/_.rb
287
+ - after_templates/addons/redcarpet/app/controllers/home_controller.rb
288
+ - after_templates/addons/redcarpet/app/views/home/index.html.erb
289
+ - after_templates/addons/redcarpet/app/views/layouts/_footer.html.erb
290
+ - after_templates/addons/redcarpet/app/views/layouts/_navbar.html.erb
291
+ - after_templates/addons/redcarpet/app/views/layouts/application.html.erb
274
292
  - after_templates/addons/rubocop/_.rb
275
293
  - after_templates/addons/rubocop/app/assets/images/cop-output.png
276
294
  - after_templates/addons/rubocop/app/controllers/home_controller.rb
@@ -480,6 +498,7 @@ files:
480
498
  - lib/rails_app_generator/addon.rb
481
499
  - lib/rails_app_generator/addon_util.rb
482
500
  - lib/rails_app_generator/addons/acts_as_list.rb
501
+ - lib/rails_app_generator/addons/administrate.rb
483
502
  - lib/rails_app_generator/addons/annotate.rb
484
503
  - lib/rails_app_generator/addons/bcrypt_ruby.rb
485
504
  - lib/rails_app_generator/addons/browser.rb
@@ -506,6 +525,7 @@ files:
506
525
  - lib/rails_app_generator/addons/public_suffix.rb
507
526
  - lib/rails_app_generator/addons/pundit.rb
508
527
  - lib/rails_app_generator/addons/rails_html_sanitizer.rb
528
+ - lib/rails_app_generator/addons/redcarpet.rb
509
529
  - lib/rails_app_generator/addons/rspec.rb
510
530
  - lib/rails_app_generator/addons/rubocop.rb
511
531
  - lib/rails_app_generator/addons/scaffold.rb
@@ -551,6 +571,7 @@ files:
551
571
  - package-lock.json
552
572
  - package.json
553
573
  - profiles/addons/acts_as_list.json
574
+ - profiles/addons/administrate.json
554
575
  - profiles/addons/bcrypt_ruby.json
555
576
  - profiles/addons/browser.json
556
577
  - profiles/addons/chartkick.json
@@ -564,6 +585,7 @@ files:
564
585
  - profiles/addons/phony_rails.json
565
586
  - profiles/addons/public_suffix.json
566
587
  - profiles/addons/rails-html-sanitizer.json
588
+ - profiles/addons/redcarpet.json
567
589
  - profiles/addons/rubocop.json
568
590
  - profiles/addons/twilio_ruby.json
569
591
  - profiles/application/printspeak.json