sail 3.2.3 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -7
  3. data/Rakefile +3 -3
  4. data/app/assets/images/sail/angle-left.svg +1 -1
  5. data/app/assets/images/sail/angle-right.svg +1 -1
  6. data/app/assets/images/sail/checkmark.svg +1 -0
  7. data/app/assets/images/sail/cog.svg +1 -1
  8. data/app/assets/images/sail/error.svg +1 -0
  9. data/app/assets/images/sail/reset.svg +1 -0
  10. data/app/assets/images/sail/sort.svg +1 -1
  11. data/app/assets/javascripts/sail/{application.js.erb → application.js} +1 -10
  12. data/app/assets/javascripts/{settings.js.erb → sail/settings.js} +16 -3
  13. data/app/assets/stylesheets/sail/application.css.erb +419 -0
  14. data/app/assets/stylesheets/sail/settings.css +555 -0
  15. data/app/controllers/sail/settings_controller.rb +2 -13
  16. data/app/helpers/sail/application_helper.rb +4 -0
  17. data/app/models/sail/setting.rb +4 -8
  18. data/app/views/layouts/sail/application.html.erb +2 -6
  19. data/app/views/sail/profiles/_profile.html.erb +29 -17
  20. data/app/views/sail/settings/_guide_modal.html.erb +2 -2
  21. data/app/views/sail/settings/_setting.html.erb +80 -50
  22. data/app/views/sail/settings/index.html.erb +21 -17
  23. data/app/views/sail/settings/update.js.erb +6 -2
  24. data/config/locales/en.yml +1 -4
  25. data/lib/generators/sail/install/install_generator.rb +5 -1
  26. data/lib/generators/sail/install/templates/sail.yml.tt +5 -0
  27. data/lib/generators/sail/update/update_generator.rb +1 -1
  28. data/lib/sail.rb +3 -3
  29. data/lib/sail/constant_collection.rb +2 -2
  30. data/lib/sail/engine.rb +3 -3
  31. data/lib/sail/graphql.rb +43 -0
  32. data/lib/sail/instrumenter.rb +1 -1
  33. data/lib/sail/mutations.rb +49 -0
  34. data/lib/sail/types.rb +1 -0
  35. data/lib/sail/types/set.rb +20 -0
  36. data/lib/sail/version.rb +1 -1
  37. metadata +26 -102
  38. data/app/assets/images/sail/refresh.svg +0 -1
  39. data/app/assets/stylesheets/sail/_colors.scss +0 -9
  40. data/app/assets/stylesheets/sail/_shared.scss +0 -52
  41. data/app/assets/stylesheets/sail/application.scss +0 -351
  42. data/app/assets/stylesheets/sail/settings.scss +0 -422
  43. data/app/views/sail/settings/_setting_minimal.html.erb +0 -6
@@ -10,15 +10,12 @@ module Sail
10
10
  class SettingsController < ApplicationController
11
11
  before_action :set_locale, only: :index
12
12
  after_action :log_update, only: %i[update reset], if: -> { Sail.configuration.enable_logging && @successful_update }
13
-
14
- # rubocop:disable AbcSize
15
13
  def index
16
14
  @settings = Setting.by_query(s_params[:query]).ordered_by(s_params[:order_field])
17
- @number_of_pages = (@settings.count.to_f / settings_per_page).ceil
18
- @settings = @settings.paginated(s_params[:page], settings_per_page)
15
+ @number_of_pages = (@settings.count.to_f / Sail::ConstantCollection::SETTINGS_PER_PAGE).ceil
16
+ @settings = @settings.paginated(s_params[:page], Sail::ConstantCollection::SETTINGS_PER_PAGE)
19
17
  fresh_when(@settings)
20
18
  end
21
- # rubocop:enable AbcSize
22
19
 
23
20
  def update
24
21
  respond_to do |format|
@@ -65,14 +62,6 @@ module Sail
65
62
 
66
63
  private
67
64
 
68
- def settings_per_page
69
- if params[:monitor_mode] == Sail::ConstantCollection::TRUE
70
- Sail::ConstantCollection::MINIMAL_SETTINGS_PER_PAGE
71
- else
72
- Sail::ConstantCollection::SETTINGS_PER_PAGE
73
- end
74
- end
75
-
76
65
  def s_params
