simple_discussion 0.9.4 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +12 -0
  3. data/.github/workflows/ci.yml +44 -0
  4. data/Appraisals +16 -0
  5. data/CHANGELOG.md +13 -0
  6. data/Gemfile +8 -1
  7. data/README.md +5 -3
  8. data/Rakefile +25 -3
  9. data/app/assets/stylesheets/simple_discussion.scss +40 -2
  10. data/app/controllers/simple_discussion/application_controller.rb +15 -3
  11. data/app/controllers/simple_discussion/forum_categories_controller.rb +5 -5
  12. data/app/controllers/simple_discussion/forum_posts_controller.rb +20 -14
  13. data/app/controllers/simple_discussion/forum_threads_controller.rb +10 -10
  14. data/app/controllers/simple_discussion/notifications_controller.rb +3 -3
  15. data/app/helpers/simple_discussion/forum_posts_helper.rb +7 -1
  16. data/app/helpers/simple_discussion/forum_threads_helper.rb +4 -4
  17. data/app/jobs/simple_discussion/forum_post_notification_job.rb +3 -3
  18. data/app/jobs/simple_discussion/forum_thread_notification_job.rb +2 -2
  19. data/app/mailers/simple_discussion/user_mailer.rb +4 -4
  20. data/app/models/forum_category.rb +1 -1
  21. data/app/models/forum_post.rb +1 -2
  22. data/app/models/forum_subscription.rb +4 -4
  23. data/app/models/forum_thread.rb +12 -12
  24. data/app/views/layouts/simple_discussion.html.erb +61 -18
  25. data/app/views/simple_discussion/forum_posts/_form.html.erb +2 -2
  26. data/app/views/simple_discussion/forum_posts/_forum_post.html.erb +16 -9
  27. data/app/views/simple_discussion/forum_posts/edit.html.erb +7 -3
  28. data/app/views/simple_discussion/forum_threads/_form.html.erb +8 -8
  29. data/app/views/simple_discussion/forum_threads/_forum_thread.html.erb +5 -5
  30. data/app/views/simple_discussion/forum_threads/edit.html.erb +1 -1
  31. data/app/views/simple_discussion/forum_threads/index.html.erb +11 -9
  32. data/app/views/simple_discussion/forum_threads/new.html.erb +1 -1
  33. data/app/views/simple_discussion/forum_threads/show.html.erb +15 -10
  34. data/bin/rails +14 -0
  35. data/config/locales/en.yml +46 -0
  36. data/config/locales/es.yml +41 -0
  37. data/config/locales/fr.yml +47 -0
  38. data/db/migrate/20170417012930_create_forum_categories.rb +6 -6
  39. data/db/migrate/20170417012931_create_forum_threads.rb +1 -1
  40. data/db/migrate/20170417012932_create_forum_posts.rb +3 -3
  41. data/db/migrate/20170417012933_create_forum_subscriptions.rb +2 -2
  42. data/gemfiles/.bundle/config +2 -0
  43. data/gemfiles/rails_5_2.gemfile +12 -0
  44. data/gemfiles/rails_5_2.gemfile.lock +191 -0
  45. data/gemfiles/rails_6.gemfile +12 -0
  46. data/gemfiles/rails_6.gemfile.lock +207 -0
  47. data/gemfiles/rails_6_1.gemfile +12 -0
  48. data/gemfiles/rails_6_1.gemfile.lock +210 -0
  49. data/gemfiles/rails_master.gemfile +12 -0
  50. data/gemfiles/rails_master.gemfile.lock +222 -0
  51. data/lib/generators/simple_discussion/controllers_generator.rb +2 -2
  52. data/lib/generators/simple_discussion/helpers_generator.rb +2 -2
  53. data/lib/generators/simple_discussion/views_generator.rb +2 -2
  54. data/lib/simple_discussion.rb +8 -9
  55. data/lib/simple_discussion/engine.rb +1 -1
  56. data/lib/simple_discussion/slack.rb +6 -6
  57. data/lib/simple_discussion/version.rb +1 -1
  58. data/lib/simple_discussion/will_paginate.rb +12 -12
  59. data/simple_discussion.gemspec +15 -17
  60. metadata +27 -25
