bullet_train-themes-light 1.4.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15b257a23112f0b0ffae2175c3408b95474565503274e7f149d8d2fc185ae713
4
- data.tar.gz: c21e0b35953ba7153dd8cab5fd51663e87e60e092aecc364c5b4a81e2a318d78
3
+ metadata.gz: fd6ffe6483f8505277c3da64474b02edfc71014eea876aef3d87e1822482e0d7
4
+ data.tar.gz: c90c0d8f175fdf287d1f486d1ee29968e47fe9dafec774d65d6e20d546594486
5
5
  SHA512:
6
- metadata.gz: 4ed863ab94c33f78b784cd3088d814f50fbd546602761f6da2597edfa8561d0fc6274b8c560c22a4674d728fe10ca7a8f0c81d2b70a7b65d485b8a7407e21324
7
- data.tar.gz: c458c9610daaacadcdd7fc4ad847b9e53377a5c3415a4767b5b81af8a9c03fac098012d1514464b0bde984d244fd533a86849a3f8054988ab67d81a23cde0584
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
- @repo_path = "./local/bullet_train-themes-#{custom_theme}"
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 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)
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
- # 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
- 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
- # Only rename file names that still have the original theme in them, i.e. - ./tailwind.config.light.js
46
- if File.basename(custom_gem_file[:file_name]).match?(original_theme)
47
- main_app_file = adjust_directory_hierarchy(main_app_file, custom_theme)
48
- new_file_name = main_app_file.gsub(/^\./, @repo_path).gsub(original_theme, custom_theme)
49
- File.rename(custom_gem_file[:file_name], new_file_name)
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
- # Change the content of specific files that contain the orignal theme's string.
54
- # i.e. - `module Light` and `tailwind.light.config`.
55
- constantized_original = constantize_from_snake_case(original_theme)
56
- constantized_custom = constantize_from_snake_case(custom_theme)
57
- files_whose_contents_need_to_be_replaced(custom_theme).each do |file|
58
- new_lines = []
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
- # We want the original theme it's being edited from when creating a new theme.
63
- # We also remove mattr_accessor in the eject task, so we need to add it back here.
64
- if f.path == "#{@repo_path}/lib/bullet_train/themes/#{custom_theme}.rb" && line.match?("class Theme < BulletTrain::Themes::")
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
- # The contents in this specific main app file don't have the require statements which the gem
84
- # originally has, so we add those back after moving the main app file contents to the gem.
85
- new_lines = nil
86
- File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}.rb", "r") do |file|
87
- new_lines = file.readlines
88
- require_lines =
89
- <<~RUBY
90
- require "bullet_train/themes/#{custom_theme}/version"
91
- require "bullet_train/themes/#{custom_theme}/engine"
92
- require "bullet_train/themes/#{original_theme}"
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
- # Since we're generating a new gem, it should be version 1.0
102
- File.open("#{@repo_path}/lib/bullet_train/themes/#{custom_theme}/version.rb", "r") do |file|
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
- # Remove files and directories from the main application.
111
- files_to_remove_from_main_app(custom_theme).each { |file| File.delete(file) }
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
- # Update the author and email.
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
- File.open("#{@repo_path}/bullet_train-themes-#{custom_theme}.gemspec", "r") do |file|
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
@@ -1,7 +1,7 @@
1
1
  module BulletTrain
2
2
  module Themes
3
3
  module Light
4
- VERSION = "1.4.0"
4
+ VERSION = "1.4.1"
5
5
  end
6
6
  end
7
7
  end
@@ -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
- custom_file_replacer = BulletTrain::Themes::Light::CustomThemeFileReplacer.new(args[:theme_name])
124
- custom_file_replacer.replace_theme("light", args[:theme_name])
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 set-url origin #{ssh_path}`
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.0
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-08 00:00:00.000000000 Z
11
+ date: 2023-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard