bullet_train-themes-light 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd6ffe6483f8505277c3da64474b02edfc71014eea876aef3d87e1822482e0d7
|
4
|
+
data.tar.gz: c90c0d8f175fdf287d1f486d1ee29968e47fe9dafec774d65d6e20d546594486
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc610cb2c3f2d8991db5997fb394ff463468f108892b1955324c774b7ac7d2ef9f2bd92d72d0d497ce086f22e92c63c28ee6e7105069b3cc7cb9bd5817fe53a2
|
7
|
+
data.tar.gz: c081ab721a83cf2ca52d03c6b2cfe357f234ac6a53be73f43f9658ac118b36eecf2837d96dc785ef7f13a4bfcf1a4d17eac32e81826b336f74fe1d356b4b7881
|
@@ -2,75 +2,77 @@ module BulletTrain
|
|
2
2
|
module Themes
|
3
3
|
module Light
|
4
4
|
class CustomThemeFileReplacer
|
5
|
-
mattr_accessor :repo_path
|
6
|
-
|
7
5
|
include BulletTrain::Themes::Light::FileReplacer
|
8
6
|
|
9
|
-
def initialize(custom_theme)
|
10
|
-
@
|
7
|
+
def initialize(original_theme, custom_theme)
|
8
|
+
@original_theme = original_theme
|
9
|
+
@custom_theme = custom_theme
|
10
|
+
@repo_path = "./local/bullet_train-themes-#{@custom_theme}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def replace_theme
|
14
|
+
rename_cloned_files_and_directories_with_custom_theme_name
|
15
|
+
replace_cloned_file_contents_with_custom_theme_contents
|
16
|
+
transform_file_contents_with_custom_theme_name
|
17
|
+
remove_custom_theme_from_main_app
|
18
|
+
set_gem_to_v1
|
19
|
+
update_gem_author_and_email
|
11
20
|
end
|
12
21
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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)
|
22
|
+
def rename_cloned_files_and_directories_with_custom_theme_name
|
23
|
+
cloned_contents = Dir.glob("#{@repo_path}/**/*")
|
24
|
+
cloned_directories = cloned_contents.select { |repo_content| File.directory?(repo_content) && repo_content.match?(/\/#{@original_theme}$/) }
|
25
|
+
cloned_files = cloned_contents.select { |repo_content| File.file?(repo_content) && repo_content.split("/").last.match?(@original_theme) }
|
26
|
+
|
27
|
+
(cloned_directories + cloned_files).each do |original_content|
|
28
|
+
File.rename(original_content, original_content.gsub(@original_theme, @custom_theme))
|
23
29
|
end
|
30
|
+
end
|
24
31
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
#
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
-
begin
|
38
|
-
if custom_gem_file[:must_compare] && !BulletTrain::Themes::Light::FileReplacer.files_have_same_content?(custom_gem_file[:file_name], main_app_file)
|
39
|
-
BulletTrain::Themes::Light::FileReplacer.replace_content(old: custom_gem_file[:file_name], new: main_app_file)
|
40
|
-
end
|
41
|
-
rescue Errno::ENOENT => _
|
42
|
-
puts "Skipping `#{main_app_file}` because it isn't present."
|
43
|
-
end
|
32
|
+
def replace_cloned_file_contents_with_custom_theme_contents
|
33
|
+
repo_contents = Dir.glob("#{@repo_path}/**/*")
|
34
|
+
cloned_files = repo_contents.select { |repo_content| File.file?(repo_content) && repo_content.match?(@custom_theme) }
|
35
|
+
|
36
|
+
# Most files in the root of the starter repository should not replace what we cloned from the original theme gem.
|
37
|
+
(Dir.glob("#{@repo_path}/*") << "#{@repo_path}/config/routes.rb").each { |file_to_skip| cloned_files.delete(file_to_skip) }
|
38
|
+
|
39
|
+
cloned_files.each do |cloned_file|
|
40
|
+
starter_repository_file = cloned_file.gsub(@repo_path, ".")
|
44
41
|
|
45
|
-
#
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
42
|
+
# This file has a different directory structure than what is in the starter repository.
|
43
|
+
starter_repository_file.gsub!("app/", "") if cloned_file.match?("lib/bullet_train/themes/#{@custom_theme}.rb")
|
44
|
+
|
45
|
+
# Some files we have here like the gemspec don't exist in the starter repository, so we skip those.
|
46
|
+
if File.exist?(starter_repository_file)
|
47
|
+
begin
|
48
|
+
BulletTrain::Themes::Light::FileReplacer.replace_content(old: cloned_file, new: starter_repository_file)
|
49
|
+
rescue Errno::ENOENT => _
|
50
|
+
puts "Couldn't replace contents for #{cloned_file}".red
|
51
|
+
end
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
53
|
-
#
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
# This is the only file that is copied from and pasted to the starter repository directly with
|
56
|
+
# a new name when running the eject command, so we have to move it manually to the new gem.
|
57
|
+
`mv ./tailwind.#{@custom_theme}.config.js #{@repo_path}/tailwind.#{@custom_theme}.config.js`
|
58
|
+
end
|
59
|
+
|
60
|
+
def transform_file_contents_with_custom_theme_name
|
61
|
+
repo_contents = Dir.glob("#{@repo_path}/**/*")
|
62
|
+
files_to_change = repo_contents.select { |repo_content| File.file?(repo_content) }
|
63
|
+
original_theme_class_name = @original_theme.split(/[_|-]/).map(&:capitalize).join
|
64
|
+
custom_theme_class_name = @custom_theme.split(/[_|-]/).map(&:capitalize).join
|
65
|
+
new_lines = []
|
66
|
+
|
67
|
+
files_to_change.each do |file|
|
59
68
|
File.open(file, "r") do |f|
|
60
69
|
new_lines = f.readlines
|
70
|
+
next unless new_lines.join.match?(/#{@original_theme}|#{original_theme_class_name}/)
|
71
|
+
|
61
72
|
new_lines = new_lines.map do |line|
|
62
|
-
#
|
63
|
-
|
64
|
-
|
65
|
-
line = " mattr_accessor :color, default: :blue\n class Theme < BulletTrain::Themes::#{constantize_from_snake_case(original_theme)}::Theme\n"
|
66
|
-
else
|
67
|
-
# `_account.html.erb` and `_devise.html.erb` have tailwind classes that contain `light`.
|
68
|
-
# We shouldn't be replacing the classes with the custom theme string, so we skip it here.
|
69
|
-
# TODO: We should change this Regexp to check if the original theme is prefixed with `-`.
|
70
|
-
# If it is, we ignore the string if it's not prefixed with `bullet_train-themes-`,
|
71
|
-
line.gsub!(original_theme, custom_theme) unless line.match?("bg-light-gradient")
|
72
|
-
line.gsub!(constantized_original, constantized_custom)
|
73
|
-
end
|
73
|
+
# Avoid replacing Tailwind styles like `font-light` and `font-extralight`.
|
74
|
+
line.gsub!(@original_theme, @custom_theme) unless line.match?(/font-.*light/)
|
75
|
+
line.gsub!(original_theme_class_name, custom_theme_class_name)
|
74
76
|
line
|
75
77
|
end
|
76
78
|
end
|
@@ -79,45 +81,47 @@ module BulletTrain
|
|
79
81
|
f.puts new_lines.join
|
80
82
|
end
|
81
83
|
end
|
84
|
+
end
|
82
85
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
RUBY
|
95
|
-
new_lines.unshift(require_lines)
|
96
|
-
end
|
97
|
-
File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}.rb", "w") do |file|
|
98
|
-
file.puts new_lines.flatten.join
|
86
|
+
def remove_custom_theme_from_main_app
|
87
|
+
files = [
|
88
|
+
"./app/assets/stylesheets/#{@custom_theme}.tailwind.css",
|
89
|
+
Dir.glob("./app/assets/stylesheets/#{@custom_theme}/**/*.css"),
|
90
|
+
"./app/javascript/application.#{@custom_theme}.js",
|
91
|
+
"./app/lib/bullet_train/themes/#{@custom_theme}.rb",
|
92
|
+
Dir.glob("./app/views/themes/#{@custom_theme}/**/*.html.erb"),
|
93
|
+
].flatten
|
94
|
+
files.each do |file|
|
95
|
+
File.delete(file)
|
99
96
|
end
|
100
97
|
|
101
|
-
|
102
|
-
|
98
|
+
directories = [
|
99
|
+
"./app/assets/stylesheets/#{@custom_theme}/",
|
100
|
+
"./app/views/themes/#{@custom_theme}/",
|
101
|
+
"./app/lib/"
|
102
|
+
].map { |directory| directory unless directory == "./app/lib/" && Dir.empty?(directory) }
|
103
|
+
directories.compact.each { |directory| FileUtils.rm_rf(directory) }
|
104
|
+
end
|
105
|
+
|
106
|
+
def set_gem_to_v1
|
107
|
+
new_lines = []
|
108
|
+
File.open("#{@repo_path}/lib/bullet_train/themes/#{@custom_theme}/version.rb", "r") do |file|
|
103
109
|
new_lines = file.readlines
|
104
110
|
new_lines = new_lines.map { |line| line.match?("VERSION") ? " VERSION = \"1.0\"\n" : line }
|
105
111
|
end
|
106
|
-
File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}/version.rb", "w") do |file|
|
107
|
-
file.puts new_lines.join
|
108
|
-
end
|
109
112
|
|
110
|
-
#
|
111
|
-
|
112
|
-
directories_to_remove_from_main_app(custom_theme).each do |directory|
|
113
|
-
FileUtils.rm_rf(directory) unless directory.nil?
|
113
|
+
File.open("#{@repo_path}/lib/bullet_train/themes/#{@custom_theme}/version.rb", "w") do |file|
|
114
|
+
file.puts new_lines.join
|
114
115
|
end
|
116
|
+
end
|
115
117
|
|
116
|
-
|
118
|
+
def update_gem_author_and_email
|
117
119
|
# If the developer hasn't set these yet, this should simply return empty strings.
|
118
120
|
author = `git config --global user.name`.chomp
|
119
121
|
email = `git config --global user.email`.chomp
|
120
|
-
|
122
|
+
new_lines = []
|
123
|
+
|
124
|
+
File.open("#{@repo_path}/bullet_train-themes-#{@custom_theme}.gemspec", "r") do |file|
|
121
125
|
new_lines = file.readlines
|
122
126
|
new_lines = new_lines.map do |line|
|
123
127
|
if line.match?("spec.authors")
|
@@ -129,105 +133,10 @@ module BulletTrain
|
|
129
133
|
end
|
130
134
|
end
|
131
135
|
end
|
132
|
-
File.open("#{@repo_path}/bullet_train-themes-#{custom_theme}.gemspec", "w") do |file|
|
136
|
+
File.open("#{@repo_path}/bullet_train-themes-#{@custom_theme}.gemspec", "w") do |file|
|
133
137
|
file.puts new_lines.join
|
134
138
|
end
|
135
139
|
end
|
136
|
-
|
137
|
-
# By the time we call this method we have already updated the new gem's directories with
|
138
|
-
# the custom theme name, but the FILE names are still the same from when they were cloned,
|
139
|
-
# so we use `original_theme` for specific file names below.
|
140
|
-
def ejected_files_to_replace(original_theme, custom_theme)
|
141
|
-
[
|
142
|
-
Dir.glob("#{@repo_path}/app/assets/stylesheets/#{custom_theme}/**/*.css"),
|
143
|
-
Dir.glob("#{@repo_path}/app/assets/stylesheets/#{custom_theme}/**/*.scss"),
|
144
|
-
Dir.glob("#{@repo_path}/app/views/themes/#{custom_theme}/**/*.html.erb"),
|
145
|
-
"/app/javascript/application.#{original_theme}.js",
|
146
|
-
"/tailwind.#{original_theme}.config.js",
|
147
|
-
"/app/lib/bullet_train/themes/#{original_theme}.rb",
|
148
|
-
# The Glob up top doesn't grab the #{original_theme}.tailwind.css file, so we set that here.
|
149
|
-
"/app/assets/stylesheets/#{original_theme}.tailwind.css",
|
150
|
-
"/tailwind.mailer.#{original_theme}.config.js"
|
151
|
-
].flatten.map { |file| file.match?(/^#{@repo_path}/) ? file : @repo_path + file }
|
152
|
-
end
|
153
|
-
|
154
|
-
# These files represent ones such as "./lib/bullet_train/themes/light.rb" which
|
155
|
-
# aren't ejected to the developer's main app, but still need to be changed.
|
156
|
-
def default_files_to_replace(original_theme)
|
157
|
-
# TODO: Add this file and the FileReplacer module once they're added to the main branch.
|
158
|
-
[
|
159
|
-
"/bullet_train-themes-#{original_theme}.gemspec",
|
160
|
-
"/app/assets/config/bullet_train_themes_#{original_theme}_manifest.js",
|
161
|
-
"/lib/tasks/bullet_train/themes/#{original_theme}_tasks.rake",
|
162
|
-
"/test/bullet_train/themes/#{original_theme}_test.rb"
|
163
|
-
].map { |file| @repo_path + file }
|
164
|
-
end
|
165
|
-
|
166
|
-
def files_to_remove_from_main_app(custom_theme)
|
167
|
-
[
|
168
|
-
Dir.glob("./app/assets/stylesheets/#{custom_theme}/**/*.css"),
|
169
|
-
Dir.glob("./app/assets/stylesheets/#{custom_theme}/**/*.scss"),
|
170
|
-
"./app/assets/stylesheets/#{custom_theme}.tailwind.css",
|
171
|
-
"./app/javascript/application.#{custom_theme}.js",
|
172
|
-
"./app/lib/bullet_train/themes/#{custom_theme}.rb",
|
173
|
-
Dir.glob("./app/views/themes/#{custom_theme}/**/*.html.erb"),
|
174
|
-
"./tailwind.mailer.#{custom_theme}.config.js",
|
175
|
-
"./tailwind.#{custom_theme}.config.js",
|
176
|
-
].flatten
|
177
|
-
end
|
178
|
-
|
179
|
-
def files_whose_contents_need_to_be_replaced(custom_theme)
|
180
|
-
[
|
181
|
-
"/app/assets/stylesheets/#{custom_theme}.tailwind.css",
|
182
|
-
"/app/views/themes/#{custom_theme}/layouts/_account.html.erb",
|
183
|
-
"/app/views/themes/#{custom_theme}/layouts/_devise.html.erb",
|
184
|
-
"/bin/rails",
|
185
|
-
"/lib/bullet_train/themes/#{custom_theme}/engine.rb",
|
186
|
-
"/lib/bullet_train/themes/#{custom_theme}/version.rb",
|
187
|
-
"/lib/bullet_train/themes/#{custom_theme}.rb",
|
188
|
-
"/lib/tasks/bullet_train/themes/#{custom_theme}_tasks.rake",
|
189
|
-
"/test/bullet_train/themes/#{custom_theme}_test.rb",
|
190
|
-
"/test/dummy/app/views/layouts/mailer.html.erb",
|
191
|
-
"/test/dummy/config/application.rb",
|
192
|
-
"/bullet_train-themes-#{custom_theme}.gemspec",
|
193
|
-
"/Gemfile",
|
194
|
-
"/README.md"
|
195
|
-
].map { |file| @repo_path + file }
|
196
|
-
end
|
197
|
-
|
198
|
-
def directories_to_remove_from_main_app(custom_theme)
|
199
|
-
[
|
200
|
-
"./app/assets/stylesheets/#{custom_theme}/",
|
201
|
-
"./app/views/themes/#{custom_theme}/",
|
202
|
-
"./app/lib/"
|
203
|
-
].map { |directory| directory unless directory == "./app/lib/" && Dir.empty?(directory) }
|
204
|
-
end
|
205
|
-
|
206
|
-
# Since we're cloning a fresh gem, file names that contain the original
|
207
|
-
# theme stay the same, i.e. - tailwind.light.config.js. However, the names have
|
208
|
-
# already been changed in the main app when the original theme was ejected.
|
209
|
-
# Here, we build the correct string that is in the main app to compare the
|
210
|
-
# files' contents. Then later on we actually rename the new gem's file names.
|
211
|
-
def build_main_app_file_name(original_theme, custom_theme, custom_gem_file)
|
212
|
-
main_app_file = custom_gem_file
|
213
|
-
custom_gem_file_hierarchy = custom_gem_file.split("/")
|
214
|
-
if custom_gem_file_hierarchy.last.match?(original_theme)
|
215
|
-
custom_gem_file_hierarchy.last.gsub!(original_theme, custom_theme)
|
216
|
-
main_app_file = custom_gem_file_hierarchy.join("/")
|
217
|
-
end
|
218
|
-
main_app_file
|
219
|
-
end
|
220
|
-
|
221
|
-
# This addresses one specific file where the hierarchy is
|
222
|
-
# different after the file is ejected into the main application.
|
223
|
-
def adjust_directory_hierarchy(file_name, theme_name)
|
224
|
-
file_name.match?("lib/bullet_train/themes/#{theme_name}") ? file_name.gsub("/app", "") : file_name
|
225
|
-
end
|
226
|
-
|
227
|
-
# i.e. - foo_bar or foo-bar to FooBar
|
228
|
-
def constantize_from_snake_case(str)
|
229
|
-
str.split(/[_|-]/).map(&:capitalize).join
|
230
|
-
end
|
231
140
|
end
|
232
141
|
end
|
233
142
|
end
|
data/lib/tasks/application.rb
CHANGED
@@ -91,9 +91,14 @@ module BulletTrain
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def self.release_theme(original_theme_name, args)
|
94
|
+
# We only want developers publishing gems off of `bullet_train-themes-light`, so if the task looks
|
95
|
+
# something like `rake bullet_train:themes:foo:release[bar]`, we prevent them from moving any further here.
|
94
96
|
if original_theme_name != "light"
|
95
97
|
puts "You can only release new themes based off of Bullet Train's Light theme. Please eject a new theme from there, and publish your gem once you've finished making changes.".red
|
96
98
|
exit 1
|
99
|
+
elsif original_theme_name.nil?
|
100
|
+
puts "Please run the command with the name of the theme you want to release.".red
|
101
|
+
puts "For example: > rake bullet_train:themes:light:release[foo]"
|
97
102
|
end
|
98
103
|
|
99
104
|
puts "Preparing to release your custom theme: ".blue + args[:theme_name]
|
@@ -118,19 +123,28 @@ module BulletTrain
|
|
118
123
|
raise "You already have a repository named `bullet_train-themes-#{args[:theme_name]}` in `./local`.\n" \
|
119
124
|
"Make sure you delete it first to create an entirely new gem."
|
120
125
|
end
|
121
|
-
`git clone git@github.com:bullet-train-co/bullet_train-themes-light.git ./local/bullet_train-themes-#{args[:theme_name]}`
|
122
126
|
|
123
|
-
|
124
|
-
|
127
|
+
# Pull `bullet_train-themes-light` only from `bullet_train-core` into the new theme directory.
|
128
|
+
# https://www.git-scm.com/docs/git-sparse-checkout
|
129
|
+
`mkdir ./local/bullet_train-themes-#{args[:theme_name]}`
|
130
|
+
`cd ./local/bullet_train-themes-#{args[:theme_name]} && git init && git remote add bullet-train-core git@github.com:bullet-train-co/bullet_train-core.git`
|
131
|
+
`cd ./local/bullet_train-themes-#{args[:theme_name]} && git config core.sparseCheckout true && echo "bullet_train-themes-light/**/*" >> .git/info/sparse-checkout`
|
132
|
+
`cd ./local/bullet_train-themes-#{args[:theme_name]} && git pull bullet-train-core main && git remote rm bullet-train-core`
|
133
|
+
`cd ./local/bullet_train-themes-#{args[:theme_name]} && mv bullet_train-themes-light/* . && mv bullet_train-themes-light/.* .`
|
134
|
+
`cd ./local/bullet_train-themes-#{args[:theme_name]} && rmdir bullet_train-themes-light/`
|
135
|
+
`cd ./local/bullet_train-themes-#{args[:theme_name]} && git config core.sparseCheckout false`
|
136
|
+
|
137
|
+
BulletTrain::Themes::Light::CustomThemeFileReplacer.new(original_theme_name, args[:theme_name]).replace_theme
|
125
138
|
|
126
139
|
work_tree_flag = "--work-tree=local/bullet_train-themes-#{args[:theme_name]}"
|
127
140
|
git_dir_flag = "--git-dir=local/bullet_train-themes-#{args[:theme_name]}/.git"
|
128
141
|
path = "./local/bullet_train-themes-#{args[:theme_name]}"
|
129
142
|
|
130
143
|
# Set up the proper remote.
|
131
|
-
`git #{work_tree_flag} #{git_dir_flag} remote
|
144
|
+
`git #{work_tree_flag} #{git_dir_flag} remote add origin #{ssh_path}`
|
132
145
|
`git #{work_tree_flag} #{git_dir_flag} add .`
|
133
146
|
`git #{work_tree_flag} #{git_dir_flag} commit -m "Add initial files"`
|
147
|
+
`git #{work_tree_flag} #{git_dir_flag} branch -m main`
|
134
148
|
|
135
149
|
# Build the gem.
|
136
150
|
`(cd #{path} && gem build bullet_train-themes-#{args[:theme_name]}.gemspec)`
|
@@ -153,9 +167,14 @@ module BulletTrain
|
|
153
167
|
puts "You may have to wait for some time until the gem can be downloaded via the Gemfile.".blue
|
154
168
|
puts "After a few minutes, run the following command in your main application:".blue
|
155
169
|
puts "bundle add bullet_train-themes-#{args[:theme_name]}"
|
156
|
-
puts "rake bullet_train:themes:#{args[:theme_name]}:install"
|
157
170
|
puts ""
|
158
171
|
puts "Then you'll be ready to use your custom gem in your Bullet Train application.".blue
|
172
|
+
puts ""
|
173
|
+
puts "Please note that we have deleted the new theme from your main application.".blue
|
174
|
+
puts "run `git log -1` for details."
|
175
|
+
puts ""
|
176
|
+
puts "Use `rake bullet_train:themes:light:install` to revert to the original theme,".blue
|
177
|
+
puts "or run `rake bullet_train:themes:#{args[:theme_name]}:install` whenever you want to use your new theme.".blue
|
159
178
|
end
|
160
179
|
|
161
180
|
def self.install_theme(theme_name)
|
@@ -171,6 +190,8 @@ module BulletTrain
|
|
171
190
|
file.write changed
|
172
191
|
end
|
173
192
|
end
|
193
|
+
|
194
|
+
puts "Finished installing `#{theme_name}`.".blue
|
174
195
|
end
|
175
196
|
|
176
197
|
def self.clean_theme(theme_name, args)
|
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.4.
|
4
|
+
version: 1.4.1
|
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-09-
|
11
|
+
date: 2023-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: standard
|