@@ -1,11 +1,13 @@
1
- <div class="card card-block mb-3">
2
- <%= render partial: "simple_discussion/forum_threads/forum_thread", collection: @forum_threads, spacer_template: "shared/spacer" %>
1
+ <% if @forum_threads.none? %>
3
2
 
4
- <% if @forum_threads.none? %>
5
- <div>No results found for your search. Check out <%= link_to "the latest questions", simple_discussion.forum_threads_path %> instead?</div>
6
- <% end %>
7
- </div>
3
+ <div><%= t('search_not_found') %>. <%= t('check_out') %> <%= link_to t('latest_questions'), simple_discussion.forum_threads_path %> <%= t('instead') %> </div>
8
4
 
9
- <div class="forum-threads-nav text-center">
10
- <%= will_paginate @forum_threads, url_builder: simple_discussion, renderer: SimpleDiscussion::BootstrapLinkRenderer %>
11
- </div>
5
+ <% else %>
6
+
7
+ <%= render partial: "simple_discussion/forum_threads/forum_thread", collection: @forum_threads, spacer_template: "shared/spacer" %>
8
+
9
+ <div class="forum-threads-nav text-center">
10
+ <%= will_paginate @forum_threads, url_builder: simple_discussion, renderer: SimpleDiscussion::BootstrapLinkRenderer %>
11
+ </div>
12
+
13
+ <% end %>
@@ -1,4 +1,4 @@
1
- <h1>Start A Discussion</h1>
1
+ <h1><%= t('start_a_discussion') %></h1>
2
2
 
3
3
  <div class="forum_post">
4
4
  <%= render 'form' %>
@@ -1,17 +1,22 @@
1
- <h1><%= icon "thumb-tack", class: "text-muted" if @forum_thread.pinned? %> <%= @forum_thread.title %></h1>
2
-
3
- <% if is_moderator_or_owner?(@forum_thread) %>
4
- <div class="pull-right">
5
- <%= link_to icon("pencil"), simple_discussion.edit_forum_thread_path(@forum_thread),
6
- class: "text-muted",
7
- data: { toggle: "tooltip", placement: "left" },
8
- title: "Edit this thread" %>
1
+ <div class="row">
2
+ <div class="col-md-11">
3
+ <h1><%= icon "fas", "thumb-tack", class: "text-muted" if @forum_thread.pinned? %> <%= @forum_thread.title %></h1>
9
4
  </div>
10
- <% end %>
5
+
6
+ <% if is_moderator_or_owner?(@forum_thread) %>
7
+ <div class="col-md-1">
8
+ <%= link_to icon("fas","pencil"), simple_discussion.edit_forum_thread_path(@forum_thread),
9
+ class: "text-muted",
10
+ data: { toggle: "tooltip", placement: "left" },
11
+ title: t('edit_this_thread') %>
12
+ </div>
13
+ <% end %>
14
+
15
+ </div>
11
16
 
12
17
  <p class="thread-details">
13
18
  <strong><%= category_link(@forum_thread.forum_category) %></strong>
14
- Asked <%= time_ago_in_words @forum_thread.created_at %> by <%= @forum_thread.user.name %>
19
+ • <%= t('asked_time_ago', time: time_ago_in_words(@forum_thread.created_at), author: @forum_thread.user.name) %>
15
20
  </p>
16
21
 
17
22
  <%= render partial: "simple_discussion/forum_posts/forum_post", collection: @forum_thread.forum_posts.includes(:user).sorted %>
