bullet_train-themes-light 1.0.40 → 1.0.43
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/light/tailwind/dark-mode.css +1 -2
- data/app/views/themes/light/_alert.html.erb +1 -1
- data/app/views/themes/light/_box.html.erb +1 -1
- data/app/views/themes/light/_well.html.erb +24 -16
- data/app/views/themes/light/actions/_action.html.erb +6 -3
- data/app/views/themes/light/attributes/_progress_bar.html.erb +21 -0
- data/lib/bullet_train/themes/light/custom_theme_file_replacer.rb +228 -0
- data/lib/bullet_train/themes/light/file_replacer.rb +18 -0
- data/lib/bullet_train/themes/light/version.rb +1 -1
- data/lib/bullet_train/themes/light.rb +2 -0
- data/lib/tasks/bullet_train/themes/light_tasks.rake +104 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e24cdf7bac5e2d73c88336839f27af997b293562418a82d774c2d1373c359ee2
|
4
|
+
data.tar.gz: 80d310473d15a1b5b063ccf5bde34c67e0068254384239d4985d65e879f1c14f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63b0098499996cc9e4dff89ceb74493cd5b3567cbd627fdc03e2f1f270ef7673ac525694754cab6369f45ee61e8b1959dd5c70ce3c742e8a260f11b29f435d5f
|
7
|
+
data.tar.gz: eea8d7e1c9ff51fd9ea6e7124df727c916d214876346d2fa9abc5b38fd629fa07888ad8930c42e50b158c55c5190b25d5ca4f52d1d84f0e9598079a289f347fe
|
@@ -8,11 +8,10 @@
|
|
8
8
|
background-color: rgba(0, 0, 0, 0.15);
|
9
9
|
}
|
10
10
|
|
11
|
-
.bg-
|
11
|
+
.bg-light-gradient {
|
12
12
|
&:before {
|
13
13
|
background: linear-gradient(to bottom right, var(--dark-gradient-from), var(--dark-gradient-to) 100%);
|
14
14
|
}
|
15
|
-
background: linear-gradient(to bottom right, var(--dark-gradient-from), var(--dark-gradient-to) 100%);
|
16
15
|
}
|
17
16
|
|
18
17
|
/**
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<% color ||= 'yellow' %>
|
2
2
|
|
3
3
|
<div class="rounded-md bg-<%= color %>-400 border border-<%= color %>-500 py-4 px-5 mb-3">
|
4
|
-
<h3 class="text-sm text-<%= color %>-
|
4
|
+
<h3 class="text-sm text-<%= color %>-900 font-light">
|
5
5
|
<%= yield %>
|
6
6
|
</h3>
|
7
7
|
</div>
|
@@ -1,25 +1,33 @@
|
|
1
1
|
<% yield p = np %>
|
2
2
|
|
3
|
-
<div class="border border-gray-300 dark:border-opacity-10 rounded-md
|
4
|
-
<% if p.content_for?(:title) || p.content_for?(:description) %>
|
5
|
-
<div class="space-y
|
6
|
-
<% if p.content_for?
|
7
|
-
<
|
8
|
-
|
9
|
-
|
3
|
+
<div class="border border-gray-300 dark:border-opacity-10 rounded-md bg-gray-50 dark:bg-opacity-10">
|
4
|
+
<% if p.content_for?(:title) || p.content_for?(:description) || p.content_for?(:body) %>
|
5
|
+
<div class="py-4 px-5 space-y">
|
6
|
+
<% if p.content_for?(:title) || p.content_for?(:description) %>
|
7
|
+
<div class="space-y-2">
|
8
|
+
<% if p.content_for? :title %>
|
9
|
+
<h2 class="text-base font-semibold">
|
10
|
+
<%= p.content_for :title %>
|
11
|
+
</h2>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<% if p.content_for? :description %>
|
15
|
+
<p class="text-gray-400 font-light leading-normal">
|
16
|
+
<%= p.content_for :description %>
|
17
|
+
</p>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
10
20
|
<% end %>
|
11
21
|
|
12
|
-
<% if p.content_for? :
|
13
|
-
<
|
14
|
-
<%= p.content_for :
|
15
|
-
</
|
22
|
+
<% if p.content_for? :body %>
|
23
|
+
<div class="space-y">
|
24
|
+
<%= p.content_for :body %>
|
25
|
+
</div>
|
16
26
|
<% end %>
|
17
27
|
</div>
|
18
28
|
<% end %>
|
19
29
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
</div>
|
24
|
-
<% end %>
|
30
|
+
<div>
|
31
|
+
<%= p.content_for :raw_body %>
|
32
|
+
</div>
|
25
33
|
</div>
|
@@ -1,3 +1,5 @@
|
|
1
|
+
<% yield p = np %>
|
2
|
+
|
1
3
|
<div class="py-4 px-8 w-full space-y-3">
|
2
4
|
<div class="flex space-x-4">
|
3
5
|
<% if action.is_a?(Actions::TracksCreator) %>
|
@@ -13,8 +15,9 @@
|
|
13
15
|
</div>
|
14
16
|
</div>
|
15
17
|
<div class="flex-0">
|
18
|
+
<%= p.yield :actions if p.content_for? :actions %>
|
16
19
|
<% if action.is_a?(Actions::RequiresApproval) %>
|
17
|
-
<% if can?
|
20
|
+
<% if !action.approved? && can?(:approve, action) %>
|
18
21
|
<%= button_to t("#{action.class.name.pluralize.underscore}.buttons.shorthand.approve"), [:approve, :account, action], method: :post, class: 'button-secondary button-smaller' %>
|
19
22
|
<% end %>
|
20
23
|
<% end %>
|
@@ -52,8 +55,8 @@
|
|
52
55
|
</div>
|
53
56
|
|
54
57
|
<% elsif action.is_a?(Actions::HasProgress) && action.started? %>
|
55
|
-
<div class="mt-3
|
56
|
-
|
58
|
+
<div class="mt-3">
|
59
|
+
<%= render "shared/attributes/progress_bar", object: action, attribute: :performed_count, total: :target_count %>
|
57
60
|
</div>
|
58
61
|
|
59
62
|
<div class="mt-2 uppercase text-xs text-gray-400">
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% object ||= current_attributes_object %>
|
2
|
+
<% strategy ||= current_attributes_strategy || :none %>
|
3
|
+
<% url ||= nil %>
|
4
|
+
<% hide_completed ||= false %>
|
5
|
+
|
6
|
+
<% if object.send(total).present? %>
|
7
|
+
<% completion_percent = (object.send(attribute).to_f / object.send(total).to_f) * 100.0 %>
|
8
|
+
|
9
|
+
<% unless completion_percent == 100 && hide_completed %>
|
10
|
+
<%= render 'shared/attributes/attribute', object: object, attribute: "#{attribute}_over_#{total}".to_sym, strategy: strategy, url: url do %>
|
11
|
+
<% if completion_percent == 100 %>
|
12
|
+
<i class="fal fa-check ti ti-check text-green-500"></i>
|
13
|
+
<% else %>
|
14
|
+
<div class="h-4 bg-gray-100 shadow-inner rounded w-full">
|
15
|
+
<div class="h-4 <%= 'animate-pulse' unless completion_percent == 100 %> bg-primary-500 rounded" style="width: <%= completion_percent %>%"></div>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
21
|
+
|
@@ -0,0 +1,228 @@
|
|
1
|
+
module BulletTrain
|
2
|
+
module Themes
|
3
|
+
module Light
|
4
|
+
class CustomThemeFileReplacer
|
5
|
+
mattr_accessor :repo_path
|
6
|
+
|
7
|
+
include BulletTrain::Themes::Light::FileReplacer
|
8
|
+
|
9
|
+
def initialize(custom_theme)
|
10
|
+
@repo_path = "./local/bullet_train-themes-#{custom_theme}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def replace_theme(original_theme, custom_theme)
|
14
|
+
# Rename the directories
|
15
|
+
[
|
16
|
+
"/app/assets/stylesheets/bullet_train/themes/#{original_theme}/",
|
17
|
+
"/app/assets/stylesheets/#{original_theme}/",
|
18
|
+
"/app/views/themes/#{original_theme}/",
|
19
|
+
"/lib/bullet_train/themes/#{original_theme}/"
|
20
|
+
].map { |file| @repo_path + file }.each do |original_directory|
|
21
|
+
custom_directory = original_directory.gsub(/(.*)(#{original_theme})(\/$)/, '\1' + custom_theme + '\3')
|
22
|
+
FileUtils.mv(original_directory, custom_directory)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Only compare ejected files.
|
26
|
+
files_to_replace =
|
27
|
+
ejected_files_to_replace(original_theme, custom_theme).map { |file| {file_name: file, must_compare: true} } +
|
28
|
+
default_files_to_replace(original_theme).map { |file| {file_name: file, must_compare: false} }
|
29
|
+
|
30
|
+
# Replace the file contents and rename the files.
|
31
|
+
files_to_replace.each do |custom_gem_file|
|
32
|
+
# All of the files we want to compare against the fresh gem are in the main app.
|
33
|
+
main_app_file = build_main_app_file_name(original_theme, custom_theme, custom_gem_file[:file_name].gsub(@repo_path, "."))
|
34
|
+
custom_gem_file[:file_name] = adjust_directory_hierarchy(custom_gem_file[:file_name], original_theme)
|
35
|
+
|
36
|
+
# The content in the main app should replace the cloned gem files.
|
37
|
+
if custom_gem_file[:must_compare] && !BulletTrain::Themes::Light::FileReplacer.files_have_same_content?(custom_gem_file[:file_name], main_app_file)
|
38
|
+
BulletTrain::Themes::Light::FileReplacer.replace_content(old: custom_gem_file[:file_name], new: main_app_file)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Only rename file names that still have the original theme in them, i.e. - ./tailwind.config.light.js
|
42
|
+
if File.basename(custom_gem_file[:file_name]).match?(original_theme)
|
43
|
+
main_app_file = adjust_directory_hierarchy(main_app_file, custom_theme)
|
44
|
+
new_file_name = main_app_file.gsub(/^\./, @repo_path).gsub(original_theme, custom_theme)
|
45
|
+
File.rename(custom_gem_file[:file_name], new_file_name)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Change the content of specific files that contain the orignal theme's string.
|
50
|
+
# i.e. - `module Light` and `tailwind.light.config`.
|
51
|
+
constantized_original = constantize_from_snake_case(original_theme)
|
52
|
+
constantized_custom = constantize_from_snake_case(custom_theme)
|
53
|
+
files_whose_contents_need_to_be_replaced(custom_theme).each do |file|
|
54
|
+
new_lines = []
|
55
|
+
File.open(file, "r") do |f|
|
56
|
+
new_lines = f.readlines
|
57
|
+
new_lines = new_lines.map do |line|
|
58
|
+
# We want the original theme it's being edited from when creating a new theme.
|
59
|
+
# We also remove mattr_accessor in the eject task, so we need to add it back here.
|
60
|
+
if f.path == "#{@repo_path}/lib/bullet_train/themes/#{custom_theme}.rb" && line.match?("class Theme < BulletTrain::Themes::")
|
61
|
+
line = " mattr_accessor :color, default: :blue\n class Theme < BulletTrain::Themes::#{constantize_from_snake_case(original_theme)}::Theme\n"
|
62
|
+
else
|
63
|
+
# `_account.html.erb` and `_devise.html.erb` have tailwind classes that contain `light`.
|
64
|
+
# We shouldn't be replacing the classes with the custom theme string, so we skip it here.
|
65
|
+
# TODO: We should change this Regexp to check if the original theme is prefixed with `-`.
|
66
|
+
# If it is, we ignore the string if it's not prefixed with `bullet_train-themes-`,
|
67
|
+
line.gsub!(original_theme, custom_theme) unless line.match?("bg-light-gradient")
|
68
|
+
line.gsub!(constantized_original, constantized_custom)
|
69
|
+
end
|
70
|
+
line
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
File.open(file, "w") do |f|
|
75
|
+
f.puts new_lines.join
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# The contents in this specific main app file don't have the require statements which the gem
|
80
|
+
# originally has, so we add those back after moving the main app file contents to the gem.
|
81
|
+
new_lines = nil
|
82
|
+
File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}.rb", "r") do |file|
|
83
|
+
new_lines = file.readlines
|
84
|
+
require_lines =
|
85
|
+
<<~RUBY
|
86
|
+
require "bullet_train/themes/#{custom_theme}/version"
|
87
|
+
require "bullet_train/themes/#{custom_theme}/engine"
|
88
|
+
require "bullet_train/themes/#{original_theme}"
|
89
|
+
|
90
|
+
RUBY
|
91
|
+
new_lines.unshift(require_lines)
|
92
|
+
end
|
93
|
+
File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}.rb", "w") do |file|
|
94
|
+
file.puts new_lines.flatten.join
|
95
|
+
end
|
96
|
+
|
97
|
+
# Since we're generating a new gem, it should be version 1.0
|
98
|
+
File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}/version.rb", "r") do |file|
|
99
|
+
new_lines = file.readlines
|
100
|
+
new_lines = new_lines.map { |line| line.match?("VERSION") ? " VERSION = \"1.0\"\n" : line }
|
101
|
+
end
|
102
|
+
File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}/version.rb", "w") do |file|
|
103
|
+
file.puts new_lines.join
|
104
|
+
end
|
105
|
+
|
106
|
+
# Remove files and directories from the main application.
|
107
|
+
files_to_remove_from_main_app(custom_theme).each { |file| File.delete(file) }
|
108
|
+
directories_to_remove_from_main_app(custom_theme).each do |directory|
|
109
|
+
FileUtils.rm_rf(directory) unless directory.nil?
|
110
|
+
end
|
111
|
+
|
112
|
+
# Update the author and email.
|
113
|
+
# If the developer hasn't set these yet, this should simply return empty strings.
|
114
|
+
author = `git config --global user.name`.chomp
|
115
|
+
email = `git config --global user.email`.chomp
|
116
|
+
File.open("#{@repo_path}/bullet_train-themes-#{custom_theme}.gemspec", "r") do |file|
|
117
|
+
new_lines = file.readlines
|
118
|
+
new_lines = new_lines.map do |line|
|
119
|
+
if line.match?("spec.authors")
|
120
|
+
" spec.authors = [\"#{author}\"]\n"
|
121
|
+
elsif line.match?("spec.email")
|
122
|
+
" spec.email = [\"#{email}\"]\n"
|
123
|
+
else
|
124
|
+
line
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
File.open("#{@repo_path}/bullet_train-themes-#{custom_theme}.gemspec", "w") do |file|
|
129
|
+
file.puts new_lines.join
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# By the time we call this method we have already updated the new gem's directories with
|
134
|
+
# the custom theme name, but the FILE names are still the same from when they were cloned,
|
135
|
+
# so we use `original_theme` for specific file names below.
|
136
|
+
def ejected_files_to_replace(original_theme, custom_theme)
|
137
|
+
[
|
138
|
+
Dir.glob("#{@repo_path}/app/assets/stylesheets/#{custom_theme}/**/*.css"),
|
139
|
+
Dir.glob("#{@repo_path}/app/assets/stylesheets/#{custom_theme}/**/*.scss"),
|
140
|
+
Dir.glob("#{@repo_path}/app/views/themes/#{custom_theme}/**/*.html.erb"),
|
141
|
+
"/app/javascript/application.#{original_theme}.js",
|
142
|
+
"/tailwind.#{original_theme}.config.js",
|
143
|
+
"/app/lib/bullet_train/themes/#{original_theme}.rb",
|
144
|
+
# The Glob up top doesn't grab the #{original_theme}.tailwind.css file, so we set that here.
|
145
|
+
"/app/assets/stylesheets/#{original_theme}.tailwind.css",
|
146
|
+
"/tailwind.mailer.#{original_theme}.config.js"
|
147
|
+
].flatten.map { |file| file.match?(/^#{@repo_path}/) ? file : @repo_path + file }
|
148
|
+
end
|
149
|
+
|
150
|
+
# These files represent ones such as "./lib/bullet_train/themes/light.rb" which
|
151
|
+
# aren't ejected to the developer's main app, but still need to be changed.
|
152
|
+
def default_files_to_replace(original_theme)
|
153
|
+
# TODO: Add this file and the FileReplacer module once they're added to the main branch.
|
154
|
+
[
|
155
|
+
"/bullet_train-themes-#{original_theme}.gemspec",
|
156
|
+
"/app/assets/config/bullet_train_themes_#{original_theme}_manifest.js",
|
157
|
+
"/lib/tasks/bullet_train/themes/#{original_theme}_tasks.rake",
|
158
|
+
"/test/bullet_train/themes/#{original_theme}_test.rb"
|
159
|
+
].map { |file| @repo_path + file }
|
160
|
+
end
|
161
|
+
|
162
|
+
def files_to_remove_from_main_app(custom_theme)
|
163
|
+
[
|
164
|
+
Dir.glob("./app/assets/stylesheets/#{custom_theme}/**/*.css"),
|
165
|
+
Dir.glob("./app/assets/stylesheets/#{custom_theme}/**/*.scss"),
|
166
|
+
"./app/assets/stylesheets/#{custom_theme}.tailwind.css",
|
167
|
+
"./app/javascript/application.#{custom_theme}.js",
|
168
|
+
"./app/lib/bullet_train/themes/#{custom_theme}.rb",
|
169
|
+
Dir.glob("./app/views/themes/#{custom_theme}/**/*.html.erb")
|
170
|
+
].flatten
|
171
|
+
end
|
172
|
+
|
173
|
+
def files_whose_contents_need_to_be_replaced(custom_theme)
|
174
|
+
[
|
175
|
+
"/app/assets/stylesheets/#{custom_theme}.tailwind.css",
|
176
|
+
"/app/views/themes/#{custom_theme}/layouts/_account.html.erb",
|
177
|
+
"/app/views/themes/#{custom_theme}/layouts/_devise.html.erb",
|
178
|
+
"/bin/rails",
|
179
|
+
"/lib/bullet_train/themes/#{custom_theme}/engine.rb",
|
180
|
+
"/lib/bullet_train/themes/#{custom_theme}/version.rb",
|
181
|
+
"/lib/bullet_train/themes/#{custom_theme}.rb",
|
182
|
+
"/lib/tasks/bullet_train/themes/#{custom_theme}_tasks.rake",
|
183
|
+
"/test/bullet_train/themes/#{custom_theme}_test.rb",
|
184
|
+
"/test/dummy/app/views/layouts/mailer.html.erb",
|
185
|
+
"/test/dummy/config/application.rb",
|
186
|
+
"/bullet_train-themes-#{custom_theme}.gemspec",
|
187
|
+
"/Gemfile",
|
188
|
+
"/README.md"
|
189
|
+
].map { |file| @repo_path + file }
|
190
|
+
end
|
191
|
+
|
192
|
+
def directories_to_remove_from_main_app(custom_theme)
|
193
|
+
[
|
194
|
+
"./app/assets/stylesheets/#{custom_theme}/",
|
195
|
+
"./app/views/themes/#{custom_theme}/",
|
196
|
+
"./app/lib/"
|
197
|
+
].map { |directory| directory unless directory == "./app/lib/" && Dir.empty?(directory) }
|
198
|
+
end
|
199
|
+
|
200
|
+
# Since we're cloning a fresh gem, file names that contain the original
|
201
|
+
# theme stay the same, i.e. - tailwind.light.config.js. However, the names have
|
202
|
+
# already been changed in the main app when the original theme was ejected.
|
203
|
+
# Here, we build the correct string that is in the main app to compare the
|
204
|
+
# files' contents. Then later on we actually rename the new gem's file names.
|
205
|
+
def build_main_app_file_name(original_theme, custom_theme, custom_gem_file)
|
206
|
+
main_app_file = custom_gem_file
|
207
|
+
custom_gem_file_hierarchy = custom_gem_file.split("/")
|
208
|
+
if custom_gem_file_hierarchy.last.match?(original_theme)
|
209
|
+
custom_gem_file_hierarchy.last.gsub!(original_theme, custom_theme)
|
210
|
+
main_app_file = custom_gem_file_hierarchy.join("/")
|
211
|
+
end
|
212
|
+
main_app_file
|
213
|
+
end
|
214
|
+
|
215
|
+
# This addresses one specific file where the hierarchy is
|
216
|
+
# different after the file is ejected into the main application.
|
217
|
+
def adjust_directory_hierarchy(file_name, theme_name)
|
218
|
+
file_name.match?("lib/bullet_train/themes/#{theme_name}") ? file_name.gsub(/\/app/, "") : file_name
|
219
|
+
end
|
220
|
+
|
221
|
+
# i.e. - foo_bar or foo-bar to FooBar
|
222
|
+
def constantize_from_snake_case(str)
|
223
|
+
str.split(/[_|-]/).map(&:capitalize).join
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# TODO: We overwrite/edit/create files a lot in Bullet Train,
|
2
|
+
# so I feel like this and a lot of similar content could go inside its own gem.
|
3
|
+
module BulletTrain
|
4
|
+
module Themes
|
5
|
+
module Light
|
6
|
+
module FileReplacer
|
7
|
+
def self.files_have_same_content?(first_file_name, second_file_name)
|
8
|
+
File.open(first_file_name).readlines == File.open(second_file_name).readlines
|
9
|
+
end
|
10
|
+
|
11
|
+
# Replaces the old content with a brand new file.
|
12
|
+
def self.replace_content(old:, new:)
|
13
|
+
File.write(old, File.open(new).readlines.join(""))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require "bullet_train/themes/light/version"
|
2
2
|
require "bullet_train/themes/light/engine"
|
3
3
|
require "bullet_train/themes/tailwind_css"
|
4
|
+
require "bullet_train/themes/light/file_replacer"
|
5
|
+
require "bullet_train/themes/light/custom_theme_file_replacer"
|
4
6
|
|
5
7
|
module BulletTrain
|
6
8
|
module Themes
|
@@ -52,6 +52,110 @@ namespace :bullet_train do
|
|
52
52
|
|
53
53
|
puts "You must restart `bin/dev` at this point, because of the changes to `Procfile.dev` and `package.json`."
|
54
54
|
end
|
55
|
+
|
56
|
+
desc "Publish your custom theme theme as a Ruby gem."
|
57
|
+
task :release, [:theme_name] => :environment do |task, args|
|
58
|
+
puts "Preparing to release your custom theme: ".blue + args[:theme_name]
|
59
|
+
puts ""
|
60
|
+
puts "Before we make a new Ruby gem for your theme, you'll have to set up a GitHub repository first.".blue
|
61
|
+
puts "Hit <Return> and we'll open a browser to GitHub where you can create a new repository.".blue
|
62
|
+
puts "Make sure you name the repository ".blue + "bullet_train-themes-#{args[:theme_name]}"
|
63
|
+
puts ""
|
64
|
+
puts "When you're done, copy the SSH path from the new repository and return here.".blue
|
65
|
+
ask "We'll ask you to paste it to us in the next step."
|
66
|
+
`#{Gem::Platform.local.os == "linux" ? "xdg-open" : "open"} https://github.com/new`
|
67
|
+
|
68
|
+
ssh_path = ask "OK, what was the SSH path? (It should look like `git@github.com:your-account/your-new-repo.git`.)"
|
69
|
+
puts ""
|
70
|
+
puts "Great, you're all set.".blue
|
71
|
+
puts "We'll take it from here, so sit back and enjoy the ride 🚄️".blue
|
72
|
+
puts ""
|
73
|
+
puts "Creating a Ruby gem for ".blue + "#{args[:theme_name]}..."
|
74
|
+
|
75
|
+
Dir.mkdir("local") unless Dir.exist?("./local")
|
76
|
+
if Dir.exist?("./local/bullet_train-themes-#{args[:theme_name]}")
|
77
|
+
raise "You already have a repository named `bullet_train-themes-#{args[:theme_name]}` in `./local`.\n" \
|
78
|
+
"Make sure you delete it first to create an entirely new gem."
|
79
|
+
end
|
80
|
+
`git clone git@github.com:bullet-train-co/bullet_train-themes-light.git ./local/bullet_train-themes-#{args[:theme_name]}`
|
81
|
+
|
82
|
+
custom_file_replacer = BulletTrain::Themes::Light::CustomThemeFileReplacer.new(args[:theme_name])
|
83
|
+
custom_file_replacer.replace_theme("light", args[:theme_name])
|
84
|
+
|
85
|
+
work_tree_flag = "--work-tree=local/bullet_train-themes-#{args[:theme_name]}"
|
86
|
+
git_dir_flag = "--git-dir=local/bullet_train-themes-#{args[:theme_name]}/.git"
|
87
|
+
path = "./local/bullet_train-themes-#{args[:theme_name]}"
|
88
|
+
|
89
|
+
# Set up the proper remote.
|
90
|
+
`git #{work_tree_flag} #{git_dir_flag} remote set-url origin #{ssh_path}`
|
91
|
+
`git #{work_tree_flag} #{git_dir_flag} add .`
|
92
|
+
`git #{work_tree_flag} #{git_dir_flag} commit -m "Add initial files"`
|
93
|
+
|
94
|
+
# Build the gem.
|
95
|
+
`(cd #{path} && gem build bullet_train-themes-#{args[:theme_name]}.gemspec)`
|
96
|
+
`git #{work_tree_flag} #{git_dir_flag} add .`
|
97
|
+
`git #{work_tree_flag} #{git_dir_flag} commit -m "Build gem"`
|
98
|
+
|
99
|
+
# Commit the deleted files on the main application.
|
100
|
+
`git add .`
|
101
|
+
`git commit -m "Remove #{args[:theme_name]} files from application"`
|
102
|
+
|
103
|
+
# Push the gem's source code, but not the last commit in the main application.
|
104
|
+
`git #{work_tree_flag} #{git_dir_flag} push -u origin main`
|
105
|
+
|
106
|
+
puts ""
|
107
|
+
puts ""
|
108
|
+
puts "You're all set! Copy and paste the following commands to publish your gem:".blue
|
109
|
+
puts "cd ./local/bullet_train-themes-#{args[:theme_name]}"
|
110
|
+
puts "gem push bullet_train-themes-#{args[:theme_name]}-1.0.gem && cd ../../"
|
111
|
+
puts ""
|
112
|
+
puts "You may have to wait for some time until the gem can be downloaded via the Gemfile.".blue
|
113
|
+
puts "After a few minutes, run the following command in your main application:".blue
|
114
|
+
puts "bundle add bullet_train-themes-#{args[:theme_name]}"
|
115
|
+
puts ""
|
116
|
+
puts "Then you'll be ready to use your custom gem in your Bullet Train application.".blue
|
117
|
+
end
|
118
|
+
|
119
|
+
desc "Install this theme to your main application."
|
120
|
+
task :install do |rake_task|
|
121
|
+
# Grab the theme name from the rake task, bullet_train:theme:light:install
|
122
|
+
theme_name = rake_task.name.split(":")[2]
|
123
|
+
|
124
|
+
# Grabs the current theme from
|
125
|
+
# def current_theme
|
126
|
+
# :theme_name
|
127
|
+
# end
|
128
|
+
current_theme_regexp = /(^ :)(.*)/
|
129
|
+
current_theme = nil
|
130
|
+
|
131
|
+
new_lines = []
|
132
|
+
[
|
133
|
+
"./app/helpers/application_helper.rb",
|
134
|
+
"./Procfile.dev",
|
135
|
+
"./package.json"
|
136
|
+
].each do |file|
|
137
|
+
File.open(file, "r") do |f|
|
138
|
+
new_lines = f.readlines
|
139
|
+
new_lines = new_lines.map do |line|
|
140
|
+
# Make sure we get the current theme before trying to replace it in any of the files.
|
141
|
+
# We grab it from the first file in the array above.
|
142
|
+
current_theme = line.scan(current_theme_regexp).flatten.last if line.match?(current_theme_regexp)
|
143
|
+
|
144
|
+
line.gsub!(/#{current_theme}/, theme_name) unless current_theme.nil?
|
145
|
+
line
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
File.open(file, "w") do |f|
|
150
|
+
f.puts new_lines.join
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def ask(string)
|
156
|
+
puts string.blue
|
157
|
+
$stdin.gets.strip
|
158
|
+
end
|
55
159
|
end
|
56
160
|
end
|
57
161
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bullet_train-themes-light
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.43
|
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-07-
|
11
|
+
date: 2022-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: standard
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- app/views/themes/light/actions/_list.html.erb
|
102
102
|
- app/views/themes/light/attributes/_base.html.erb
|
103
103
|
- app/views/themes/light/attributes/_block.html.erb
|
104
|
+
- app/views/themes/light/attributes/_progress_bar.html.erb
|
104
105
|
- app/views/themes/light/billing/_pricing_table.html.erb
|
105
106
|
- app/views/themes/light/breadcrumbs/_actions.html.erb
|
106
107
|
- app/views/themes/light/commentary/_box.html.erb
|
@@ -123,7 +124,9 @@ files:
|
|
123
124
|
- app/views/themes/light/workflow/_box.html.erb
|
124
125
|
- config/routes.rb
|
125
126
|
- lib/bullet_train/themes/light.rb
|
127
|
+
- lib/bullet_train/themes/light/custom_theme_file_replacer.rb
|
126
128
|
- lib/bullet_train/themes/light/engine.rb
|
129
|
+
- lib/bullet_train/themes/light/file_replacer.rb
|
127
130
|
- lib/bullet_train/themes/light/version.rb
|
128
131
|
- lib/tasks/bullet_train/themes/light_tasks.rake
|
129
132
|
- tailwind.light.config.js
|