bullet_train 1.2.9 → 1.2.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/account/two_factors_controller.rb +21 -5
  3. data/app/controllers/turbo_devise_controller.rb +1 -1
  4. data/app/helpers/account/forms_helper.rb +3 -1
  5. data/app/helpers/attributes_helper.rb +2 -2
  6. data/app/javascript/controllers/clipboard_controller.js +1 -1
  7. data/app/javascript/controllers/connection_workflow_controller.js +7 -0
  8. data/app/javascript/controllers/desktop_menu_controller.js +26 -0
  9. data/app/javascript/controllers/index.js +4 -0
  10. data/app/javascript/index.js +2 -1
  11. data/app/javascript/support/turn.js +183 -0
  12. data/app/models/billing/mock_limiter.rb +5 -1
  13. data/app/models/concerns/records/base.rb +8 -9
  14. data/app/models/concerns/users/base.rb +2 -2
  15. data/app/views/account/invitations/_form.html.erb +2 -2
  16. data/app/views/account/memberships/_form.html.erb +2 -2
  17. data/app/views/account/memberships/_membership.html.erb +1 -1
  18. data/app/views/account/teams/_breadcrumbs.html.erb +12 -5
  19. data/app/views/account/teams/_team.html.erb +4 -4
  20. data/app/views/account/two_factors/verify.js.erb +1 -0
  21. data/app/views/devise/passwords/edit.html.erb +1 -1
  22. data/app/views/devise/registrations/_two_factor.html.erb +29 -8
  23. data/app/views/devise/sessions/new.html.erb +4 -2
  24. data/app/views/layouts/docs.html.erb +7 -7
  25. data/config/locales/en/teams.en.yml +2 -0
  26. data/config/locales/en/users.en.yml +8 -1
  27. data/config/routes.rb +3 -1
  28. data/docs/action-models.md +5 -5
  29. data/docs/api/versioning.md +0 -2
  30. data/docs/api.md +4 -4
  31. data/docs/application-options.md +1 -1
  32. data/docs/billing/usage.md +94 -16
  33. data/docs/field-partials.md +20 -20
  34. data/docs/font-awesome-pro.md +1 -1
  35. data/docs/getting-started.md +3 -3
  36. data/docs/i18n.md +3 -3
  37. data/docs/indirection.md +6 -4
  38. data/docs/namespacing.md +1 -1
  39. data/docs/onboarding.md +8 -8
  40. data/docs/overriding.md +1 -1
  41. data/docs/permissions.md +1 -1
  42. data/docs/seeds.md +1 -1
  43. data/docs/testing.md +2 -1
  44. data/docs/themes.md +18 -11
  45. data/docs/tunneling.md +2 -2
  46. data/docs/upgrades.md +2 -1
  47. data/lib/bullet_train/configuration.rb +15 -0
  48. data/lib/bullet_train/engine.rb +15 -0
  49. data/lib/bullet_train/version.rb +1 -1
  50. data/lib/bullet_train.rb +11 -1
  51. data/lib/colorizer.rb +1 -1
  52. data/lib/tasks/bullet_train_tasks.rake +66 -55
  53. metadata +22 -9
  54. data/app/views/account/invitations/_invitation.json.jbuilder +0 -7
  55. data/app/views/account/invitations/index.json.jbuilder +0 -1
  56. data/app/views/account/invitations/show.json.jbuilder +0 -1
  57. data/app/views/account/teams/_team.json.jbuilder +0 -9
  58. data/app/views/account/teams/index.json.jbuilder +0 -1
  59. data/app/views/account/teams/show.json.jbuilder +0 -1
data/docs/themes.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Themes
2
2
 
3
- Bullet Train has a theme subsystem designed to allow you the flexibility to either extend or completely replace the stock “Light” UI template.
3
+ Bullet Train has a theme subsystem designed to allow you the flexibility to either extend or completely replace the stock “Light” UI theme.
4
4
  To reduce duplication of code across themes, Bullet Train implements the following three packages:
5
5
  1. `bullet_train-themes`
6
6
  2. `bullet_train-themes-tailwind_css`
@@ -10,12 +10,16 @@ This is where all of Bullet Train's standard views are contained.
10
10
 
11
11
  ## Adding a New Theme (ejecting standard views)
12
12
 
13
- If you want to add a new theme, you can use the following command. This will copy all of the standard views from `bullet_train-themes-light` to `app/views/themes/` and configure your application to use the new theme. For example, let's make a new theme called "foo":
14
- `> rake bullet_train:themes:light:eject[foo]`
13
+ If you want to add a new theme, you can use the following command. For example, let's make a new theme called "foo":
14
+ ```
15
+ > rake bullet_train:themes:light:eject[foo]
16
+ ```
17
+
18
+ This will copy all of the standard views from `bullet_train-themes-light` to `app/views/themes/` and configure your application to use the new theme.
15
19
 
16
20
  After running this command, you will see that a few other files are edited to use this new theme. Whenever switching a theme, you will need to make the same changes to make sure your application is running with the theme of your choice.
17
21
 
18
- You can also pass an annotated path to a view after running `bin/resolve` to eject individual views to your application.
22
+ You can also pass an annotated path to a view after running `bin/resolve --interactive` to eject individual views to your application.
19
23
 
20
24
  ## Theme Component Usage
21
25
 
@@ -25,21 +29,24 @@ To use a theme component, simply include it from "within" `shared` like so:
25
29
  <%= render 'shared/fields/text_field', method: :text_field_value %>
26
30
  ```
27
31
 
28
- We say "within" because while a `shared` view partial directory does exist, the referenced `shared/fields/_text_field.html.erb` doesn't actually exist within it. Instead, the theme engine picks up on `shared` and also works its way through the theme directories to find the appropriate match.
32
+ We say "within" because while a `shared` view partial directory does exist, the referenced `shared/fields/_text_field.html.erb` doesn't actually exist within it. Instead, the theme engine picks up on `shared` and then works its way through the theme directories to find the appropriate match.
29
33
 
30
34
  ### Dealing with Indirection
31
35
 
32
36
  This small piece of indirection buys us an incredible amount of power in building and extending themes, but as with any indirection, it could potentially come at the cost of developer experience. That's why Bullet Train includes additional tools for smoothing over this experience. Be sure to read the section on [dealing with indirection](./indirection.md).
33
37
 
34
- ## Theme Configuration
38
+ ## Restoring Theme Configuration
35
39
 
36
- Your application will automatically be configured to use your new theme whenever you run the eject command. Run `> rake bullet_train:themes:light:install` to re-install the standard light theme.
40
+ Your application will automatically be configured to use your new theme whenever you run the eject command. You can run the below command to re-install the standard light theme.
41
+ ```
42
+ > rake bullet_train:themes:light:install
43
+ ```
37
44
 
38
45
  ## Additional Guidance and Principles
39
46
 
40
47
  ### Should you extend or replace?
41
48
 
42
- For most development projects, the likely best path for customizing the UI is to extend “Light” or another complete Bullet Train theme. It’s difficult to convey how many hours have gone into making the Bullet Train themes complete and coherent from end to end. Every type of field partial, all the third-party libraries, all the responsiveness scenarios, etc. It’s taken many hours and many invoices.
49
+ For most development projects, the likely best path for customizing the UI is to extend “Light” or another complete Bullet Train theme. It’s difficult to convey how many hours have gone into making the Bullet Train themes complete and coherent from end to end. Every type of field partial, all the third-party libraries, all the responsiveness scenarios, etc. It has taken many hours of expert time.
43
50
 
44
51
  Extending an existing theme is like retaining an option on shipping. By extending a theme that is already complete, you allow yourself to say “enough is enough” at a certain point and just living with some inherited defaults in exchange for shipping your product sooner. You can always do more UI work later, but it doesn’t look unpolished now!
45
52
 
@@ -63,11 +70,11 @@ On the other hand, if you decide to try to build a theme from the ground up, you
63
70
  <% end %>
64
71
  ```
65
72
 
66
- This allows the theme engine to resolve which theme in the inheritance chain to include the `box` partial from. For example:
73
+ This allows the theme engine to resolve which theme in the inheritance chain will include the `box` partial. For example:
67
74
 
68
- - It might come from the “Light” theme today, but if you switch to the “Bold” theme later, it’ll can start pulling it from there.
75
+ - It might come from the “Light” theme today, but if you switch to the “Bold” theme later, it’ll start pulling it from there.
69
76
  - If you start extending “Light”, you can override its `box` implementation and your application will pick up the new customized version from your theme automatically.
70
- - If (hypothetically) `box` became generalized and move into the parent “Tailwind CSS” theme, your application would pick it up from the appropriate place.
77
+ - If (hypothetically) `box` becomes generalized and moves into the parent “Tailwind CSS” theme, your application would pick it up from the appropriate place.
71
78
 
72
79
  ### Let your designer name their theme.
73
80
 
data/docs/tunneling.md CHANGED
@@ -4,14 +4,14 @@ Before your application can take advantage of features that depend on incoming w
4
4
 
5
5
  ## Use a Paid Plan
6
6
 
7
- You should specifically sign up for a paid account. Although ngrok offers a free plan, their $25/month paid plan will allow you to reserve a custom subdomain for reuse each time you spin up your tunnel. This is a critical productivity improvement, because in practice you'll end up configuring your tunnel URL in a bunch of different places like `config/application.yml` but also in external systems like when you [configure payment providers to deliver webhooks to you](docs/billing/stripe.md).
7
+ You should specifically sign up for a paid account. Although ngrok offers a free plan, their $25/month paid plan will allow you to reserve a custom subdomain for reuse each time you spin up your tunnel. This is a critical productivity improvement, because in practice you'll end up configuring your tunnel URL in a bunch of different places like `config/application.yml` but also in external systems like when you [configure payment providers to deliver webhooks to you](/docs/billing/stripe.md).
8
8
 
9
9
  ## Usage
10
10
 
11
11
  Once you have ngrok installed, you can start your tunnel like so, replacing `YOUR-SUBDOMAIN` with whatever subdomain you reserved in your ngrok account:
12
12
 
13
13
  ```
14
- ngrok http 3000 -subdomain=YOUR-SUBDOMAIN
14
+ ngrok http 3000 --subdomain=YOUR-SUBDOMAIN
15
15
  ```
16
16
 
17
17
  ## Updating Your Configuration
data/docs/upgrades.md CHANGED
@@ -43,7 +43,7 @@ git checkout -b updating-starter-repo
43
43
  git merge starter-repo/main
44
44
  ```
45
45
 
46
- It's quite possible you'll get some merge conflicts at this point. No big deal! Just go through and resolve them like you would if you were integrating code from another developer on your team. We tend to comment our code heavily, but if you have any questions about the code you're trying to understand, let us know on Slack!
46
+ It's quite possible you'll get some merge conflicts at this point. No big deal! Just go through and resolve them like you would if you were integrating code from another developer on your team. We tend to comment our code heavily, but if you have any questions about the code you're trying to understand, let us know on Discord!
47
47
 
48
48
  ```
49
49
  git diff
@@ -55,6 +55,7 @@ git commit -m "Upgrading Bullet Train."
55
55
 
56
56
  ```
57
57
  rails test
58
+ rails test:system
58
59
  ```
59
60
 
60
61
  ### 6. Merge into `main` and delete the branch.