data/bin/rails ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails gems
3
+ # installed from the root of your application.
4
+
5
+ ENGINE_ROOT = File.expand_path('..', __dir__)
6
+ ENGINE_PATH = File.expand_path('../lib/pay/engine', __dir__)
7
+ APP_PATH = File.expand_path('../test/dummy/config/application', __dir__)
8
+
9
+ # Set up gems listed in the Gemfile.
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
11
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
12
+
13
+ require 'rails/all'
14
+ require 'rails/engine/commands'
@@ -0,0 +1,46 @@
1
+ en:
2
+ start_a_discussion: Start A Discussion
3
+ add_a_comment: Add A Comment
4
+ ask_a_question: Ask A Question
5
+ asked_time_ago: "Asked %{time} ago by %{author}"
6
+ choose_a_category: Choose a Category
7
+ comment: Comment
8
+ commented_on: Commented on
9
+ community: Community
10
+ edit_this_post: Edit this post
11
+ delete_this_post: Delete this post
12
+ edit_this_thread: Edit this thread
13
+ edit_thread: Edit thread
14
+ filters: Filters
15
+ how_do_i: How do I...?
16
+ ignoring_thread: You're ignoring this thread.
17
+ not_receiving_notifications: You’re not receiving notifications from this thread.
18
+ layouts:
19
+ simple_discussion:
20
+ all_threads: All Threads
21
+ answered: Answered
22
+ by_category: By Category
23
+ my_questions: My Questions
24
+ notifications: Notifications
25
+ participating: Participating
26
+ suscribe: Subscribe
27
+ unsubscribe: Unsubscribe
28
+ unanswered: Unanswered
29
+ pick_a_category: Pick a category...
30
+ post:
31
+ one: post
32
+ other: posts
33
+ receiving_notifications_because_subscribed: You're receiving notifications because you've subscribed to this thread.
34
+ receiving_notifications_because_posted: You're receiving notifications because you've posted in this thread.
35
+ saving_comment: Saving comment...
36
+ saving: Saving
37
+ this_solved_my_question: This solved my question
38
+ title: title
39
+ what_help_needed: What do you need help with?
40
+ ask_your_question: Ask Your Question
41
+ update_comment: Update comment
42
+ your_changes_were_saved: Your changes were saved
43
+ search_not_found: No results found for your search
44
+ check_out: Check out
45
+ latest_questions: the latest questions
46
+ instead: instead?
@@ -0,0 +1,41 @@
1
+ es:
2
+ start_a_discussion: Iniciar una discusión
3
+ add_a_comment: Añade un comentario
4
+ ask_a_question: HAZ UNA PREGUNTA
5
+ asked_time_ago: "Preguntado hace %{time} por %{author}"
6
+ choose_a_category: Selecciona una categoría
7
+ comment: comenta
8
+ commented_on: Comentado en
9
+ community: Comunidad
10
+ edit_this_post: Edita esta publicación
11
+ edit_this_thread: Edita este tema
12
+ edit_thread: Edita el tema
13
+ filters: Filtros
14
+ how_do_i: Cómo puedo...?
15
+ ignoring_thread: "Estás ignorando este tema"
16
+ not_receiving_notifications: "No estás recibiendo notificaciones de este tema."
17
+ layouts:
18
+ simple_discussion:
19
+ all_threads: Todos Los Temas
20
+ answered: Respondidas
21
+ by_category: Por Categoría
22
+ my_questions: Mis Preguntas
23
+ notifications: Notificaciones
24
+ participating: Participando
25
+ suscribe: Suscribirse
26
+ unsubscribe: Desuscribirse
27
+ unanswered: Sin Responder
28
+ pick_a_category: Elige una categoría...
29
+ post:
30
+ one: publicación
31
+ other: publicaciones
32
+ receiving_notifications_because_subscribed: Estás recibiendo notificaciones porque te suscribiste a este tema.
33
+ receiving_notifications_because_posted: Estás recibiendo notificaciones porque publicaste en este tema.
34
+ saving_comment: Guardando comentario...
35
+ saving: Guardando
36
+ this_solved_my_question: Esto resolvió mi pregunta
37
+ title: Título
38
+ what_help_needed: Con qué necesitas ayuda?
39
+ ask_your_question: Haz tu pregunta
40
+ update_comment: Actualiza tu comentario
41
+ your_changes_were_saved: Tus cambios fueron guardados
@@ -0,0 +1,47 @@
1
+ fr:
2
+ start_a_discussion: Débuter une conversation
3
+ add_a_comment: Ajouter un Commentaire
4
+ ask_a_question: Poser une question
5
+ asked_time_ago: "Demandé il y a %{time} par %{author}"
6
+ choose_a_category: Choisir une catégorie
7
+ comment: commenter
8
+ commented_on: Commenté le
9
+ community: Communauté
10
+ edit_this_post: Modifier ce message
11
+ edit_this_thread: Modifier ce fil
12
+ edit_thread: Modifier le fil
13
+ filters: Les filtres
14
+ how_do_i: Comment puis-je ...?
15
+ ignoring_thread: Vous avez ignoré ce fil.
16
+ not_receiving_notifications: Vous ne recevez plus les notifications de ce fil.
17
+ layouts:
18
+ simple_discussion:
19
+ all_threads: Toutes les discussions
20
+ answered: Résolues
21
+ by_category: Par catégorie
22
+ my_questions: Mes Questions
23
+ notifications: Les notifications
24
+ participating: Participant
25
+ suscribe: S'abonner
26
+ unsubscribe: Désabonner
27
+ unanswered: Non Résolues
28
+ pick_a_category: Choisissez une catégorie ...
29
+ post:
30
+ one: message
31
+ other: messages
32
+ receiving_notifications_because_subscribed: Vous recevez les notifications parce que vous êtes abonné à ce fil.
33
+ receiving_notifications_because_posted: Vous recevez les notifications parce que vous avez posté dans ce fil.
34
+ saving_comment: Envois du commentaire ...
35
+ saving: Enregistrer
36
+ this_solved_my_question: Résolu?
37
+ title: titre
38
+ what_help_needed: Quel problème voulez-vous résoudre ?
39
+ ask_your_question: 'Poser votre question'
40
+ update_comment: Mettre à jour le commentaire
41
+ your_changes_were_saved: Vos modifications ont été enregistrées
42
+ solved: Résolu
43
+ undo: annuler
44
+ search_not_found: Aucun résultat trouvé pour votre recherche
45
+ check_out: Voir
46
+ latest_questions: les dernières questions
47
+ instead: à la place
@@ -1,9 +1,9 @@
1
1
  class CreateForumCategories < ActiveRecord::Migration[4.2]
