sail 3.2.4 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +48 -7
- data/Rakefile +3 -3
- data/app/assets/images/sail/angle-left.svg +1 -1
- data/app/assets/images/sail/angle-right.svg +1 -1
- data/app/assets/images/sail/checkmark.svg +1 -0
- data/app/assets/images/sail/cog.svg +1 -1
- data/app/assets/images/sail/error.svg +1 -0
- data/app/assets/images/sail/reset.svg +1 -0
- data/app/assets/images/sail/sort.svg +1 -1
- data/app/assets/javascripts/sail/{application.js.erb → application.js} +1 -10
- data/app/assets/javascripts/{settings.js.erb → sail/settings.js} +81 -13
- data/app/assets/stylesheets/sail/application.css.erb +419 -0
- data/app/assets/stylesheets/sail/settings.css +559 -0
- data/app/controllers/sail/profiles_controller.rb +1 -1
- data/app/controllers/sail/settings_controller.rb +5 -15
- data/app/helpers/sail/application_helper.rb +4 -0
- data/app/models/sail/entry.rb +1 -1
- data/app/models/sail/setting.rb +4 -8
- data/app/views/layouts/sail/application.html.erb +2 -6
- data/app/views/sail/profiles/_profile.html.erb +29 -17
- data/app/views/sail/settings/_guide_modal.html.erb +2 -2
- data/app/views/sail/settings/_setting.html.erb +74 -52
- data/app/views/sail/settings/index.html.erb +21 -14
- data/app/views/sail/settings/update.js.erb +10 -4
- data/config/locales/en.yml +1 -4
- data/lib/generators/sail/install/install_generator.rb +5 -1
- data/lib/generators/sail/install/templates/sail.yml.tt +5 -0
- data/lib/generators/sail/update/update_generator.rb +1 -1
- data/lib/sail.rb +1 -0
- data/lib/sail/constant_collection.rb +2 -2
- data/lib/sail/engine.rb +7 -6
- data/lib/sail/graphql.rb +43 -0
- data/lib/sail/instrumenter.rb +6 -1
- data/lib/sail/mutations.rb +49 -0
- data/lib/sail/version.rb +1 -1
- metadata +25 -102
- data/app/assets/images/sail/refresh.svg +0 -1
- data/app/assets/stylesheets/sail/_colors.scss +0 -9
- data/app/assets/stylesheets/sail/_shared.scss +0 -52
- data/app/assets/stylesheets/sail/application.scss +0 -353
- data/app/assets/stylesheets/sail/settings.scss +0 -422
- data/app/views/sail/settings/_setting_minimal.html.erb +0 -6
@@ -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}]"
|
41
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
data/lib/sail.rb
CHANGED
@@ -17,8 +17,8 @@ module Sail
|
|
17
17
|
STALE = "stale"
|
18
18
|
RECENT = "recent"
|
19
19
|
FIELDS_FOR_SORT = %w[name updated_at cast_type group].freeze
|
20
|
-
SETTINGS_PER_PAGE =
|
21
|
-
MINIMAL_SETTINGS_PER_PAGE = 24
|
20
|
+
SETTINGS_PER_PAGE = 20
|
22
21
|
INPUT_DATE_FORMAT = "%Y-%m-%dT%H:%m:%S"
|
22
|
+
MAX_PAGES = 5
|
23
23
|
end
|
24
24
|
end
|
data/lib/sail/engine.rb
CHANGED
@@ -5,7 +5,6 @@ module Sail
|
|
5
5
|
# Defines initializers and
|
6
6
|
# after initialize hooks
|
7
7
|
class Engine < ::Rails::Engine
|
8
|
-
require "jquery-rails" if Rails::VERSION::MAJOR < 5
|
9
8
|
require "sprockets/railtie"
|
10
9
|
isolate_namespace Sail
|
11
10
|
|
@@ -15,7 +14,6 @@ module Sail
|
|
15
14
|
|
16
15
|
config.middleware.use ActionDispatch::Flash
|
17
16
|
config.middleware.use ActionDispatch::Cookies
|
18
|
-
config.middleware.use ActionDispatch::Session::CookieStore
|
19
17
|
config.middleware.use ActionDispatch::ContentSecurityPolicy::Middleware if defined?(ActionDispatch::ContentSecurityPolicy)
|
20
18
|
config.middleware.use Rack::MethodOverride
|
21
19
|
config.middleware.use Rails::Rack::Logger
|
@@ -24,8 +22,9 @@ module Sail
|
|
24
22
|
config.middleware.use Rack::ETag
|
25
23
|
|
26
24
|
initializer "sail.assets.precompile" do |app|
|
27
|
-
app.config.assets.precompile += %w[sail/
|
28
|
-
sail/angle-right.svg sail/link.svg sail/cog.svg
|
25
|
+
app.config.assets.precompile += %w[sail/reset.svg sail/sort.svg sail/angle-left.svg
|
26
|
+
sail/angle-right.svg sail/link.svg sail/cog.svg sail/checkmark.svg
|
27
|
+
sail/error.svg sail/application.css sail/application.js]
|
29
28
|
end
|
30
29
|
|
31
30
|
initializer "sail" do
|
@@ -40,6 +39,8 @@ module Sail
|
|
40
39
|
errors = [ActiveRecord::NoDatabaseError]
|
41
40
|
errors << PG::ConnectionBad if defined?(PG)
|
42
41
|
|
42
|
+
config.middleware.use Rails.application.config.session_store || ActionDispatch::Session::CookieStore
|
43
|
+
|
43
44
|
begin
|
44
45
|
Sail::Setting.load_defaults unless Rails.env.test?
|
45
46
|
rescue *errors
|
@@ -49,9 +50,9 @@ module Sail
|
|
49
50
|
|
50
51
|
private
|
51
52
|
|
52
|
-
def to_prepare
|
53
|
+
def to_prepare(&block)
|
53
54
|
klass = defined?(ActiveSupport::Reloader) ? ActiveSupport::Reloader : ActionDispatch::Reloader
|
54
|
-
klass.to_prepare(&
|
55
|
+
klass.to_prepare(&block)
|
55
56
|
end
|
56
57
|
end
|
57
58
|
end
|
data/lib/sail/graphql.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :nocov:
|
4
|
+
module Sail
|
5
|
+
# Graphql
|
6
|
+
#
|
7
|
+
# Module to include type definitions
|
8
|
+
# for GraphQL APIs.
|
9
|
+
module Graphql
|
10
|
+
autoload :Mutations, "sail/mutations"
|
11
|
+
|
12
|
+
module Types # :nodoc:
|
13
|
+
extend ActiveSupport::Concern
|
14
|
+
|
15
|
+
included do
|
16
|
+
field :sail_get, ::GraphQL::Types::JSON, null: true do
|
17
|
+
description "Returns the value for a given setting."
|
18
|
+
argument :name, String, required: true, description: "The setting's name."
|
19
|
+
end
|
20
|
+
|
21
|
+
field :sail_switcher, ::GraphQL::Types::JSON, null: true do
|
22
|
+
description "Switches between the positive or negative setting based on the throttle."
|
23
|
+
argument :positive, String, required: true, description: "The setting's name if the throttle is bigger than the desired amount."
|
24
|
+
argument :negative, String, required: true, description: "The setting's name if the throttle is smaller than the desired amount."
|
25
|
+
argument :throttled_by, String, required: true, description: "The throttle setting's name."
|
26
|
+
end
|
27
|
+
|
28
|
+
def sail_get(name:)
|
29
|
+
Sail.get(name)
|
30
|
+
end
|
31
|
+
|
32
|
+
def sail_switcher(positive:, negative:, throttled_by:)
|
33
|
+
Sail.switcher(
|
34
|
+
positive: positive,
|
35
|
+
negative: negative,
|
36
|
+
throttled_by: throttled_by
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
# :nocov:
|
data/lib/sail/instrumenter.rb
CHANGED
@@ -15,6 +15,7 @@ module Sail
|
|
15
15
|
# statistics
|
16
16
|
def initialize
|
17
17
|
@statistics = { settings: {}, profiles: {} }.with_indifferent_access
|
18
|
+
@number_of_settings = Setting.count
|
18
19
|
end
|
19
20
|
|
20
21
|
# []
|
@@ -59,7 +60,7 @@ module Sail
|
|
59
60
|
def relative_usage_of(setting_name)
|
60
61
|
return 0.0 if @statistics[:settings].empty?
|
61
62
|
|
62
|
-
(100.0 * self[setting_name][:usages]) / @statistics[:settings].
|
63
|
+
(100.0 * self[setting_name][:usages]) / @statistics[:settings].sum { |_, entry| entry[:usages] }
|
63
64
|
end
|
64
65
|
|
65
66
|
# increment_failure_of
|
@@ -76,6 +77,10 @@ module Sail
|
|
76
77
|
Sail.reset(setting_name) if self[setting_name][:failures] > Sail.configuration.failures_until_reset
|
77
78
|
end
|
78
79
|
|
80
|
+
def relevancy_of(setting_name)
|
81
|
+
(relative_usage_of(setting_name) / @number_of_settings).round(1)
|
82
|
+
end
|
83
|
+
|
79
84
|
private
|
80
85
|
|
81
86
|
def expire_cache_fragment(setting_name)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :nocov:
|
4
|
+
module Sail
|
5
|
+
module Graphql
|
6
|
+
module Mutations # :nodoc:
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
field :sail_set, mutation: SailSet do
|
11
|
+
description "Set the value for a setting."
|
12
|
+
argument :name, String, required: true
|
13
|
+
argument :value, String, required: true
|
14
|
+
end
|
15
|
+
|
16
|
+
field :sail_profile_switch, mutation: SailProfileSwitch do
|
17
|
+
description "Switches to the chosen profile."
|
18
|
+
argument :name, String, required: true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class SailSet < ::GraphQL::Schema::Mutation # :nodoc:
|
23
|
+
argument :name, String, required: true
|
24
|
+
argument :value, String, required: true
|
25
|
+
|
26
|
+
field :success, Boolean, null: false
|
27
|
+
|
28
|
+
def resolve(name:, value:)
|
29
|
+
_, success = Sail.set(name, value)
|
30
|
+
{ success: success }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class SailProfileSwitch < ::GraphQL::Schema::Mutation # :nodoc:
|
35
|
+
argument :name, String, required: true
|
36
|
+
|
37
|
+
field :success, Boolean, null: false
|
38
|
+
|
39
|
+
def resolve(name:)
|
40
|
+
success = Profile.exists?(name: name)
|
41
|
+
Profile.switch(name)
|
42
|
+
|
43
|
+
{ success: success }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
# :nocov:
|
data/lib/sail/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vinicius Stock
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: sassc-rails
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: fugit
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,34 +24,20 @@ dependencies:
|
|
38
24
|
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: jquery-rails
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: rails
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
58
30
|
requirements:
|
59
31
|
- - ">="
|
60
32
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
33
|
+
version: 5.0.0
|
62
34
|
type: :runtime
|
63
35
|
prerelease: false
|
64
36
|
version_requirements: !ruby/object:Gem::Requirement
|
65
37
|
requirements:
|
66
38
|
- - ">="
|
67
39
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
40
|
+
version: 5.0.0
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: brakeman
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,20 +66,6 @@ dependencies:
|
|
94
66
|
- - ">="
|
95
67
|
- !ruby/object:Gem::Version
|
96
68
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: byebug
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
69
|
- !ruby/object:Gem::Dependency
|
112
70
|
name: capybara
|
113
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,20 +94,6 @@ dependencies:
|
|
136
94
|
- - ">="
|
137
95
|
- !ruby/object:Gem::Version
|
138
96
|
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: codeclimate-test-reporter
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '1.0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '1.0'
|
153
97
|
- !ruby/object:Gem::Dependency
|
154
98
|
name: database_cleaner
|
155
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,20 +108,6 @@ dependencies:
|
|
164
108
|
- - ">="
|
165
109
|
- !ruby/object:Gem::Version
|
166
110
|
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: jquery-rails
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
111
|
- !ruby/object:Gem::Dependency
|
182
112
|
name: rack-mini-profiler
|
183
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,7 +123,7 @@ dependencies:
|
|
193
123
|
- !ruby/object:Gem::Version
|
194
124
|
version: '0'
|
195
125
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
126
|
+
name: rspec-rails
|
197
127
|
requirement: !ruby/object:Gem::Requirement
|
198
128
|
requirements:
|
199
129
|
- - ">="
|
@@ -207,7 +137,7 @@ dependencies:
|
|
207
137
|
- !ruby/object:Gem::Version
|
208
138
|
version: '0'
|
209
139
|
- !ruby/object:Gem::Dependency
|
210
|
-
name: rspec-
|
140
|
+
name: rspec-retry
|
211
141
|
requirement: !ruby/object:Gem::Requirement
|
212
142
|
requirements:
|
213
143
|
- - ">="
|
@@ -221,7 +151,7 @@ dependencies:
|
|
221
151
|
- !ruby/object:Gem::Version
|
222
152
|
version: '0'
|
223
153
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
154
|
+
name: rubocop
|
225
155
|
requirement: !ruby/object:Gem::Requirement
|
226
156
|
requirements:
|
227
157
|
- - ">="
|
@@ -235,7 +165,7 @@ dependencies:
|
|
235
165
|
- !ruby/object:Gem::Version
|
236
166
|
version: '0'
|
237
167
|
- !ruby/object:Gem::Dependency
|
238
|
-
name: rubocop
|
168
|
+
name: rubocop-packaging
|
239
169
|
requirement: !ruby/object:Gem::Requirement
|
240
170
|
requirements:
|
241
171
|
- - ">="
|
@@ -282,14 +212,14 @@ dependencies:
|
|
282
212
|
requirements:
|
283
213
|
- - "~>"
|
284
214
|
- !ruby/object:Gem::Version
|
285
|
-
version: 0.
|
215
|
+
version: 0.21.0
|
286
216
|
type: :development
|
287
217
|
prerelease: false
|
288
218
|
version_requirements: !ruby/object:Gem::Requirement
|
289
219
|
requirements:
|
290
220
|
- - "~>"
|
291
221
|
- !ruby/object:Gem::Version
|
292
|
-
version: 0.
|
222
|
+
version: 0.21.0
|
293
223
|
- !ruby/object:Gem::Dependency
|
294
224
|
name: sqlite3
|
295
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -332,16 +262,16 @@ files:
|
|
332
262
|
- app/assets/config/sail_manifest.js
|
333
263
|
- app/assets/images/sail/angle-left.svg
|
334
264
|
- app/assets/images/sail/angle-right.svg
|
265
|
+
- app/assets/images/sail/checkmark.svg
|
335
266
|
- app/assets/images/sail/cog.svg
|
267
|
+
- app/assets/images/sail/error.svg
|
336
268
|
- app/assets/images/sail/link.svg
|
337
|
-
- app/assets/images/sail/
|
269
|
+
- app/assets/images/sail/reset.svg
|
338
270
|
- app/assets/images/sail/sort.svg
|
339
|
-
- app/assets/javascripts/sail/application.js
|
340
|
-
- app/assets/javascripts/settings.js
|
341
|
-
- app/assets/stylesheets/sail/
|
342
|
-
- app/assets/stylesheets/sail/
|
343
|
-
- app/assets/stylesheets/sail/application.scss
|
344
|
-
- app/assets/stylesheets/sail/settings.scss
|
271
|
+
- app/assets/javascripts/sail/application.js
|
272
|
+
- app/assets/javascripts/sail/settings.js
|
273
|
+
- app/assets/stylesheets/sail/application.css.erb
|
274
|
+
- app/assets/stylesheets/sail/settings.css
|
345
275
|
- app/controllers/sail/application_controller.rb
|
346
276
|
- app/controllers/sail/profiles_controller.rb
|
347
277
|
- app/controllers/sail/settings_controller.rb
|
@@ -359,7 +289,6 @@ files:
|
|
359
289
|
- app/views/sail/settings/_profiles_modal.html.erb
|
360
290
|
- app/views/sail/settings/_search.html.erb
|
361
291
|
- app/views/sail/settings/_setting.html.erb
|
362
|
-
- app/views/sail/settings/_setting_minimal.html.erb
|
363
292
|
- app/views/sail/settings/_sort_menu.html.erb
|
364
293
|
- app/views/sail/settings/index.html.erb
|
365
294
|
- app/views/sail/settings/update.js.erb
|
@@ -369,13 +298,16 @@ files:
|
|
369
298
|
- lib/generators/sail/install/install_generator.rb
|
370
299
|
- lib/generators/sail/install/templates/create_sail_profiles.rb
|
371
300
|
- lib/generators/sail/install/templates/create_sail_settings.rb
|
301
|
+
- lib/generators/sail/install/templates/sail.yml.tt
|
372
302
|
- lib/generators/sail/update/templates/add_group_to_sail_settings.rb
|
373
303
|
- lib/generators/sail/update/update_generator.rb
|
374
304
|
- lib/sail.rb
|
375
305
|
- lib/sail/configuration.rb
|
376
306
|
- lib/sail/constant_collection.rb
|
377
307
|
- lib/sail/engine.rb
|
308
|
+
- lib/sail/graphql.rb
|
378
309
|
- lib/sail/instrumenter.rb
|
310
|
+
- lib/sail/mutations.rb
|
379
311
|
- lib/sail/railtie.rb
|
380
312
|
- lib/sail/types.rb
|
381
313
|
- lib/sail/types/ab_test.rb
|
@@ -400,16 +332,7 @@ homepage: https://github.com/vinistock/sail
|
|
400
332
|
licenses:
|
401
333
|
- MIT
|
402
334
|
metadata: {}
|
403
|
-
post_install_message:
|
404
|
-
**************************************************************************
|
405
|
-
Sail 3.2.4!
|
406
|
-
|
407
|
-
For major version upgrades, check the CHANGELOG and run the updater to
|
408
|
-
create necessary migrations.
|
409
|
-
|
410
|
-
* https://github.com/vinistock/sail/blob/master/CHANGELOG.md
|
411
|
-
* rails g sail:update
|
412
|
-
**************************************************************************
|
335
|
+
post_install_message:
|
413
336
|
rdoc_options: []
|
414
337
|
require_paths:
|
415
338
|
- lib
|
@@ -417,15 +340,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
417
340
|
requirements:
|
418
341
|
- - ">="
|
419
342
|
- !ruby/object:Gem::Version
|
420
|
-
version: 2.
|
343
|
+
version: 2.5.0
|
421
344
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
422
345
|
requirements:
|
423
346
|
- - ">="
|
424
347
|
- !ruby/object:Gem::Version
|
425
348
|
version: '0'
|
426
349
|
requirements: []
|
427
|
-
rubygems_version: 3.
|
428
|
-
signing_key:
|
350
|
+
rubygems_version: 3.2.11
|
351
|
+
signing_key:
|
429
352
|
specification_version: 4
|
430
353
|
summary: Sail is a lightweight Rails engine that brings an admin panel for managing
|
431
354
|
configuration settings on a live Rails app.
|