sail 3.2.3 → 3.5.1

Sign up to get free protection for your applications and to get access to all the features.
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