77
66
  params.permit(:page, :query, :name,
78
67
  :value, :positive, :negative,
@@ -9,5 +9,9 @@ module Sail
9
9
  def formatted_date(setting)
10
10
  DateTime.parse(setting.value).utc.strftime(Sail::ConstantCollection::INPUT_DATE_FORMAT)
11
11
  end
12
+
13
+ def settings_container_class(number_of_pages)
14
+ number_of_pages.zero? ? "empty" : ""
15
+ end
12
16
  end
13
17
  end
@@ -11,7 +11,7 @@ module Sail
11
11
  class UnexpectedCastType < StandardError; end
12
12
 
13
13
  FULL_RANGE = (0...100).freeze
14
- AVAILABLE_MODELS = Dir[Rails.root.join("app", "models", "*.rb")]
14
+ AVAILABLE_MODELS = Dir[Rails.root.join("app/models/*.rb")]
15
15
  .map { |dir| dir.split("/").last.camelize.gsub(".rb", "") }.freeze
16
16
 
17
17
  has_many :entries, dependent: :destroy
@@ -21,7 +21,7 @@ module Sail
21
21
  validates :name, presence: true, uniqueness: { case_sensitive: false }
22
22
  enum cast_type: %i[integer string boolean range array float
23
23
  ab_test cron obj_model date uri throttle
24
- locales].freeze
24
+ locales set].freeze
25
25
 
26
26
  validate :value_is_within_range, if: -> { range? }
27
27
  validate :value_is_true_or_false, if: -> { boolean? || ab_test? }
@@ -32,11 +32,7 @@ module Sail
32
32
 
33
33
  after_initialize :instantiate_caster
34
34
 
35
- scope :paginated, lambda { |page, per_page|
36
- select(:name, :description, :group, :value, :cast_type, :updated_at)
37
- .offset(page.to_i * per_page)
38
- .limit(per_page)
39
- }
35
+ scope :paginated, ->(page, per_page) { offset(page.to_i * per_page).limit(per_page) }
40
36
 
