sail 3.2.4 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +48 -7
  4. data/Rakefile +3 -3
  5. data/app/assets/images/sail/angle-left.svg +1 -1
  6. data/app/assets/images/sail/angle-right.svg +1 -1
  7. data/app/assets/images/sail/checkmark.svg +1 -0
  8. data/app/assets/images/sail/cog.svg +1 -1
  9. data/app/assets/images/sail/error.svg +1 -0
  10. data/app/assets/images/sail/reset.svg +1 -0
  11. data/app/assets/images/sail/sort.svg +1 -1
  12. data/app/assets/javascripts/sail/{application.js.erb → application.js} +1 -10
  13. data/app/assets/javascripts/{settings.js.erb → sail/settings.js} +81 -13
  14. data/app/assets/stylesheets/sail/application.css.erb +419 -0
  15. data/app/assets/stylesheets/sail/settings.css +559 -0
  16. data/app/controllers/sail/profiles_controller.rb +1 -1
  17. data/app/controllers/sail/settings_controller.rb +5 -15
  18. data/app/helpers/sail/application_helper.rb +4 -0
  19. data/app/models/sail/entry.rb +1 -1
  20. data/app/models/sail/setting.rb +4 -8
  21. data/app/views/layouts/sail/application.html.erb +2 -6
  22. data/app/views/sail/profiles/_profile.html.erb +29 -17
  23. data/app/views/sail/settings/_guide_modal.html.erb +2 -2
  24. data/app/views/sail/settings/_setting.html.erb +74 -52
  25. data/app/views/sail/settings/index.html.erb +21 -14
  26. data/app/views/sail/settings/update.js.erb +10 -4
  27. data/config/locales/en.yml +1 -4
  28. data/lib/generators/sail/install/install_generator.rb +5 -1
  29. data/lib/generators/sail/install/templates/sail.yml.tt +5 -0
  30. data/lib/generators/sail/update/update_generator.rb +1 -1
  31. data/lib/sail.rb +1 -0
  32. data/lib/sail/constant_collection.rb +2 -2
  33. data/lib/sail/engine.rb +7 -6
  34. data/lib/sail/graphql.rb +43 -0
  35. data/lib/sail/instrumenter.rb +6 -1
  36. data/lib/sail/mutations.rb +49 -0
  37. data/lib/sail/version.rb +1 -1
  38. metadata +25 -102
  39. data/app/assets/images/sail/refresh.svg +0 -1
  40. data/app/assets/stylesheets/sail/_colors.scss +0 -9
  41. data/app/assets/stylesheets/sail/_shared.scss +0 -52
  42. data/app/assets/stylesheets/sail/application.scss +0 -353
  43. data/app/assets/stylesheets/sail/settings.scss +0 -422
  44. 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}]" if Rails.version >= "5.0.0"
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 >= "5.0.0"
49
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
50
50
  end
51
51
  end
52
52
  end
data/lib/sail.rb CHANGED
@@ -9,6 +9,7 @@ module Sail # :nodoc:
9
9
  autoload :Configuration, "sail/configuration"
10
10
  autoload :Instrumenter, "sail/instrumenter"
11
11
  autoload :Types, "sail/types"
12
+ autoload :Graphql, "sail/graphql"
12
13
 
13
14
  class << self
14
15
  attr_writer :configuration
@@ -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 = 8
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/refresh.svg sail/sort.svg sail/angle-left.svg
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(&Proc.new)
55
+ klass.to_prepare(&block)
55
56
  end
56
57
  end
57
58
  end
@@ -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:
@@ -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].map { |_, entry| entry[:usages] }.reduce(:+)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sail
4
- VERSION = "3.2.4"
4
+ VERSION = "3.6.0"
5
5
  end
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.2.4
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: 2019-10-02 00:00:00.000000000 Z
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: '0'
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: '0'
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: rails_best_practices
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-rails
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: rspec-retry
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.17.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.17.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/refresh.svg
269
+ - app/assets/images/sail/reset.svg
338
270
  - app/assets/images/sail/sort.svg
339
- - app/assets/javascripts/sail/application.js.erb
340
- - app/assets/javascripts/settings.js.erb
341
- - app/assets/stylesheets/sail/_colors.scss
342
- - app/assets/stylesheets/sail/_shared.scss
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.3.0
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.0.6
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.