bullet_train 1.2.19 → 1.2.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/concerns/records/base.rb +1 -5
- data/app/views/account/invitations/new.html.erb +5 -10
- data/app/views/account/invitations/show.html.erb +3 -3
- data/app/views/account/memberships/_index.html.erb +5 -5
- data/app/views/account/memberships/_menu_item.html.erb +2 -2
- data/app/views/account/memberships/_tombstones.html.erb +4 -4
- data/app/views/account/memberships/edit.html.erb +9 -15
- data/app/views/account/memberships/index.html.erb +3 -3
- data/app/views/account/memberships/show.html.erb +11 -14
- data/app/views/account/onboarding/user_details/edit.html.erb +3 -3
- data/app/views/account/onboarding/user_email/edit.html.erb +3 -3
- data/app/views/account/teams/_form.html.erb +0 -1
- data/app/views/account/teams/_menu_item.html.erb +2 -2
- data/app/views/account/teams/_team.html.erb +2 -2
- data/app/views/account/teams/edit.html.erb +5 -10
- data/app/views/account/teams/index.html.erb +4 -6
- data/app/views/account/teams/new.html.erb +3 -3
- data/app/views/account/users/edit.html.erb +9 -12
- data/app/views/devise/passwords/edit.html.erb +3 -3
- data/app/views/devise/passwords/new.html.erb +3 -3
- data/app/views/devise/registrations/_two_factor.html.erb +5 -6
- data/app/views/devise/registrations/new.html.erb +3 -3
- data/app/views/devise/sessions/new.html.erb +3 -3
- data/app/views/layouts/docs.html.erb +36 -36
- data/lib/bullet_train/version.rb +1 -1
- data/lib/tasks/bullet_train_tasks.rake +24 -12
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aded6e1793584701eb001f64681e06d155528f81465185b23bc3f5265c3bcec7
|
4
|
+
data.tar.gz: e496895bf0a74a0470b3aae6954dbeb19240467892fa4b9d655318faf17b93e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6770a9c6974333bc0c21e3aaa7d8ef07dbb7d7f89dd34f857304f36df0357ccffe56b977247c028531277ae12e2a87b793aa0ccae31691fed7a7a2ae293c8a01
|
7
|
+
data.tar.gz: 382f88ff873e58f3ca8bb4b4d491b5fec91d99a2e317279d381fa61e165f2afaa0cd50db132ffc86be241b3fd802ded9dd9b1d6e29a9768c7c09ed0caf6a5942
|
@@ -73,11 +73,7 @@ module Records::Base
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def seeding?
|
76
|
-
|
77
|
-
return false if rake_tasks.count.zero?
|
78
|
-
|
79
|
-
db_seed_task = rake_tasks.find { |task| task.name.match?(/^db:seed$/) }
|
80
|
-
db_seed_task.already_invoked
|
76
|
+
Rake::Task.task_defined?("db:seed") && Rake::Task["db:seed"].already_invoked
|
81
77
|
end
|
82
78
|
|
83
79
|
# TODO This should really be in the API package and included from there.
|
@@ -1,12 +1,7 @@
|
|
1
|
-
<%= render 'account/shared/page' do |
|
2
|
-
<%
|
3
|
-
<%
|
4
|
-
|
5
|
-
|
6
|
-
<% p.content_for :description, t('.description') %>
|
7
|
-
<% p.content_for :body do %>
|
8
|
-
<%= render 'form', invitation: @invitation %>
|
9
|
-
<% end %>
|
10
|
-
<% end %>
|
1
|
+
<%= render 'account/shared/page' do |page| %>
|
2
|
+
<% page.title t('.section') %>
|
3
|
+
<% page.body.render 'account/shared/box', divider: true do |box| %>
|
4
|
+
<% box.t :description, title: '.header' %>
|
5
|
+
<% box.body.render 'form', invitation: @invitation %>
|
11
6
|
<% end %>
|
12
7
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<%= render 'account/shared/workflow/box' do |
|
2
|
-
<%
|
3
|
-
<%
|
1
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
2
|
+
<% box.title t(".join_team") %>
|
3
|
+
<% box.body do %>
|
4
4
|
<div class="space-y">
|
5
5
|
<% if !@invitation.is_for?(current_user) %>
|
6
6
|
<p><%= raw t('.has_invited', user_name: @invitation.from_membership.name) %></p>
|
@@ -3,14 +3,14 @@
|
|
3
3
|
<% hide_back ||= false %>
|
4
4
|
|
5
5
|
<%= updates_for context, :memberships do %>
|
6
|
-
<%= render 'account/shared/box' do |
|
7
|
-
<%
|
8
|
-
<%
|
6
|
+
<%= render 'account/shared/box' do |box| %>
|
7
|
+
<% box.title t(".contexts.#{context.class.name.underscore}.header") %>
|
8
|
+
<% box.description do %>
|
9
9
|
<%= raw t(".contexts.#{context.class.name.underscore}.#{@memberships.any? ? 'description' : 'description_empty'}") %>
|
10
10
|
<%= render "shared/limits/index", model: @memberships.model %>
|
11
11
|
<% end %>
|
12
12
|
|
13
|
-
<%
|
13
|
+
<% box.table do %>
|
14
14
|
<% if @memberships.any? %>
|
15
15
|
<table class="table">
|
16
16
|
<thead>
|
@@ -29,7 +29,7 @@
|
|
29
29
|
<% end %>
|
30
30
|
|
31
31
|
<% unless hide_actions %>
|
32
|
-
<%
|
32
|
+
<% box.actions do %>
|
33
33
|
<%= link_to t('invitations.buttons.new'), new_account_team_invitation_path(@team, cancel_path: account_team_memberships_path(@team)), class: "#{first_button_primary}" %>
|
34
34
|
<%= link_to t('global.buttons.back'), [:account, context], class: "#{first_button_primary} back" unless hide_back %>
|
35
35
|
<% end %>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<%= render 'account/shared/menu/item', {
|
2
2
|
url: main_app.polymorphic_path([:account, current_team, :memberships]),
|
3
3
|
label: t('memberships.navigation.label'),
|
4
|
-
} do |
|
5
|
-
<%
|
4
|
+
} do |item| %>
|
5
|
+
<% item.icon do %>
|
6
6
|
<i class="<%= t('memberships.navigation.icon') %>"></i>
|
7
7
|
<% end %>
|
8
8
|
<% end %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<% context ||= @team %>
|
2
2
|
<% hide_actions ||= false %>
|
3
3
|
|
4
|
-
<%= render 'account/shared/box' do |
|
5
|
-
<%
|
6
|
-
<%
|
4
|
+
<%= render 'account/shared/box' do |box| %>
|
5
|
+
<% box.title t("memberships.tombstones.contexts.#{context.class.name.underscore}.header") %>
|
6
|
+
<% box.description do %>
|
7
7
|
<%= raw t("memberships.tombstones.contexts.#{context.class.name.underscore}.#{memberships.any? ? 'description' : 'description_empty'}") %>
|
8
8
|
<% end %>
|
9
9
|
|
10
|
-
<%
|
10
|
+
<% box.body do %>
|
11
11
|
<% if memberships.any? %>
|
12
12
|
<table class="table">
|
13
13
|
<thead>
|
@@ -1,21 +1,15 @@
|
|
1
|
-
<%= render 'account/shared/page' do |
|
2
|
-
<%
|
3
|
-
<%
|
4
|
-
<%= render 'account/shared/box', divider: true do |
|
5
|
-
<%
|
6
|
-
<%
|
7
|
-
<% p.content_for :body do %>
|
8
|
-
<%= render 'form', membership: @membership %>
|
9
|
-
<% end %>
|
1
|
+
<%= render 'account/shared/page' do |page| %>
|
2
|
+
<% page.title t('.section') %>
|
3
|
+
<% page.body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |box| %>
|
5
|
+
<% box.t :description, title: '.header' %>
|
6
|
+
<% box.body.render 'form', membership: @membership %>
|
10
7
|
<% end %>
|
11
8
|
|
12
9
|
<% if can? :destroy, @membership %>
|
13
|
-
<%= render 'account/shared/box', divider: true do |
|
14
|
-
<%
|
15
|
-
<%
|
16
|
-
<% p.content_for :body do %>
|
17
|
-
<%= button_to t('.buttons.destroy'), [:account, @membership], method: :delete, data: { confirm: t('.buttons.confirmations.destroy') }, class: 'button' %>
|
18
|
-
<% end %>
|
10
|
+
<%= render 'account/shared/box', divider: true do |box| %>
|
11
|
+
<% box.t title: '.remove_header', description: '.remove_description' %>
|
12
|
+
<% box.body.button_to t('.buttons.destroy'), [:account, @membership], method: :delete, data: { confirm: t('.buttons.confirmations.destroy') }, class: 'button' %>
|
19
13
|
<% end %>
|
20
14
|
<% end %>
|
21
15
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<%= render 'account/shared/page' do |
|
2
|
-
<%
|
3
|
-
<%
|
1
|
+
<%= render 'account/shared/page' do |page| %>
|
2
|
+
<% page.title t('.section') %>
|
3
|
+
<% page.body do %>
|
4
4
|
<% if @memberships.current_and_invited.any? %>
|
5
5
|
<%= render 'index' do %>
|
6
6
|
<%= render @memberships.current_and_invited.includes(:user) %>
|
@@ -1,8 +1,8 @@
|
|
1
|
-
<%= render 'account/shared/page' do |
|
2
|
-
<%
|
3
|
-
<%
|
4
|
-
<%= render 'account/shared/box', divider: true do |
|
5
|
-
<%
|
1
|
+
<%= render 'account/shared/page' do |page| %>
|
2
|
+
<% page.title t('.section') %>
|
3
|
+
<% page.body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |box| %>
|
5
|
+
<% box.title do %>
|
6
6
|
<% if @membership.unclaimed? %>
|
7
7
|
<%= t('.invitation_header') %>
|
8
8
|
<% elsif @membership.tombstone? %>
|
@@ -12,16 +12,14 @@
|
|
12
12
|
<% end %>
|
13
13
|
<% end %>
|
14
14
|
|
15
|
-
<%
|
16
|
-
<%= t('.description') %>
|
17
|
-
<% end %>
|
15
|
+
<% box.t :description %>
|
18
16
|
|
19
|
-
<%
|
17
|
+
<% box.body do %>
|
20
18
|
<% with_attribute_settings object: @membership, strategy: :label do %>
|
21
19
|
<%= render 'shared/attributes/text', attribute: :name %>
|
22
|
-
<%= render 'shared/attributes/base' do |
|
23
|
-
<%
|
24
|
-
<%
|
20
|
+
<%= render 'shared/attributes/base' do |base| %>
|
21
|
+
<% base.heading t('.fields.role_ids.heading') %>
|
22
|
+
<% base.body do %>
|
25
23
|
<% if @membership.assignable_roles.any? %>
|
26
24
|
<%= @membership.assignable_roles.map { |role| t(".fields.role_ids.options.#{role.key}.label") }.to_sentence %>
|
27
25
|
<% else %>
|
@@ -33,7 +31,7 @@
|
|
33
31
|
<%# 🚅 super scaffolding will insert new fields above this line. %>
|
34
32
|
<% end %>
|
35
33
|
|
36
|
-
<%
|
34
|
+
<% box.actions do %>
|
37
35
|
<% if @membership.tombstone? %>
|
38
36
|
<%= link_to t('.buttons.reinvite'), [:reinvite, :account, @membership], class: first_button_primary, method: :post, data: {confirm: t('.buttons.confirmations.reinvite', membership_name: @membership.name)} if can? :edit, @membership %>
|
39
37
|
<% end %>
|
@@ -53,7 +51,6 @@
|
|
53
51
|
|
54
52
|
<%= link_to t('global.buttons.back'), [:account, @team, :memberships], class: first_button_primary %>
|
55
53
|
<% end %>
|
56
|
-
|
57
54
|
<% end %>
|
58
55
|
|
59
56
|
<%= render 'account/scaffolding/completely_concrete/tangible_things/index', tangible_things: @membership.scaffolding_completely_concrete_tangible_things, context: @membership if @membership.scaffolding_completely_concrete_tangible_things.any? %>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<% @title = t('.header') %>
|
2
2
|
|
3
|
-
<%= render 'account/shared/workflow/box' do |
|
4
|
-
<%
|
5
|
-
<%
|
3
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
4
|
+
<% box.title @title %>
|
5
|
+
<% box.body do %>
|
6
6
|
<% within_fields_namespace(:self) do %>
|
7
7
|
<%= form_for @user, url: account_onboarding_user_detail_path(@user), method: :put, html: {class: 'form'} do |f| %>
|
8
8
|
<%= render 'account/shared/forms/errors', form: f %>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<% @title = t('.header') %>
|
2
2
|
|
3
|
-
<%= render 'account/shared/workflow/box' do |
|
4
|
-
<%
|
5
|
-
<%
|
3
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
4
|
+
<% box.title @title %>
|
5
|
+
<% box.body do %>
|
6
6
|
<% within_fields_namespace(:self) do %>
|
7
7
|
<%= form_for @user, url: account_onboarding_user_email_path(@user), method: :put, html: {class: 'form'} do |f| %>
|
8
8
|
<% if @email_taken %>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<%= render 'account/shared/menu/item', {
|
2
2
|
url: main_app.polymorphic_path([:account, current_team]),
|
3
3
|
label: t('menus.main.labels.dashboard'),
|
4
|
-
} do |
|
5
|
-
<%
|
4
|
+
} do |item| %>
|
5
|
+
<% item.icon do %>
|
6
6
|
<i class="fal fa-home-lg-alt ti ti-home"></i>
|
7
7
|
<% end %>
|
8
8
|
<% end %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
<%= render 'account/shared/team', link_url: [:account, team], memberships: team.memberships.current_and_invited.first(10)
|
2
|
-
<% p.
|
1
|
+
<%= render 'account/shared/team', link_url: [:account, team], memberships: team.memberships.current_and_invited.first(10) do |p| %>
|
2
|
+
<% p.name team.name %>
|
3
3
|
<% end %>
|
@@ -1,12 +1,7 @@
|
|
1
|
-
<%= render 'account/shared/page' do |
|
2
|
-
<%
|
3
|
-
<%
|
4
|
-
|
5
|
-
|
6
|
-
<% p.content_for :description, t('.description') %>
|
7
|
-
<% p.content_for :body do %>
|
8
|
-
<%= render 'form', team: @team %>
|
9
|
-
<% end %>
|
10
|
-
<% end %>
|
1
|
+
<%= render 'account/shared/page' do |page| %>
|
2
|
+
<% page.title t('.section') %>
|
3
|
+
<% page.body.render 'account/shared/box', divider: true do |box| %>
|
4
|
+
<% box.t :description, title: '.header' %>
|
5
|
+
<% box.body.render 'form', team: @team %>
|
11
6
|
<% end %>
|
12
7
|
<% end %>
|
@@ -1,8 +1,6 @@
|
|
1
|
-
<%= render 'account/shared/page' do |
|
2
|
-
<%
|
3
|
-
<%
|
4
|
-
<%= render
|
5
|
-
<%= render @teams %>
|
6
|
-
<% end %>
|
1
|
+
<%= render 'account/shared/page' do |page| %>
|
2
|
+
<% page.title t('.section') %>
|
3
|
+
<% page.body.render 'index', creative_concepts: @creative_concepts do %>
|
4
|
+
<%= render @teams %>
|
7
5
|
<% end %>
|
8
6
|
<% end %>
|
@@ -6,9 +6,9 @@ else
|
|
6
6
|
end
|
7
7
|
%>
|
8
8
|
|
9
|
-
<%= render 'account/shared/workflow/box' do |
|
10
|
-
<%
|
11
|
-
<%
|
9
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
10
|
+
<% box.title @title %>
|
11
|
+
<% box.body do %>
|
12
12
|
<%= form_with model: @team, url: [:account, @team], local: true, class: 'form' do |form| %>
|
13
13
|
<%= render 'account/shared/notices' %>
|
14
14
|
<%= render 'account/shared/forms/errors', form: form %>
|
@@ -1,18 +1,15 @@
|
|
1
|
-
<%= render 'account/shared/page' do |
|
2
|
-
<%
|
3
|
-
<%
|
1
|
+
<%= render 'account/shared/page' do |page| %>
|
2
|
+
<% page.title t('.section') %>
|
3
|
+
<% page.body do %>
|
4
4
|
<%= form_for [:account, @user] do |form| %>
|
5
5
|
<%= render 'account/shared/forms/errors', form: form %>
|
6
6
|
<% end if @user.errors.any? %>
|
7
7
|
|
8
8
|
<div class="grid grid-cols-1 gap-y gap-x-8 lg:grid-cols-2">
|
9
9
|
<div class="xl:col-span-1 space-y-8">
|
10
|
-
<%= render 'account/shared/box', divider: true do |
|
11
|
-
<%
|
12
|
-
<%
|
13
|
-
<% p.content_for :body do %>
|
14
|
-
<%= render "account/users/form", user: @user %>
|
15
|
-
<% end %>
|
10
|
+
<%= render 'account/shared/box', divider: true do |box| %>
|
11
|
+
<% box.t title: '.profile.header', description: '.profile.description' %>
|
12
|
+
<% box.body.render "account/users/form", user: @user %>
|
16
13
|
<% end %>
|
17
14
|
|
18
15
|
<% if two_factor_authentication_enabled? %>
|
@@ -25,9 +22,9 @@
|
|
25
22
|
<div class="xl:col-span-1 space-y-8">
|
26
23
|
<%= render 'account/users/oauth' %>
|
27
24
|
|
28
|
-
<%= render 'account/shared/box', divider: true do |
|
29
|
-
<%
|
30
|
-
<%
|
25
|
+
<%= render 'account/shared/box', divider: true do |box| %>
|
26
|
+
<% box.title t('.password.header') %>
|
27
|
+
<% box.body do %>
|
31
28
|
<% within_fields_namespace(:update_self) do %>
|
32
29
|
<%= form_for [:account, @user], html: {id: dom_id(@user, :password), class: 'form'} do |form| %>
|
33
30
|
<% with_field_settings form: form do %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<% @title = t('devise.headers.change_password') %>
|
2
|
-
<%= render 'account/shared/workflow/box' do |
|
3
|
-
<%
|
4
|
-
<%
|
2
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
3
|
+
<% box.title @title %>
|
4
|
+
<% box.body do %>
|
5
5
|
<% within_fields_namespace(:update_self) do %>
|
6
6
|
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { class: 'form', method: :put }) do |f| %>
|
7
7
|
<%= f.hidden_field :reset_password_token %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<%= render 'account/shared/workflow/box' do |
|
2
|
-
<%
|
3
|
-
<%
|
1
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
2
|
+
<% box.title t('devise.titles.reset_password') %>
|
3
|
+
<% box.body do %>
|
4
4
|
<% within_fields_namespace(:sign_up) do %>
|
5
5
|
<%= form_for resource, as: resource_name, url: password_path(resource_name), html: {method: :post, class: 'form'} do |f| %>
|
6
6
|
<%= render 'account/shared/forms/errors', form: f %>
|
@@ -1,10 +1,9 @@
|
|
1
|
-
<%= render 'account/shared/box', divider: @backup_codes do |
|
2
|
-
<%
|
3
|
-
<%
|
1
|
+
<%= render 'account/shared/box', divider: @backup_codes do |box| %>
|
2
|
+
<% box.title t("users.edit.two_factor.header") %>
|
3
|
+
<% box.description t("users.edit.two_factor.description_#{@user.otp_required_for_login? ? 'enabled' : 'disabled'}") %>
|
4
4
|
<% if current_user.otp_secret %>
|
5
5
|
<% if @backup_codes %>
|
6
|
-
<%
|
7
|
-
|
6
|
+
<% box.body do %>
|
8
7
|
<%= render 'account/shared/alert' do %>
|
9
8
|
<%= t('users.edit.two_factor.warning').html_safe %>
|
10
9
|
<% end %>
|
@@ -38,7 +37,7 @@
|
|
38
37
|
<% end %>
|
39
38
|
<% end %>
|
40
39
|
<% end %>
|
41
|
-
<%
|
40
|
+
<% box.actions do %>
|
42
41
|
<div class="<%= 'hidden' if @backup_codes %> space-y">
|
43
42
|
<% if local_assigns.has_key? :verified %>
|
44
43
|
<% if verified %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<%= render 'account/shared/workflow/box' do |
|
2
|
-
<%
|
3
|
-
<%
|
1
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
2
|
+
<% box.title t('devise.headers.create_account') %>
|
3
|
+
<% box.body do %>
|
4
4
|
<% within_fields_namespace(:sign_up) do %>
|
5
5
|
<%= form_for resource, as: resource_name, url: registration_path(resource_name), html: {class: 'form'} do |f| %>
|
6
6
|
<%= render 'account/shared/notices' %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<%= render 'account/shared/workflow/box' do |
|
2
|
-
<%
|
3
|
-
<%
|
1
|
+
<%= render 'account/shared/workflow/box' do |box| %>
|
2
|
+
<% box.title t('devise.headers.sign_in') %>
|
3
|
+
<% box.body do %>
|
4
4
|
<% within_fields_namespace(:self) do %>
|
5
5
|
<%# TODO: Turbo is set to `false` for now, but we may want to only bypass Turbo for JavaScript-based requests in the future. %>
|
6
6
|
<%= form_for resource, as: resource_name, url: two_factor_authentication_enabled? ? users_pre_otp_path : session_path(resource_name), remote: two_factor_authentication_enabled?, html: {class: 'form'}, authenticity_token: true, data: {turbo: false} do |form| %>
|
@@ -32,7 +32,7 @@
|
|
32
32
|
<meta property="og:url" content="<%= request.base_url + request.path %>" />
|
33
33
|
<meta property="og:description" content="<%= description.truncate(200) %>" />
|
34
34
|
</head>
|
35
|
-
<body class="bg-
|
35
|
+
<body class="<%= BulletTrain::Themes::Light.background || "bg-gradient-to-br from-secondary-200 to-primary-400 dark:from-primary-900 dark:to-primary-600" %> text-slate-700 text-sm font-normal dark:text-slate-300">
|
36
36
|
<div class="md:p-5">
|
37
37
|
<div class="min-h-screen md:h-auto overflow-hidden md:rounded-lg flex shadow"
|
38
38
|
data-controller="mobile-menu"
|
@@ -60,19 +60,19 @@
|
|
60
60
|
|
61
61
|
<%= render 'account/shared/menu/section', title: 'Introduction' do %>
|
62
62
|
<%= render 'account/shared/menu/item', url: '/docs', label: 'Table of Contents' do |p| %>
|
63
|
-
<% p.
|
63
|
+
<% p.icon do %>
|
64
64
|
<i class="fal fa-home-lg-alt ti ti-list"></i>
|
65
65
|
<% end %>
|
66
66
|
<% end %>
|
67
67
|
|
68
68
|
<%= render 'account/shared/menu/item', url: '/docs/getting-started', label: 'Getting Started' do |p| %>
|
69
|
-
<% p.
|
69
|
+
<% p.icon do %>
|
70
70
|
<i class="fal fa-terminal ti ti-flag"></i>
|
71
71
|
<% end %>
|
72
72
|
<% end %>
|
73
73
|
|
74
74
|
<%= render 'account/shared/menu/item', url: '/docs/upgrades', label: 'Upgrades' do |p| %>
|
75
|
-
<% p.
|
75
|
+
<% p.icon do %>
|
76
76
|
<i class="fal fa-sparkles ti ti-arrow-up"></i>
|
77
77
|
<% end %>
|
78
78
|
<% end %>
|
@@ -80,37 +80,37 @@
|
|
80
80
|
|
81
81
|
<%= render 'account/shared/menu/section', title: 'General Topics' do %>
|
82
82
|
<%= render 'account/shared/menu/item', url: '/docs/modeling', label: 'Domain Modeling' do |p| %>
|
83
|
-
<% p.
|
83
|
+
<% p.icon do %>
|
84
84
|
<i class="fal fa-bolt ti ti-ruler-pencil"></i>
|
85
85
|
<% end %>
|
86
86
|
<% end %>
|
87
87
|
|
88
88
|
<%= render 'account/shared/menu/item', url: '/docs/indirection', label: 'Indirection' do |p| %>
|
89
|
-
<% p.
|
89
|
+
<% p.icon do %>
|
90
90
|
<i class="fal fa-bolt ti ti-direction"></i>
|
91
91
|
<% end %>
|
92
92
|
<% end %>
|
93
93
|
|
94
94
|
<%= render 'account/shared/menu/item', url: '/docs/overriding', label: 'Overriding' do |p| %>
|
95
|
-
<% p.
|
95
|
+
<% p.icon do %>
|
96
96
|
<i class="fal fa-bolt ti ti-spray"></i>
|
97
97
|
<% end %>
|
98
98
|
<% end %>
|
99
99
|
|
100
100
|
<%= render 'account/shared/menu/item', url: '/docs/tunneling', label: 'Tunneling' do |p| %>
|
101
|
-
<% p.
|
101
|
+
<% p.icon do %>
|
102
102
|
<i class="fal fa-bolt ti ti-bolt"></i>
|
103
103
|
<% end %>
|
104
104
|
<% end %>
|
105
105
|
|
106
106
|
<%= render 'account/shared/menu/item', url: '/docs/javascript', label: 'JavaScript' do |p| %>
|
107
|
-
<% p.
|
107
|
+
<% p.icon do %>
|
108
108
|
<i class="fa-brands fa-js ti ti-pulse"></i>
|
109
109
|
<% end %>
|
110
110
|
<% end %>
|
111
111
|
|
112
112
|
<%= render 'account/shared/menu/item', url: '/docs/i18n', label: 'Internationalzation' do |p| %>
|
113
|
-
<% p.
|
113
|
+
<% p.icon do %>
|
114
114
|
<i class="fa-brands fa-js ti ti-world"></i>
|
115
115
|
<% end %>
|
116
116
|
<% end %>
|
@@ -118,37 +118,37 @@
|
|
118
118
|
|
119
119
|
<%= render 'account/shared/menu/section', title: 'Developer Tools' do %>
|
120
120
|
<%= render 'account/shared/menu/item', url: '/docs/super-scaffolding', label: 'Super Scaffolding' do |p| %>
|
121
|
-
<% p.
|
121
|
+
<% p.icon do %>
|
122
122
|
<i class="fal fa-magic ti ti-wand"></i>
|
123
123
|
<% end %>
|
124
124
|
<% end %>
|
125
125
|
|
126
126
|
<%= render 'account/shared/menu/item', url: '/docs/action-models', label: 'Action Models' do |p| %>
|
127
|
-
<% p.
|
127
|
+
<% p.icon do %>
|
128
128
|
<i class="fal fa-bars-progress ti ti-target"></i>
|
129
129
|
<% end %>
|
130
130
|
<% end %>
|
131
131
|
|
132
132
|
<%= render 'account/shared/menu/item', url: '/docs/seeds', label: 'Database Seeds' do |p| %>
|
133
|
-
<% p.
|
133
|
+
<% p.icon do %>
|
134
134
|
<i class="fal fa-seedling ti ti-server"></i>
|
135
135
|
<% end %>
|
136
136
|
<% end %>
|
137
137
|
|
138
138
|
<%= render 'account/shared/menu/item', url: '/docs/testing', label: 'Test Suite' do |p| %>
|
139
|
-
<% p.
|
139
|
+
<% p.icon do %>
|
140
140
|
<i class="fal fa-check ti ti-check"></i>
|
141
141
|
<% end %>
|
142
142
|
<% end %>
|
143
143
|
|
144
144
|
<%= render 'account/shared/menu/item', url: 'https://github.com/bullet-train-co/magic_test', label: 'Magic Test' do |p| %>
|
145
|
-
<% p.
|
145
|
+
<% p.icon do %>
|
146
146
|
<i class="fal fa-check ti ti-video-camera"></i>
|
147
147
|
<% end %>
|
148
148
|
<% end %>
|
149
149
|
|
150
150
|
<%= render 'account/shared/menu/item', url: '/docs/application-options', label: 'Application Options' do |p| %>
|
151
|
-
<% p.
|
151
|
+
<% p.icon do %>
|
152
152
|
<i class="fal fa-gear ti ti-settings"></i>
|
153
153
|
<% end %>
|
154
154
|
<% end %>
|
@@ -156,31 +156,31 @@
|
|
156
156
|
|
157
157
|
<%= render 'account/shared/menu/section', title: 'Accounts & Teams' do %>
|
158
158
|
<%= render 'account/shared/menu/item', url: '/docs/authentication', label: 'Authentication' do |p| %>
|
159
|
-
<% p.
|
159
|
+
<% p.icon do %>
|
160
160
|
<i class="fal fa-fingerprint ti ti-id-badge"></i>
|
161
161
|
<% end %>
|
162
162
|
<% end %>
|
163
163
|
|
164
164
|
<%= render 'account/shared/menu/item', url: '/docs/teams', label: 'Teams' do |p| %>
|
165
|
-
<% p.
|
165
|
+
<% p.icon do %>
|
166
166
|
<i class="fal fa-users ti ti-user"></i>
|
167
167
|
<% end %>
|
168
168
|
<% end %>
|
169
169
|
|
170
170
|
<%= render 'account/shared/menu/item', url: '/docs/permissions', label: 'Roles & Permissions' do |p| %>
|
171
|
-
<% p.
|
171
|
+
<% p.icon do %>
|
172
172
|
<i class="fal fa-lock-alt ti ti-lock"></i>
|
173
173
|
<% end %>
|
174
174
|
<% end %>
|
175
175
|
|
176
176
|
<%= render 'account/shared/menu/item', url: '/docs/onboarding', label: 'Onboarding' do |p| %>
|
177
|
-
<% p.
|
177
|
+
<% p.icon do %>
|
178
178
|
<i class="fal fa-snowboarding ti ti-direction"></i>
|
179
179
|
<% end %>
|
180
180
|
<% end %>
|
181
181
|
|
182
182
|
<%= render 'account/shared/menu/item', url: '/docs/namespacing', label: 'Namespacing' do |p| %>
|
183
|
-
<% p.
|
183
|
+
<% p.icon do %>
|
184
184
|
<i class="fal fa-object-group ti ti-widgetized"></i>
|
185
185
|
<% end %>
|
186
186
|
<% end %>
|
@@ -188,19 +188,19 @@
|
|
188
188
|
|
189
189
|
<%= render 'account/shared/menu/section', title: 'User Interface' do %>
|
190
190
|
<%= render 'account/shared/menu/item', url: '/docs/field-partials', label: 'Field Partials' do |p| %>
|
191
|
-
<% p.
|
191
|
+
<% p.icon do %>
|
192
192
|
<i class="fal fa-i-cursor ti ti-text"></i>
|
193
193
|
<% end %>
|
194
194
|
<% end %>
|
195
195
|
|
196
196
|
<%= render 'account/shared/menu/item', url: '/docs/themes', label: 'Themes' do |p| %>
|
197
|
-
<% p.
|
197
|
+
<% p.icon do %>
|
198
198
|
<i class="fal fa-swatchbook ti ti-palette"></i>
|
199
199
|
<% end %>
|
200
200
|
<% end %>
|
201
201
|
|
202
202
|
<%= render 'account/shared/menu/item', url: 'https://github.com/bullet-train-co/nice_partials', label: 'Nice Partials' do |p| %>
|
203
|
-
<% p.
|
203
|
+
<% p.icon do %>
|
204
204
|
<i class="fal fa-swatchbook ti ti-widget"></i>
|
205
205
|
<% end %>
|
206
206
|
<% end %>
|
@@ -208,7 +208,7 @@
|
|
208
208
|
|
209
209
|
<%= render 'account/shared/menu/section', title: 'Billing' do %>
|
210
210
|
<%= render 'account/shared/menu/item', url: '/docs/billing/stripe', label: 'Stripe' do |p| %>
|
211
|
-
<% p.
|
211
|
+
<% p.icon do %>
|
212
212
|
<i class="fab fa-stripe-s ti ti-money"></i>
|
213
213
|
<% end %>
|
214
214
|
<% end %>
|
@@ -216,31 +216,31 @@
|
|
216
216
|
|
217
217
|
<%= render 'account/shared/menu/section', title: 'Integration' do %>
|
218
218
|
<%= render 'account/shared/menu/item', url: '/docs/api', label: 'REST API' do |p| %>
|
219
|
-
<% p.
|
219
|
+
<% p.icon do %>
|
220
220
|
<i class="fal fa-brackets-curly ti ti-settings"></i>
|
221
221
|
<% end %>
|
222
222
|
<% end %>
|
223
223
|
|
224
224
|
<%= render 'account/shared/menu/item', url: '/docs/zapier', label: 'Zapier' do |p| %>
|
225
|
-
<% p.
|
225
|
+
<% p.icon do %>
|
226
226
|
<i class="fal fa-bolt ti ti-bolt"></i>
|
227
227
|
<% end %>
|
228
228
|
<% end %>
|
229
229
|
|
230
230
|
<%= render 'account/shared/menu/item', url: '/docs/oauth', label: 'OAuth Providers' do |p| %>
|
231
|
-
<% p.
|
231
|
+
<% p.icon do %>
|
232
232
|
<i class="fal fa-at ti ti-reload"></i>
|
233
233
|
<% end %>
|
234
234
|
<% end %>
|
235
235
|
|
236
236
|
<%= render 'account/shared/menu/item', url: '/docs/webhooks/outgoing', label: 'Outgoing Webhooks' do |p| %>
|
237
|
-
<% p.
|
237
|
+
<% p.icon do %>
|
238
238
|
<i class="fal fa-outlet ti ti-pulse"></i>
|
239
239
|
<% end %>
|
240
240
|
<% end %>
|
241
241
|
|
242
242
|
<%= render 'account/shared/menu/item', url: '/docs/webhooks/incoming', label: 'Incoming Webhooks' do |p| %>
|
243
|
-
<% p.
|
243
|
+
<% p.icon do %>
|
244
244
|
<i class="fal fa-plug ti ti-plug"></i>
|
245
245
|
<% end %>
|
246
246
|
<% end %>
|
@@ -248,7 +248,7 @@
|
|
248
248
|
|
249
249
|
<%= render 'account/shared/menu/section', title: 'Internationalization' do %>
|
250
250
|
<%= render 'account/shared/menu/item', url: '/docs/i18n', label: 'Translations' do |p| %>
|
251
|
-
<% p.
|
251
|
+
<% p.icon do %>
|
252
252
|
<i class="fal fa-language ti ti-world"></i>
|
253
253
|
<% end %>
|
254
254
|
<% end %>
|
@@ -256,7 +256,7 @@
|
|
256
256
|
|
257
257
|
<%= render 'account/shared/menu/section', title: 'Add-Ons' do %>
|
258
258
|
<%= render 'account/shared/menu/item', url: '/docs/font-awesome-pro', label: 'Font Awesome Pro' do |p| %>
|
259
|
-
<% p.
|
259
|
+
<% p.icon do %>
|
260
260
|
<i class="fal fa-flag ti ti-flag"></i>
|
261
261
|
<% end %>
|
262
262
|
<% end %>
|
@@ -264,13 +264,13 @@
|
|
264
264
|
|
265
265
|
<%= render 'account/shared/menu/section', title: 'Deployment' do %>
|
266
266
|
<%= render 'account/shared/menu/item', url: '/docs/heroku', label: 'Heroku' do |p| %>
|
267
|
-
<% p.
|
267
|
+
<% p.icon do %>
|
268
268
|
<i class="fal fa-cloud ti ti-cloud-up"></i>
|
269
269
|
<% end %>
|
270
270
|
<% end %>
|
271
271
|
|
272
272
|
<%= render 'account/shared/menu/item', url: '/docs/desktop', label: 'Desktop Applications' do |p| %>
|
273
|
-
<% p.
|
273
|
+
<% p.icon do %>
|
274
274
|
<i class="fal fa-window-restore ti ti-desktop"></i>
|
275
275
|
<% end %>
|
276
276
|
<% end %>
|
@@ -296,7 +296,7 @@
|
|
296
296
|
|
297
297
|
class="fixed inset-0" aria-hidden="true"
|
298
298
|
>
|
299
|
-
<div class="absolute inset-0 bg-
|
299
|
+
<div class="absolute inset-0 bg-gradient-to-br from-secondary-200 to-primary-400 opacity-75"></div>
|
300
300
|
</button>
|
301
301
|
<div
|
302
302
|
data-mobile-menu-target="revealable"
|
@@ -308,7 +308,7 @@
|
|
308
308
|
data-transition-leave-start="translate-x-0"
|
309
309
|
data-transition-leave-end="-translate-x-full"
|
310
310
|
|
311
|
-
class="relative flex-1 flex flex-col max-w-xs w-full pb-4 bg-
|
311
|
+
class="relative flex-1 flex flex-col max-w-xs w-full pb-4 bg-gradient-to-br from-primary-900 to-primary-600 shadow-xl"
|
312
312
|
>
|
313
313
|
<%= menu %>
|
314
314
|
</div>
|
data/lib/bullet_train/version.rb
CHANGED
@@ -109,14 +109,17 @@ namespace :bullet_train do
|
|
109
109
|
flags_with_values.each do |process|
|
110
110
|
case process[:flag]
|
111
111
|
when "--help"
|
112
|
-
puts "
|
113
|
-
puts "bin/hack
|
114
|
-
puts "bin/hack --
|
115
|
-
puts "bin/hack --
|
116
|
-
puts "bin/hack --
|
112
|
+
puts ""
|
113
|
+
puts "bin/hack: " + "Clone bullet_train-core and link up gems (will only link up gems if already cloned).".blue
|
114
|
+
puts "bin/hack --link: " + "Link all of your Bullet Train gems to `local/bullet_train-core`.".blue
|
115
|
+
puts "bin/hack --link (version-number): " + "Link all of your Bullet Train gems to the version number passed.".blue
|
116
|
+
puts "bin/hack --reset: " + "Resets all of your gems to their original definition.".blue
|
117
|
+
puts "bin/hack --watch-js: " + "Watches for any changes in JavaScript files gems that have an npm package.".blue
|
118
|
+
puts "bin/hack --clean-js: " + "Resets all of your npm packages from `local/bullet_train-core` to their original definition.".blue
|
117
119
|
exit
|
118
120
|
when "--link", "--reset"
|
119
|
-
|
121
|
+
version = process[:values].pop
|
122
|
+
set_core_gems(process[:flag], version, framework_packages)
|
120
123
|
stream "bundle install"
|
121
124
|
when "--watch-js", "--clean-js"
|
122
125
|
package_name = process[:values].pop
|
@@ -185,7 +188,7 @@ namespace :bullet_train do
|
|
185
188
|
|
186
189
|
# Link all of the local gems to the current Gemfile.
|
187
190
|
puts "Now we'll try to link up the Bullet Train core repositories in the `Gemfile`.".blue
|
188
|
-
set_core_gems("--link", framework_packages)
|
191
|
+
set_core_gems("--link", nil, framework_packages)
|
189
192
|
|
190
193
|
puts ""
|
191
194
|
puts "Now we'll run `bundle install`.".blue
|
@@ -215,7 +218,7 @@ namespace :bullet_train do
|
|
215
218
|
end
|
216
219
|
|
217
220
|
# Pass "--link" or "--reset" as a flag to set the gems.
|
218
|
-
def set_core_gems(flag, framework_packages)
|
221
|
+
def set_core_gems(flag, version, framework_packages)
|
219
222
|
packages = framework_packages.keys
|
220
223
|
gemfile_lines = File.readlines("./Gemfile")
|
221
224
|
|
@@ -231,15 +234,20 @@ namespace :bullet_train do
|
|
231
234
|
if flag == "--link"
|
232
235
|
if `cat Gemfile | grep "gem \\\"#{package}\\\", path: \\\"local/bullet_train-core/#{package}\\\""`.chomp.present?
|
233
236
|
puts "#{package} is already linked to a checked out copy in `local` in the `Gemfile`.".green
|
234
|
-
|
237
|
+
# We can update this later to match a regular expression at the end
|
238
|
+
# (git: "...", require: "...", etc.), but this will do for now.
|
239
|
+
elsif `cat Gemfile | grep "gem \\\"#{package}\\\", path:"`.chomp.present?
|
235
240
|
puts "#{package} already has some sort of alternative source configured in the `Gemfile`.".yellow
|
236
241
|
puts "We can't do anything with this. Sorry! We'll proceed, but you have to link this package yourself.".red
|
237
242
|
elsif `cat Gemfile | grep "gem \\\"#{package}\\\""`.chomp.present?
|
238
243
|
puts "#{package} is directly present in the `Gemfile`, so we'll update that line.".green
|
239
|
-
line.gsub
|
244
|
+
line = version.present? ? "#{line.chomp}, \"#{version}\"\n" : line.gsub(original_path, local_path)
|
240
245
|
end
|
241
246
|
elsif flag == "--reset"
|
242
|
-
line.
|
247
|
+
if line.match?(/bullet_train/)
|
248
|
+
line.gsub!(local_path, original_path) # Reset local path
|
249
|
+
line.gsub!(/, "[0-9|.]*"$/, "") # Reset specific version
|
250
|
+
end
|
243
251
|
puts "Resetting '#{package}' package in the Gemfile...".blue
|
244
252
|
end
|
245
253
|
end
|
@@ -250,7 +258,11 @@ namespace :bullet_train do
|
|
250
258
|
if flag == "--link"
|
251
259
|
unless match_found
|
252
260
|
puts "Could not find #{package}. Adding to the end of the Gemfile.".blue
|
253
|
-
new_lines <<
|
261
|
+
new_lines << if version
|
262
|
+
"#{original_path.chomp}, \"#{version}\"\n"
|
263
|
+
else
|
264
|
+
"#{local_path}\n"
|
265
|
+
end
|
254
266
|
end
|
255
267
|
elsif flag == "--reset"
|
256
268
|
gem_regexp = /bullet_train-[a-z|A-Z_-]+/
|
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.
|
4
|
+
version: 1.2.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Culver
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: standard
|
@@ -296,14 +296,14 @@ dependencies:
|
|
296
296
|
requirements:
|
297
297
|
- - "~>"
|
298
298
|
- !ruby/object:Gem::Version
|
299
|
-
version: '0.
|
299
|
+
version: '0.9'
|
300
300
|
type: :runtime
|
301
301
|
prerelease: false
|
302
302
|
version_requirements: !ruby/object:Gem::Requirement
|
303
303
|
requirements:
|
304
304
|
- - "~>"
|
305
305
|
- !ruby/object:Gem::Version
|
306
|
-
version: '0.
|
306
|
+
version: '0.9'
|
307
307
|
- !ruby/object:Gem::Dependency
|
308
308
|
name: showcase-rails
|
309
309
|
requirement: !ruby/object:Gem::Requirement
|