mirror of
https://github.com/jbranchaud/til
synced 2026-01-21 16:08:03 +00:00
Compare commits
2 Commits
ef9f88f3c8
...
ddf1c51fd9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ddf1c51fd9 | ||
|
|
60020d6e0e |
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1610 TILs and counting..._
|
_1612 TILs and counting..._
|
||||||
|
|
||||||
See some of the other learning resources I work on:
|
See some of the other learning resources I work on:
|
||||||
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
||||||
@@ -692,6 +692,7 @@ If you've learned something here, support my efforts writing daily TILs by
|
|||||||
### Mise
|
### Mise
|
||||||
|
|
||||||
- [List The Files Being Loaded By Mise](mise/list-the-files-being-loaded-by-mise.md)
|
- [List The Files Being Loaded By Mise](mise/list-the-files-being-loaded-by-mise.md)
|
||||||
|
- [Preserve Color Output For Task Command](mise/preserve-color-output-for-task-command.md)
|
||||||
- [Read Existing Dot Env File Into Env Vars](mise/read-existing-dot-env-file-into-env-vars.md)
|
- [Read Existing Dot Env File Into Env Vars](mise/read-existing-dot-env-file-into-env-vars.md)
|
||||||
|
|
||||||
### MongoDB
|
### MongoDB
|
||||||
@@ -1021,6 +1022,7 @@ If you've learned something here, support my efforts writing daily TILs by
|
|||||||
- [Ensure A Rake Task Cannot Write Data](rails/ensure-a-rake-task-cannot-write-data.md)
|
- [Ensure A Rake Task Cannot Write Data](rails/ensure-a-rake-task-cannot-write-data.md)
|
||||||
- [Ensure Migrations Use The Latest Schema](rails/ensure-migrations-use-the-latest-schema.md)
|
- [Ensure Migrations Use The Latest Schema](rails/ensure-migrations-use-the-latest-schema.md)
|
||||||
- [Ensure Record Saved With after_commit Callback](rails/ensure-record-saved-with-after-commit-callback.md)
|
- [Ensure Record Saved With after_commit Callback](rails/ensure-record-saved-with-after-commit-callback.md)
|
||||||
|
- [Filter ActiveStorage Blobs To Only Images](rails/filter-active-storage-blobs-to-only-images.md)
|
||||||
- [Find Or Create A Record With FactoryBot](rails/find-or-create-a-record-with-factory-bot.md)
|
- [Find Or Create A Record With FactoryBot](rails/find-or-create-a-record-with-factory-bot.md)
|
||||||
- [Find Records With Multiple Associated Records](rails/find-records-with-multiple-associated-records.md)
|
- [Find Records With Multiple Associated Records](rails/find-records-with-multiple-associated-records.md)
|
||||||
- [Force All Users To Sign Out](rails/force-all-users-to-sign-out.md)
|
- [Force All Users To Sign Out](rails/force-all-users-to-sign-out.md)
|
||||||
|
|||||||
45
mise/preserve-color-output-for-task-command.md
Normal file
45
mise/preserve-color-output-for-task-command.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Preserve Color Output For Task Command
|
||||||
|
|
||||||
|
I decided to wrap a couple test running commands for a project into a single
|
||||||
|
`test:all` mise task. It looked something like this:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[tasks."test:all"]
|
||||||
|
run = """
|
||||||
|
bundle exec rspec
|
||||||
|
yarn test run
|
||||||
|
"""
|
||||||
|
description = "Run all tests (RSpec and Vitest)"
|
||||||
|
depends = ["bundle-install", "node-install"]
|
||||||
|
```
|
||||||
|
|
||||||
|
I can run this with `mise run test:all` and it works. However, there is a
|
||||||
|
glaring issue that immediately juts out. All of the test runner output is
|
||||||
|
uncolored text. I'm used to and strongly prefer greens (passes), reds (fails),
|
||||||
|
and yellows (skips) of test runner output.
|
||||||
|
|
||||||
|
The test runners lose the text coloring when run through `mise` because they
|
||||||
|
believe they are not running in _interactive_ mode.
|
||||||
|
|
||||||
|
The [`expect`](https://linux.die.net/man/1/expect) tools (`brew install
|
||||||
|
expect`) install with another binary called
|
||||||
|
[`unbuffer`](https://linux.die.net/man/1/unbuffer). `unbuffer` can coerce a
|
||||||
|
command to run in interactive mode. Prepending these test runner commands with
|
||||||
|
`unbuffer` will preserve the colors as the results are output to the terminal.
|
||||||
|
|
||||||
|
Here is the update `test:all` task:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[tasks."test:all"]
|
||||||
|
run = """
|
||||||
|
unbuffer bundle exec rspec
|
||||||
|
unbuffer yarn test run
|
||||||
|
"""
|
||||||
|
description = "Run all tests (RSpec and Vitest)"
|
||||||
|
depends = ["bundle-install", "node-install"]
|
||||||
|
```
|
||||||
|
|
||||||
|
For some commands, it seems able to stream out (rather than _buffer_) the
|
||||||
|
results (e.g. with `vitest`). Whereas with `rspec`, the test suite runs to
|
||||||
|
completion and is then output to the terminal. I'm still investigating
|
||||||
|
streaming the `rspec` results.
|
||||||
30
rails/filter-active-storage-blobs-to-only-images.md
Normal file
30
rails/filter-active-storage-blobs-to-only-images.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Filter ActiveStorage Blobs To Only Images
|
||||||
|
|
||||||
|
If your Rails app is using `ActiveStorage` for both images and ActionMailbox
|
||||||
|
emails, then you're going to have a mix of both in the `active_storage_blobs`
|
||||||
|
table.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
> select id, filename, content_type from active_storage_blobs limit 2;
|
||||||
|
|
||||||
|
| id | filename | content_type |
|
||||||
|
|----|--------------------|----------------|
|
||||||
|
| 1 | shirt-brothers.jpg | image/jpeg |
|
||||||
|
| 2 | message.eml | message/rfc822 |
|
||||||
|
```
|
||||||
|
|
||||||
|
In that case, you are going to want to make sure that any part of your system
|
||||||
|
that only cares to deal with images filters down to only blobs where the
|
||||||
|
`content_type` is one that you care about.
|
||||||
|
|
||||||
|
I expect that there might be a couple different image `content_type` values
|
||||||
|
that my system handles, so I filter my `active_storage_blobs` like so:
|
||||||
|
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
@images =
|
||||||
|
ActiveStorage::Blob
|
||||||
|
.where(content_type: %w[image/jpeg image/png image/gif image/webp])
|
||||||
|
.order(created_at: :desc)
|
||||||
|
.first(10)
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user