41
37
  scope :by_query, lambda { |query|
42
38
  if cast_types.key?(query) || query == Sail::ConstantCollection::STALE
@@ -44,7 +40,7 @@ module Sail
44
40
  elsif select(:id).by_group(query).exists?
45
41
  by_group(query)
46
42
  elsif query.to_s.include?(Sail::ConstantCollection::RECENT)
47
- recently_updated(query.delete("recent ").strip)
43
+ recently_updated(query.delete("recent ").strip.to_i)
48
44
  else
49
45
  by_name(query)
50
46
  end
@@ -21,16 +21,12 @@
21
21
  <button id="btn-guide" type="button" class="nav-button">
22
22
  <%= I18n.t("sail.guide") %>
23
23
  </button>
24
-
25
- <% if params[:monitor_mode] == Sail::ConstantCollection::TRUE %>
26
- <%= link_to(I18n.t("sail.regular_mode"), settings_path, method: :get, class: "nav-button", id: "btn-regular-mode") %>
27
- <% else %>
28
- <%= link_to(I18n.t("sail.monitor_mode"), settings_path(monitor_mode: "true"), method: :get, class: "nav-button", id: "btn-monitor-mode") %>
29
- <% end %>
30
24
  </nav>
31
25
 
32
26
  <div class="clearfix"></div>
33
27
  <%= yield %>
28
+
29
+ <%= hidden_field_tag(:auto_search_enabled, Sail.configuration.enable_search_auto_submit) %>
34
30
  </div>
35
31
  </body>
36
32
  </html>
@@ -1,31 +1,43 @@
1
- <div id="<%= profile.name %>" class="profile-entry">
2
- <% if profile.active? %>
1
+ <div id="<%= profile.name %>" class="profile-entry flex-container space-between">
2
+ <div>
3
+ <% if profile.active? %>
3
4
  <span class="active-indicator <%= profile.dirty? ? "yellow" : "green" %>"
4
5
  title="<%= profile.dirty? ? I18n.t("sail.dirty_profile_tooltip") : I18n.t("sail.clean_profile_tooltip") %>">
5
6
 
6
7
  </span>
7
8
 
8
- <% unless Sail.instrumenter.profile(profile.name).zero? %>
9
+ <% unless Sail.instrumenter.profile(profile.name).zero? %>
9
10
  <span class="errors-indicator" title="<%= I18n.t("sail.profile_error_tooltip") %>">
10
11
  <%= I18n.t("sail.profile_errors", count: Sail.instrumenter.profile(profile.name)) %>
11
12
  </span>
13
+ <% end %>
12
14
  <% end %>
13
- <% end %>
15
+ </div>
14
16
 
15
- <span class="entry-name"><%= profile.name.titleize %></span>
17
+ <div>
18
+ <span class="entry-name"><%= profile.name.titleize %></span>
19
+ </div>
16
20
 
17
- <%= form_tag(profile_path(name: profile.name), method: :delete, remote: true, class: "inline-form") do %>
18
- <button class="btn-sail"><%= I18n.t("sail.delete") %></button>
19
- <% end %>
21
+ <div>
22
+ <div class="flex-container space-between buttons">
23
+ <div>
24
+ <%= form_tag(profile_path(name: profile.name), method: :delete, remote: true) do %>
25
+ <button class="btn-sail"><%= I18n.t("sail.delete") %></button>
26
+ <% end %>
27
+ </div>
20
28
 
21
- <%= form_tag(switch_profile_path(name: profile.name), method: :put, remote: true, class: "inline-form") do %>
22
- <button class="btn-sail" type="submit"><%= I18n.t("sail.activate") %></button>
23
- <% end %>
29
+ <div>
30
+ <%= form_tag(switch_profile_path(name: profile.name), method: :put, remote: true) do %>
31
+ <button class="btn-sail" type="submit"><%= I18n.t("sail.activate") %></button>
32
+ <% end %>
33
+ </div>
24
34
 
25
- <%= form_tag(profiles_path, method: :post, remote: true, class: "inline-form") do %>
26
- <input type="hidden" name="name" value="<%= profile.name %>">
27
- <button class="btn-sail" type="submit"><%= I18n.t("sail.save") %></button>
28
- <% end %>
29
-
30
- <div class="clearfix"></div>
35
+ <div>
36
+ <%= form_tag(profiles_path, method: :post, remote: true) do %>
37
+ <input type="hidden" name="name" value="<%= profile.name %>">
38
+ <button class="btn-sail" type="submit"><%= I18n.t("sail.save") %></button>
39
+ <% end %>
40
+ </div>
41
+ </div>
42
+ </div>
31
43
  </div>
@@ -12,7 +12,6 @@
12
12
  </div>
13
13
  </summary>
14
14
 
15
- <p>
16
15
  <div class="items-container">
17
16
  <ul>
18
17
  <li><%= I18n.t("sail.by_setting_name_html").html_safe %></li>
@@ -21,8 +20,9 @@
21
20
  <li><%= I18n.t("sail.by_stale_html").html_safe %></li>
22
21
  <li><%= I18n.t("sail.by_recent_html").html_safe %></li>
23
22
  </ul>
23
+
24
+ <p><%= I18n.translate("sail.click_title") %></p>
24
25
  </div>
25
- </p>
26
26
  </details>
27
27
  <div class="clearfix"></div>
28
28
 
@@ -1,60 +1,90 @@
1
1
  <% cache setting, expires_in: Sail.configuration.cache_life_span do %>
2
2
  <div class="card">
3
- <h3 class="title">
4
- <%= setting.display_name %>
5
-
6
- <span class="relevancy-score" title="<%= I18n.t("sail.relevancy_tooltip") %>"><%= setting.relevancy %></span>
7
- <div class="clearfix"></div>
8
- </h3>
9
- <hr/>
10
-
11
- <%= form_tag(reset_setting_path(name: setting.name), method: :put, remote: true) do %>
12
- <button class="refresh-button" title="<%= I18n.t("sail.refresh_tooltip") %>">
13
- <%= image_tag("sail/refresh.svg", alt: I18n.t("sail.refresh_tooltip")) %>
14
- </button>
15
- <% end %>
16
-
17
- <div class="label-container">
18
- <%= link_to(setting.cast_type, settings_path(query: setting.cast_type), method: :get, class: "tag type-label") %>
19
- </div>
3
+ <div class="front">
4
+ <h3 class="title card-title"><%= setting.display_name %></h3>
5
+ <hr/>
20
6
 
21
- <% if setting.group.present? %>
22
- <div class="label-container">
23
- <%= link_to(setting.group, settings_path(query: setting.group), method: :get, class: "tag group-label") %>
24
- </div>
25
- <% end %>
7
+ <div class="flex-container-vertical">
8
+ <div>
9
+ <div class="flex-container space-between">
10
+ <div>
11
+ <%= form_tag(reset_setting_path(name: setting.name), method: :put, remote: true) do %>
12
+ <button class="refresh-button" title="<%= I18n.t("sail.refresh_tooltip") %>">
13
+ <%= image_tag("sail/reset.svg", alt: I18n.t("sail.refresh_tooltip")) %>
14
+ </button>
15
+ <% end %>
16
+ </div>
26
17
 
27
- <div class="clear-xs"></div>
18
+ <div>
19
+ <span class="relevancy-score" title="<%= I18n.t("sail.relevancy_tooltip") %>"><%= setting.relevancy %></span>
20
+ </div>
21
+ </div>
22
+ </div>
28
23
 
29
- <% if setting.stale? %>
30
- <div class="label-container">
31
- <%= link_to(I18n.t("sail.stale"), settings_path(query: Sail::ConstantCollection::STALE), method: :get, class: "tag stale-label", title: I18n.t("sail.stale_tooltip", days: Sail.configuration.days_until_stale)) %>
32
- </div>
33
- <% end %>
34
-
35
- <p class="setting-description" title="<%= setting.description %>">
36
- <label for="<%= "input_for_#{setting.name}" %>"><%= setting.description %></label>
37
- </p>
38
-
39
- <%= form_tag(setting_path(name: setting.name), method: :put, remote: true) do %>
40
- <div class="card-body-container">
41
- <div class="card-body">
42
- <% if setting.boolean? || setting.ab_test? %>
43
- <label class="switch">
44
- <input id="<%= "input_for_#{setting.name}" %>" type="checkbox" name="value" <%= setting.value == "true" ? "checked" : "" %>>
45
- <span class="slider round"></span>
46
- </label>
47
- <% elsif setting.range? %>
48
- <input id="<%= "input_for_#{setting.name}" %>" type="range" min="0" max="99" value="<%= setting.value %>" name="value" class="value-slider">
49
- <% elsif setting.date? %>
50
- <input id="<%= "input_for_#{setting.name}" %>" type="datetime-local" value="<%= formatted_date(setting) %>" name="value" class="date-picker">
51
- <% else %>
52
- <input id="<%= "input_for_#{setting.name}" %>" type="text" name="value" class="value-input" value="<%= setting.value %>"/>
53
- <% end %>
24
+ <div>
25
+ <div class="flex-container justify-end padded">
26
+ <div>
27
+ <%= link_to(setting.cast_type, settings_path(query: setting.cast_type), method: :get, class: "tag type-label") %>
28
+ </div>
29
+
30
+ <% if setting.group.present? %>
31
+ <div>
32
+ <%= link_to(setting.group, settings_path(query: setting.group), method: :get, class: "tag group-label") %>
33
+ </div>
34
+ <% end %>
35
+
36
+ <% if setting.stale? %>
37
+ <div>
38
+ <%= link_to(I18n.t("sail.stale"), settings_path(query: Sail::ConstantCollection::STALE), method: :get, class: "tag stale-label", title: I18n.t("sail.stale_tooltip", days: Sail.configuration.days_until_stale)) %>
39
+ </div>
40
+ <% end %>
41
+ </div>
42
+ </div>
54
43
 
55
- <button type="submit" class="btn-value-submit"><%= I18n.t('sail.save') %></button>
44
+ <div>
45
+ <%= form_tag(setting_path(name: setting.name), method: :put, remote: true) do %>
46
+ <div class="flex-container space-between align-bottom">
47
+ <% if setting.boolean? || setting.ab_test? %>
48
+ <div>
49
+ <label class="switch">
50
+ <input id="<%= "input_for_#{setting.name}" %>" type="checkbox" name="value" <%= setting.value == "true" ? "checked" : "" %>>
51
+ <span class="slider round"></span>
52
+ </label>
53
+ </div>
54
+ <% elsif setting.range? %>
55
+ <div class="flex-grow">
56
+ <input id="<%= "input_for_#{setting.name}" %>" type="range" min="0" max="99" value="<%= setting.value %>" name="value" class="value-slider">
57
+ </div>
58
+ <% else %>
59
+ <div>
60
+ <input id="<%= "input_for_#{setting.name}" %>" type="text" name="value" class="value-input" value="<%= setting.value %>"/>
61
+ </div>
62
+ <% end %>
63
+
64
+ <div class="submit-container">
65
+ <button id="btn-submit-<%= setting.name %>" type="submit" class="btn-value-submit"><%= I18n.t("sail.save") %></button>
66
+
67
+ <span id="success-<%= setting.name %>" class="notice success">
68
+ <%= image_tag("sail/checkmark.svg") %>
69
+ </span>
70
+
71
+ <span id="alert-<%= setting.name %>" class="notice alert">
72
+ <%= image_tag("sail/error.svg") %>
73
+ </span>
74
+ </div>
75
+ </div>
76
+ <% end %>
56
77
  </div>
57
78
  </div>
58
- <% end %>
79
+ </div>
80
+
81
+ <div class="back">
82
+ <h3 class="title card-title"><%= setting.display_name %></h3>
83
+ <hr/>
84
+
85
+ <p class="setting-description" title="<%= setting.description %>">
86
+ <label for="<%= "input_for_#{setting.name}" %>"><%= setting.description %></label>
87
+ </p>
88
+ </div>
59
89
  </div>
60
90
  <% end %>
@@ -1,19 +1,10 @@
1
1
  <div id="settings-dashboard">
2
- <% cache [@settings, params[:monitor_mode]] do %>
3
- <span id="notice-success" class="notice success"><%= I18n.t("sail.updated") %></span>
4
- <span id="notice-alert" class="notice alert"><%= I18n.t("sail.failed") %></span>
2
+ <% cache @settings do %>
3
+ <%= render(partial: "search") %>
5
4
 
6
- <% unless params[:monitor_mode] == Sail::ConstantCollection::TRUE %>
7
- <%= render(partial: "search") %>
8
- <% end %>
9
-
10
- <div id="settings-container">
5
+ <div id="settings-container" class="<%= settings_container_class(@number_of_pages) %>">
11
6
  <% if @number_of_pages > 0 %>
12
- <% if params[:monitor_mode] == Sail::ConstantCollection::TRUE %>
13
- <%= render(partial: "setting_minimal", collection: @settings) %>
14
- <% else %>
15
- <%= render(partial: "setting", collection: @settings) %>
16
- <% end%>
7
+ <%= render(partial: "setting", collection: @settings) %>
17
8
  <% else %>
18
9
  <h1><%= I18n.t("sail.no_settings") %></h1>
19
10
  <% end %>
@@ -25,13 +16,26 @@
25
16
  <div class="clearfix"></div>
26
17
 
27
18
  <div class="page-links">
28
- <%= link_to("", settings_path(page: [params[:page].to_i - 1, 0].max, monitor_mode: params[:monitor_mode]), method: :get, id: "angle-left-link", title: I18n.t("sail.previous_page")) %>
19
+ <%= link_to("", settings_path(page: [params[:page].to_i - 1, 0].max, query: params[:query]), method: :get, id: "angle-left-link", title: I18n.t("sail.previous_page")) %>
20
+ <%= link_to(1, settings_path(page: 0, query: params[:query]), method: :get, class: params[:page].to_i.zero? || params[:page].blank? ? "active" : "") %>
21
+
22
+ <% if params[:page].to_i - Sail::ConstantCollection::MAX_PAGES > 1 %>
23
+ ●●●
24
+ <% end %>
25
+
26
+ <% ([params[:page].to_i - Sail::ConstantCollection::MAX_PAGES, 1].max...[@number_of_pages - 1, params[:page].to_i + Sail::ConstantCollection::MAX_PAGES].min).each do |page| %>
27
+ <%= link_to(page + 1, settings_path(page: page, query: params[:query]), method: :get, class: params[:page].to_i == page || params[:page].blank? && page.zero? ? "active" : "") %>
28
+ <% end %>
29
+
30
+ <% if params[:page].to_i + Sail::ConstantCollection::MAX_PAGES < @number_of_pages - 1 %>
31
+ ●●●
32
+ <% end %>
29
33
 
30
- <% (0...@number_of_pages).each do |page| %>
31
- <%= link_to(page + 1, settings_path(page: page, monitor_mode: params[:monitor_mode]), method: :get, class: params[:page].to_i == page || params[:page].blank? && page.zero? ? "active" : "") %>
34
+ <% if @number_of_pages > 1 %>
35
+ <%= link_to(@number_of_pages, settings_path(page: @number_of_pages - 1, query: params[:query]), method: :get, class: params[:page].to_i == @number_of_pages - 1 ? "active" : "") %>
32
36
  <% end %>
33
37
 
34
- <%= link_to("", settings_path(page: [params[:page].to_i + 1, @number_of_pages - 1].min, monitor_mode: params[:monitor_mode]), method: :get, id: "angle-right-link", title: I18n.t("sail.next_page")) %>
38
+ <%= link_to("", settings_path(page: [params[:page].to_i + 1, @number_of_pages - 1].min, query: params[:query]), method: :get, id: "angle-right-link", title: I18n.t("sail.next_page")) %>
35
39
  </div>
36
40
  </div>
37
41
  <% end %>
@@ -1,8 +1,12 @@
1
- var notice = document.getElementById("<%= @successful_update ? "notice-success" : "notice-alert" %>");
2
- notice.style.display = "block";
1
+ var notice = document.getElementById("<%= @successful_update ? "success-#{@setting.name}" : "alert-#{@setting.name}" %>");
2
+ var submit = document.getElementById("btn-submit-<%= @setting.name %>");
3
+
4
+ submit.style.display = "none";
5
+ notice.style.display = "inline-block";
3
6
 
4
7
  setTimeout(function () {
5
8
  notice.style.display = "none";
9
+ submit.style.display = "inline-block";
6
10
  }, 1500);
7
11
 
8
12
  if ("<%= @successful_update %>" === "true") {
@@ -4,8 +4,6 @@ en:
4
4
  save: SAVE
5
5
  activate: ACTIVATE
6
6
  delete: DELETE
7
- updated: Updated!
8
- failed: Failed!
9
7
  search_placeholder: Setting name, group, cast type, stale or recent x
10
8
  search_tooltip: "When searching for recently updated settings, x is the number of hours since the update (e.g.: recent 2)"
11
9
  main_app: Main app
@@ -33,6 +31,7 @@ en:
33
31
  by_cast_type_html: "<b>By cast type:</b> will find all settings with the same type (must be exact match)"
34
32
  by_stale_html: "<b>By stale:</b> will find settings that are stale (haven't been updated recently)"
35
33
  by_recent_html: "<b>By recent:</b> will find settings updated in the last X hours (e.g.: recent 50)"
34
+ click_title: Click a setting's title to view its description.
36
35
  profiles_can_be_used: Profiles can be used to configure many states of settings. They save the values of all settings in a given moment.
37
36
  profile_configuring: Configure settings as desired and create a new profile. Activate profiles to change the value of all settings at once.
38
37
  relevancy_score: Relevancy Score
@@ -40,8 +39,6 @@ en:
40
39
  available_groups_and_types: Available groups and types
41
40
  groups_are: "The groups currently used are:"
42
41
  types_are: "The cast types currently used are:"
43
- regular_mode: Regular mode
44
- monitor_mode: Monitor mode
45
42
  how_to_find_settings: How to find settings you are looking for
46
43
  how_to_profiles: How to organize your settings in profiles
47
44
  how_to_relevancy_score: What is the relevancy score and how to use it
@@ -33,8 +33,12 @@ module Sail
33
33
  migration_version: migration_version
34
34
  end
35
35
 
36
+ def create_config_file
37
+ template "sail.yml", "config/sail.yml"
38
+ end
39
+
36
40
  def migration_version
37
- "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if Rails.version.start_with?("5")
41
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
38
42
  end
39
43
  end
40
44
  end
@@ -0,0 +1,5 @@
1
+ name_of_setting:
2
+ description: Describe what the setting does
3
+ value: 'true'
4
+ cast_type: boolean
5
+ group: feature_flags
@@ -46,7 +46,7 @@ module Sail
46
46
  end
47
47
 
48
48
  def migration_version
49
- "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if Rails.version.start_with?("5")
49
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
50
50
  end
51
51
  end
52
52
  end