2
2
  def change
3
- create_table :forum_categories, force: :cascade do |t|
4
- t.string :name, null: false
5
- t.string :slug, null: false
6
- t.string :color, default: "000000"
3
+ create_table :forum_categories do |t|
4
+ t.string :name, null: false
5
+ t.string :slug, null: false
6
+ t.string :color, default: "000000"
7
7
 
8
8
  t.timestamps
9
9
  end
@@ -12,12 +12,12 @@ class CreateForumCategories < ActiveRecord::Migration[4.2]
12
12
 
13
13
  ForumCategory.create(
14
14
  name: "General",
15
- color: "#4ea1d3",
15
+ color: "#4ea1d3"
16
16
  )
17
17
 
18
18
  ForumCategory.create(
19
19
  name: "Feedback",
20
- color: "#16bc9c",
20
+ color: "#16bc9c"
21
21
  )
22
22
  end
23
23
  end
@@ -1,6 +1,6 @@
1
1
  class CreateForumThreads < ActiveRecord::Migration[4.2]
2
2
  def change
3
- create_table :forum_threads, force: :cascade do |t|
3
+ create_table :forum_threads do |t|
4
4
  t.references :forum_category, foreign_key: true
5
5
  t.references :user, foreign_key: true
6
6
  t.string :title, null: false
@@ -1,10 +1,10 @@
1
1
  class CreateForumPosts < ActiveRecord::Migration[4.2]
2
2
  def change
3
- create_table :forum_posts, force: :cascade do |t|
3
+ create_table :forum_posts do |t|
4
4
  t.references :forum_thread, foreign_key: true
5
5
  t.references :user, foreign_key: true
6
- t.text :body
7
- t.boolean :solved, default: false
6
+ t.text :body
7
+ t.boolean :solved, default: false
8
8
 
9
9
  t.timestamps
10
10
  end
@@ -1,9 +1,9 @@
1
1
  class CreateForumSubscriptions < ActiveRecord::Migration[4.2]
2
2
  def change
3
- create_table :forum_subscriptions, force: :cascade do |t|
3
+ create_table :forum_subscriptions do |t|
4
4
  t.references :forum_thread, foreign_key: true
5
5
  t.references :user, foreign_key: true
6
- t.string :subscription_type
6
+ t.string :subscription_type
7
7
 
8
8
  t.timestamps
9
9
  end
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal"
6
+ gem "standardrb"
7
+ gem "devise"
8
+ gem "puma"
9
+ gem "sqlite3"
10
+ gem "rails", "~> 5.2.0"
11
+
12
+ gemspec path: "../"
@@ -0,0 +1,191 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ simple_discussion (1.3.0)
5
+ font-awesome-sass (>= 5.13.0)
6
+ friendly_id (>= 5.2.0)
7
+ rails (>= 4.2)
8
+ will_paginate (>= 3.1.0)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ actioncable (5.2.5)
14
+ actionpack (= 5.2.5)
15
+ nio4r (~> 2.0)
16
+ websocket-driver (>= 0.6.1)
17
+ actionmailer (5.2.5)
18
+ actionpack (= 5.2.5)
19
+ actionview (= 5.2.5)
20
+ activejob (= 5.2.5)
21
+ mail (~> 2.5, >= 2.5.4)
22
+ rails-dom-testing (~> 2.0)
23
+ actionpack (5.2.5)
24
+ actionview (= 5.2.5)
25
+ activesupport (= 5.2.5)
26
+ rack (~> 2.0, >= 2.0.8)
27
+ rack-test (>= 0.6.3)
28
+ rails-dom-testing (~> 2.0)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
30
+ actionview (5.2.5)
31
+ activesupport (= 5.2.5)
32
+ builder (~> 3.1)
33
+ erubi (~> 1.4)
34
+ rails-dom-testing (~> 2.0)
35
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
36
+ activejob (5.2.5)
37
+ activesupport (= 5.2.5)
38
+ globalid (>= 0.3.6)
39
+ activemodel (5.2.5)
40
+ activesupport (= 5.2.5)
41
+ activerecord (5.2.5)
42
+ activemodel (= 5.2.5)
43
+ activesupport (= 5.2.5)
44
+ arel (>= 9.0)
45
+ activestorage (5.2.5)
46
+ actionpack (= 5.2.5)
47
+ activerecord (= 5.2.5)
48
+ marcel (~> 1.0.0)
49
+ activesupport (5.2.5)
50
+ concurrent-ruby (~> 1.0, >= 1.0.2)
51
+ i18n (>= 0.7, < 2)
52
+ minitest (~> 5.1)
53
+ tzinfo (~> 1.1)
54
+ appraisal (2.4.0)
55
+ bundler
56
+ rake
57
+ thor (>= 0.14.0)
58
+ arel (9.0.0)
59
+ ast (2.4.2)
60
+ bcrypt (3.1.16)
61
+ builder (3.2.4)
62
+ concurrent-ruby (1.1.8)
63
+ crass (1.0.6)
64
+ devise (4.7.3)
65
+ bcrypt (~> 3.0)
66
+ orm_adapter (~> 0.1)
67
+ railties (>= 4.1.0)
68
+ responders
69
+ warden (~> 1.2.3)
70
+ erubi (1.10.0)
71
+ ffi (1.15.0)
72
+ font-awesome-sass (5.15.1)
73
+ sassc (>= 1.11)
74
+ friendly_id (5.4.2)
75
+ activerecord (>= 4.0.0)
76
+ globalid (0.4.2)
77
+ activesupport (>= 4.2.0)
78
+ i18n (1.8.10)
79
+ concurrent-ruby (~> 1.0)
80
+ loofah (2.9.0)
81
+ crass (~> 1.0.2)
82
+ nokogiri (>= 1.5.9)
83
+ mail (2.7.1)
84
+ mini_mime (>= 0.1.1)
85
+ marcel (1.0.0)
86
+ method_source (1.0.0)
87
+ mini_mime (1.0.3)
88
+ minitest (5.14.4)
89
+ nio4r (2.5.7)
90
+ nokogiri (1.11.2-x86_64-darwin)
91
+ racc (~> 1.4)
92
+ nokogiri (1.11.2-x86_64-linux)
93
+ racc (~> 1.4)
94
+ orm_adapter (0.5.0)
95
+ parallel (1.20.1)
96
+ parser (3.0.0.0)
97
+ ast (~> 2.4.1)
98
+ puma (5.2.2)
99
+ nio4r (~> 2.0)
100
+ racc (1.5.2)
101
+ rack (2.2.3)
102
+ rack-test (1.1.0)
103
+ rack (>= 1.0, < 3)
104
+ rails (5.2.5)
105
+ actioncable (= 5.2.5)
106
+ actionmailer (= 5.2.5)
107
+ actionpack (= 5.2.5)
108
+ actionview (= 5.2.5)
109
+ activejob (= 5.2.5)
110
+ activemodel (= 5.2.5)
111
+ activerecord (= 5.2.5)
112
+ activestorage (= 5.2.5)
113
+ activesupport (= 5.2.5)
114
+ bundler (>= 1.3.0)
115
+ railties (= 5.2.5)
116
+ sprockets-rails (>= 2.0.0)
117
+ rails-dom-testing (2.0.3)
118
+ activesupport (>= 4.2.0)
119
+ nokogiri (>= 1.6)
120
+ rails-html-sanitizer (1.3.0)
121
+ loofah (~> 2.3)
122
+ railties (5.2.5)
123
+ actionpack (= 5.2.5)
124
+ activesupport (= 5.2.5)
125
+ method_source
126
+ rake (>= 0.8.7)
127
+ thor (>= 0.19.0, < 2.0)
128
+ rainbow (3.0.0)
129
+ rake (13.0.3)
130
+ regexp_parser (2.1.1)
131
+ responders (3.0.1)
132
+ actionpack (>= 5.0)
133
+ railties (>= 5.0)
134
+ rexml (3.2.4)
135
+ rubocop (1.11.0)
136
+ parallel (~> 1.10)
137
+ parser (>= 3.0.0.0)
138
+ rainbow (>= 2.2.2, < 4.0)
139
+ regexp_parser (>= 1.8, < 3.0)
140
+ rexml
141
+ rubocop-ast (>= 1.2.0, < 2.0)
142
+ ruby-progressbar (~> 1.7)
143
+ unicode-display_width (>= 1.4.0, < 3.0)
144
+ rubocop-ast (1.4.1)
145
+ parser (>= 2.7.1.5)
146
+ rubocop-performance (1.10.1)
147
+ rubocop (>= 0.90.0, < 2.0)
148
+ rubocop-ast (>= 0.4.0)
149
+ ruby-progressbar (1.11.0)
150
+ sassc (2.4.0)
151
+ ffi (~> 1.9)
152
+ sprockets (4.0.2)
153
+ concurrent-ruby (~> 1.0)
154
+ rack (> 1, < 3)
155
+ sprockets-rails (3.2.2)
156
+ actionpack (>= 4.0)
157
+ activesupport (>= 4.0)
158
+ sprockets (>= 3.0.0)
159
+ sqlite3 (1.4.2)
160
+ standard (1.0.4)
161
+ rubocop (= 1.11.0)
162
+ rubocop-performance (= 1.10.1)
163
+ standardrb (1.0.0)
164
+ standard
165
+ thor (1.1.0)
166
+ thread_safe (0.3.6)
167
+ tzinfo (1.2.9)
168
+ thread_safe (~> 0.1)
169
+ unicode-display_width (2.0.0)
170
+ warden (1.2.9)
171
+ rack (>= 2.0.9)
172
+ websocket-driver (0.7.3)
173
+ websocket-extensions (>= 0.1.0)
174
+ websocket-extensions (0.1.5)
175
+ will_paginate (3.3.0)
176
+
177
+ PLATFORMS
178
+ x86_64-darwin-20
179
+ x86_64-linux
180
+
181
+ DEPENDENCIES
182
+ appraisal
183
+ devise
184
+ puma
185
+ rails (~> 5.2.0)
186
+ simple_discussion!
187
+ sqlite3
188
+ standardrb
189
+
190
+ BUNDLED WITH
191
+ 2.2.15