@@ -0,0 +1,15 @@
1
+ module BulletTrain
2
+ class Configuration
3
+ attr_accessor :strong_passwords
4
+
5
+ @default = Configuration.new
6
+
7
+ def initialize
8
+ self.strong_passwords = true
9
+ end
10
+
11
+ class << self
12
+ attr_reader :default
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,18 @@
1
+ begin
2
+ # We hoist the Devise engine, so its app/views directory is always after ours in a Rails app's view_paths.
3
+ #
4
+ # This is a quirk of how Rails engines compose, since engines `prepend_view_path` with their views:
5
+ # https://github.com/rails/rails/blob/9f141a423d551f7f421f54d1372e65ef6ed1f0be/railties/lib/rails/engine.rb#L606
6
+ #
7
+ # If users put devise after bullet_train in their Gemfile, Bundler requires the gems in that order,
8
+ # and devise's `prepend_view_path` would be called last, thus being prepended ahead of BulletTrain when Rails looks up views.
9
+ #
10
+ # Note: if this breaks down in the future, we may want to look into config.railties_order.
11
+ require "devise"
12
+ rescue LoadError
13
+ # Devise isn't in the Gemfile, and we don't have any other load order dependencies.
14
+ end
15
+
1
16
  module BulletTrain
2
17
  class Engine < ::Rails::Engine
3
18
  end
@@ -1,3 +1,3 @@
1
1
  module BulletTrain
2
- VERSION = "1.2.9"
2
+ VERSION = "1.2.11"
3
3
  end
data/lib/bullet_train.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "bullet_train/version"
2
2
  require "bullet_train/engine"
3
3
  require "bullet_train/resolver"
4
+ require "bullet_train/configuration"
4
5
 
5
6
  require "bullet_train/fields"
6
7
  require "bullet_train/roles"
@@ -12,6 +13,7 @@ require "colorizer"
12
13
  require "bullet_train/core_ext/string_emoji_helper"
13
14
 
14
15
  require "devise"
16
+ require "xxhash"
15
17
  # require "devise-two-factor"
16
18
  # require "rqrcode"
17
19
  require "cancancan"
@@ -37,6 +39,14 @@ module BulletTrain
37
39
  mattr_accessor :linked_gems, default: ["bullet_train"]
38
40
  mattr_accessor :parent_class, default: "Team"
39
41
  mattr_accessor :base_class, default: "ApplicationRecord"
42
+
43
+ def self.configure
44
+ if block_given?
45
+ yield(BulletTrain::Configuration.default)
46
+ else
47
+ BulletTrain::Configuration.default
48
+ end
49
+ end
40
50
  end
41
51
 
42
52
  def default_url_options_from_base_url
@@ -106,7 +116,7 @@ def cloudinary_enabled?
106
116
  end
107
117
 
108
118
  def two_factor_authentication_enabled?
109
- ENV["TWO_FACTOR_ENCRYPTION_KEY"].present?
119
+ Rails.application.credentials.active_record_encryption&.primary_key.present?
110
120
  end
111
121
 
112
122
  # Don't redefine this if an application redefines it locally.
data/lib/colorizer.rb CHANGED
@@ -11,7 +11,7 @@ module Colorizer
11
11
  end
12
12
 
13
13
  def colorize_similarly(object, saturation, lightness)
14
- rnd = ((object.hash * 7) % 100) * 0.01
14
+ rnd = ((XXhash.xxh64(object) * 7) % 100) * 0.01
15
15
  hsl_to_rgb(rnd, saturation, lightness)
16
16
  end
17
17
 
@@ -118,16 +118,22 @@ namespace :bullet_train do
118
118
  when "--link", "--reset"
119
119
  set_core_gems(process[:flag], framework_packages)
120
120
  stream "bundle install"
121
- when "--watch-js"
122
- set_npm_packages(process[:flag], framework_packages)
123
-
124
- puts "Proceeding to reset your Bullet Train npm packages according to your root directory's `package.json`.".yellow
125
- puts "If you press `Ctrl + C` before the process completely exits, just run `bin/hack --clean-js`".yellow
126
- set_npm_packages("--clean-js", framework_packages)
127
- break
128
- when "--clean-js"
129
- set_npm_packages(process[:flag], framework_packages)
130
- break
121
+ when "--watch-js", "--clean-js"
122
+ package_name = process[:values].pop
123
+ framework_package = framework_packages.select { |k, v| k.to_s == package_name }
124
+ if framework_package.empty?
125
+ puts "Sorry, we couldn't find the package you're looking for.".red
126
+ puts ""
127
+
128
+ npm_packages = framework_packages.select { |name, details| details[:npm].present? }
129
+ puts "Please enter one of the following package names when running `bin/hack --watch-js` or `bin/hack --clean-js`:"
130
+ npm_packages.each_with_index do |package, idx|
131
+ puts "#{idx + 1}. #{package.first}"
132
+ end
133
+ exit 1
134
+ end
135
+
136
+ set_npm_package(process[:flag], framework_package)
131
137
  end
