Running with patch
$ QUEUE_ADAPTER=async ./fix-preview-image-race-condition.rb
Yields
Creating a post and uploading a video
| class TailwindClassBuilder | |
| include ActionView::Helpers::TagHelper | |
| def button_classes(options) | |
| button_type = options.delete(:button_type) { :button } | |
| class_names( | |
| # general classes | |
| "mt-4 px-1 sm:px-3 py-sm sm:py-1 font-semibold bg-transparent border rounded", | |
| case button_type |
| # This is a stupid utility to squelch stdout output via puts (could do the same | |
| # for warn; could also override stdout entirely) | |
| # | |
| # Usage in a test, after requiring and including it: | |
| # | |
| # setup do | |
| # suppress_puts([ | |
| # /Execution context was destroyed, most likely because of a navigation/ | |
| # ]) | |
| # end |
| class ValidatesDeeply | |
| Failure = Struct.new(:model, :message) | |
| Result = Struct.new(:valid?, :failures) | |
| def validate(model, visited = Set.new) | |
| return Result.new(true) if visited.include?(model) | |
| visited.add(model) | |
| combine_results(Result.new(model.valid?, extract_failures(model)), *validate_associations(model, visited)) | |
| end |
| :root, | |
| .light { | |
| --accent: 183 64 233; | |
| --accent-bright: 183 64 233; | |
| --accent-light: 217 155 244; | |
| --bg-primary: 249 249 249; | |
| --bg-secondary: 230 230 230; | |
| --border-primary: 17 24 39; |
| const css4ColorsToLegacyRgbaPlugin = { | |
| postcssPlugin: 'these-colors-dont-run', | |
| Once (root) { | |
| root.walkDecls((decl) => { | |
| const rgbRegex = /rgb\((\d{1,3})\s+(\d{1,3})\s+(\d{1,3})\s*(?:\/\s*(\d+\.?\d*))?\)/g | |
| decl.value = decl.value.replace(rgbRegex, (match, r, g, b, a) => { | |
| if (!a || a === '1' || a === '1.0') { | |
| return `rgb(${r}, ${g}, ${b})` | |
| } else { | |
| return `rgba(${r}, ${g}, ${b}, ${a})` |
| # Leverages the BroadcastLogger introduced in Rails 7.1 to wrap the current | |
| # logger in a new logger that broadcasts to both the current logger and $stdout | |
| # | |
| # (Announcement: https://rubyonrails.org/2023/9/29/this-week-in-rails) | |
| # | |
| # If the current logger already broadcasts to $stdout, it will not be wrapped, | |
| # making it safe to call this method multiple times without knowing the current | |
| # logging "sitch". | |
| # | |
| # Usage probably looks something like this: |
Running with patch
$ QUEUE_ADAPTER=async ./fix-preview-image-race-condition.rb
Yields
Creating a post and uploading a video
TIL this script helped me figure out that
Not awesome things that happen in this case:
| class FeedsController < ApplicationController | |
| def index | |
| @posts = Post.with_visuals.order(published_at: :desc) | |
| end | |
| end |
| #!/usr/bin/env ruby | |
| begin | |
| repo = `git remote -v`.split("\n").find { |line| | |
| line.include?("github.com") | |
| }.split("\t")[1].match(/[email protected]:(.*).git/)[1] | |
| system "open https://github.com/#{repo}" | |
| rescue | |
| warn "No github remote found" |