132
138
  end
133
139
 
@@ -194,16 +200,13 @@ namespace :bullet_train do
194
200
  `#{ENV["IDE"] || "code"} local/bullet_train-core`
195
201
  puts ""
196
202
 
197
- puts "Bullet Train has a few npm packages, so we will and install those now.".blue
198
- puts "We will also watch for any changes in your JavaScript files and recompile as we go.".blue
203
+ puts "Bullet Train has a few npm packages, but we can only watch one at a time, so we will watch the `bullet_train` package.".blue
204
+ puts "Any changes in your JavaScript files in this package will be recompiled as we go.".blue
205
+ puts "Run `bin/hack --watch-js` to see which other npm packages you can watch.".blue
199
206
  puts "When you're done, you can hit <Control + C> and we'll clean all off this up.".blue
200
207
  puts ""
201
- set_npm_packages("--watch-js", framework_packages)
202
-
203
- # Clean up the npm packages after the developer enters `Ctrl + C`.
204
- puts "Cleaning up npm packages...".blue
205
- puts "If you cancel out of this process early, just run `bin/hack --clean-js` to revert to your original npm packages.".blue
206
- set_npm_packages("--clean-js", framework_packages)
208
+ bt_package = framework_packages.select { |k, v| k == :bullet_train }
209
+ set_npm_package("--watch-js", bt_package)
207
210
 
208
211
  puts ""
209
212
  puts "OK, here's a list of things this script still doesn't do you for you:".yellow
@@ -215,15 +218,18 @@ namespace :bullet_train do
215
218
  def set_core_gems(flag, framework_packages)
216
219
  packages = framework_packages.keys
217
220
  gemfile_lines = File.readlines("./Gemfile")
218
- new_lines = gemfile_lines.map do |line|
219
- packages.each do |package|
221
+
222
+ packages.each do |package|
223
+ original_path = "gem \"#{package}\""
224
+ local_path = "gem \"#{package}\", path: \"local/bullet_train-core/#{package}\""
225
+ match_found = false
226
+
227
+ new_lines = gemfile_lines.map do |line|
220
228
  if line.match?(/"#{package}"/)
221
- original_path = "gem \"#{package}\""
222
- local_path = "gem \"#{package}\", path: \"local/bullet_train-core/#{package}\""
229
+ match_found = true
223
230
 
224
- case flag
225
- when "--link"
226
- if `cat Gemfile | grep "gem \\\"#{package}\\\", path: \\\"local/#{package}\\\""`.chomp.present?
231
+ if flag == "--link"
232
+ if `cat Gemfile | grep "gem \\\"#{package}\\\", path: \\\"local/bullet_train-core/#{package}\\\""`.chomp.present?
227
233
  puts "#{package} is already linked to a checked out copy in `local` in the `Gemfile`.".green
228
234
  elsif `cat Gemfile | grep "gem \\\"#{package}\\\","`.chomp.present?
229
235
  puts "#{package} already has some sort of alternative source configured in the `Gemfile`.".yellow
@@ -232,47 +238,52 @@ namespace :bullet_train do
232
238
  puts "#{package} is directly present in the `Gemfile`, so we'll update that line.".green
233
239
  line.gsub!(original_path, local_path)
234
240
  end
235
- break
236
- when "--reset"
241
+ elsif flag == "--reset"
237
242
  line.gsub!(local_path, original_path)
238
243
  puts "Resetting '#{package}' package in the Gemfile...".blue
239
- break
240
244
  end
241
245
  end
246
+ line
242
247
  end
243
- line
244
- end
245
-
246
- File.write("./Gemfile", new_lines.join)
247
- end
248
248
 
249
- def set_npm_packages(flag, framework_packages)
250
- packages = framework_packages.select { |k, v| v[:npm].present? }.compact
249
+ # Add/Remove any packages that aren't primarily in the Gemfile.
250
+ if flag == "--link"
251
+ unless match_found
252
+ puts "Could not find #{package}. Adding to the end of the Gemfile.".blue
253
+ new_lines << "#{local_path}\n"
254
+ end
255
+ elsif flag == "--reset"
256
+ gem_regexp = /bullet_train-[a-z|A-Z_-]+/
257
+ while new_lines.last.match?(gem_regexp)
258
+ puts "Removing #{new_lines.last.scan(gem_regexp).first} from the Gemfile.".yellow
259
+ new_lines.pop
260
+ end
261
+ end
251
262
 
252
- if flag == "--watch-js"
253
- puts "Make sure your server is running before proceeding. When you're ready, press <Enter>".blue
254
- $stdin.gets.strip
263
+ gemfile_lines = new_lines
264
+ end
255
265
 
256
- puts "Linking npm packages...".blue
257
- puts ""
266
+ File.write("./Gemfile", gemfile_lines.join)
267
+ end
258
268
 
259
- yarn_watch_command = []
260
- packages.each do |package_name, details|
261
- puts "Linking JavaScript for #{package_name}".blue
262
- stream "cd local/bullet_train-core/#{package_name} && yarn install && npm_config_yes=true && npx yalc link && cd ../../.. && npm_config_yes=true npx yalc link \"#{details[:npm]}\""
263
- puts "#{package_name} has been linked.".blue
269
+ def set_npm_package(flag, package)
270
+ package.each do |name, details|
271
+ if flag == "--watch-js"
272
+ puts "Make sure your server is running before proceeding. When you're ready, press <Enter>".blue
273
+ $stdin.gets.strip
274
+
275
+ puts "Linking JavaScript for #{name}".blue
276
+ stream "cd local/bullet_train-core/#{name} && yarn install && npm_config_yes=true && npx yalc link && cd ../../.. && npm_config_yes=true npx yalc link \"#{details[:npm]}\""
277
+ puts "#{name} has been linked.".blue
278
+ puts "Preparing to watch changes.".blue
279
+ stream "yarn --cwd local/bullet_train-core/#{name} watch"
280
+
281
+ # Provide a help message after the developer kills the process with `Ctrl + C`.
282
+ puts "Run `bin/hack --clean-js #{name}` to revert to using the original npm package in your application.".blue
283
+ elsif flag == "--clean-js"
284
+ puts "Going back to using original `#{name}` npm package in application.".blue
264
285
  puts ""
265
- yarn_watch_command << "yarn --cwd local/bullet_train-core/#{package_name} watch"
266
- end
267
-
268
- # We use `&` to run the processes in parallel.
269
- puts "Preparing to watch changes".blue
270
- stream yarn_watch_command.join(" & ")
271
- elsif flag == "--clean-js"
272
- puts "Resetting packages to their original path".blue
273
- puts ""
274
286
 
275
- packages.each do |package_name, details|
276
287
  system "yarn yalc remove #{details[:npm]}"
277
288
  system "yarn add #{details[:npm]}"
278
289
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.9
4
+ version: 1.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-28 00:00:00.000000000 Z
11
+ date: 2023-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: xxhash
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: cancancan
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -486,6 +500,8 @@ files:
486
500
  - app/javascript/controllers/bulk_action_form_controller.js
487
501
  - app/javascript/controllers/bulk_actions_controller.js
488
502
  - app/javascript/controllers/clipboard_controller.js
503
+ - app/javascript/controllers/connection_workflow_controller.js
504
+ - app/javascript/controllers/desktop_menu_controller.js
489
505
  - app/javascript/controllers/form_controller.js
490
506
  - app/javascript/controllers/index.js
491
507
  - app/javascript/controllers/mobile_menu_controller.js
@@ -493,6 +509,7 @@ files:
493
509
  - app/javascript/controllers/text_toggle_controller.js
494
510
  - app/javascript/electron/index.js
495
511
  - app/javascript/index.js
512
+ - app/javascript/support/turn.js
496
513
  - app/mailers/concerns/mailers/base.rb
497
514
  - app/mailers/devise_mailer.rb
498
515
  - app/mailers/user_mailer.rb
@@ -513,11 +530,8 @@ files:
513
530
  - app/models/users.rb
514
531
  - app/views/account/invitations/_breadcrumbs.html.erb
515
532
  - app/views/account/invitations/_form.html.erb
516
- - app/views/account/invitations/_invitation.json.jbuilder
517
- - app/views/account/invitations/index.json.jbuilder
518
533
  - app/views/account/invitations/new.html.erb
519
534
  - app/views/account/invitations/show.html.erb
520
- - app/views/account/invitations/show.json.jbuilder
521
535
  - app/views/account/memberships/_breadcrumbs.html.erb
522
536
  - app/views/account/memberships/_fields.html.erb
523
537
  - app/views/account/memberships/_form.html.erb
@@ -536,15 +550,13 @@ files:
536
550
  - app/views/account/teams/_index.html.erb
537
551
  - app/views/account/teams/_menu_item.html.erb
538
552
  - app/views/account/teams/_team.html.erb
539
- - app/views/account/teams/_team.json.jbuilder
540
553
  - app/views/account/teams/edit.html.erb
541
554
  - app/views/account/teams/index.html.erb
542
- - app/views/account/teams/index.json.jbuilder
543
555
  - app/views/account/teams/new.html.erb
544
556
  - app/views/account/teams/show.html.erb
545
- - app/views/account/teams/show.json.jbuilder
546
557
  - app/views/account/two_factors/create.js.erb
547
558
  - app/views/account/two_factors/destroy.js.erb
559
+ - app/views/account/two_factors/verify.js.erb
548
560
  - app/views/account/users/_breadcrumbs.html.erb
549
561
  - app/views/account/users/_fields.html.erb
550
562
  - app/views/account/users/_form.html.erb
@@ -664,6 +676,7 @@ files:
664
676
  - docs/webhooks/outgoing.md
665
677
  - docs/zapier.md
666
678
  - lib/bullet_train.rb
679
+ - lib/bullet_train/configuration.rb
667
680
  - lib/bullet_train/core_ext/string_emoji_helper.rb
668
681
  - lib/bullet_train/engine.rb
669
682
  - lib/bullet_train/resolver.rb
@@ -696,7 +709,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
696
709
  - !ruby/object:Gem::Version
697
710
  version: '0'
698
711
  requirements: []
699
- rubygems_version: 3.3.7
712
+ rubygems_version: 3.4.1
700
713
  signing_key:
701
714
  specification_version: 4
702
715
  summary: Bullet Train
@@ -1,7 +0,0 @@
1
- json.extract! invitation,
2
- :id,
3
- :email,
4
- # 🚅 super scaffolding will insert new fields above this line.
5
- :created_at,
6
- :updated_at
7
- json.url account_invitation_url(invitation, format: :json)
@@ -1 +0,0 @@
1
- json.array! @invitations, partial: "invitations/invitation", as: :invitation
@@ -1 +0,0 @@
1
- json.partial! "invitations/invitation", invitation: @invitation
@@ -1,9 +0,0 @@
1
- json.extract! team,
2
- :id,
3
- :name,
4
- :time_zone,
5
- :locale,
6
- # 🚅 super scaffolding will insert new fields above this line.
7
- :created_at,
8
- :updated_at
9
- json.url account_team_url(team, format: :json)
@@ -1 +0,0 @@
1
- json.array! @teams, partial: "teams/team", as: :team
@@ -1 +0,0 @@
1
- json.partial! "teams/team", team: @team