mirror of
https://github.com/jbranchaud/til
synced 2026-01-11 11:08:02 +00:00
Compare commits
2 Commits
fba4cb171f
...
5f0d29885b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f0d29885b | ||
|
|
66fd1e6c19 |
@@ -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).
|
||||
|
||||
_1332 TILs and counting..._
|
||||
_1334 TILs and counting..._
|
||||
|
||||
---
|
||||
|
||||
@@ -492,6 +492,7 @@ _1332 TILs and counting..._
|
||||
|
||||
### jq
|
||||
|
||||
- [Combine An Array Of Objects Into A Single Object](jq/combine-an-array-of-objects-into-a-single-object.md)
|
||||
- [Count Each Collection In A JSON Object](jq/count-each-collection-in-a-json-object.md)
|
||||
- [Count The Number Of Things In A JSON File](jq/count-the-number-of-things-in-a-json-file.md)
|
||||
- [Extract A List Of Values](jq/extract-a-list-of-values.md)
|
||||
@@ -839,6 +840,7 @@ _1332 TILs and counting..._
|
||||
- [Load Records In Batches With find_each](rails/load-records-in-batches-with-find-each.md)
|
||||
- [Log SQL Queries Executed By ActiveRecord](rails/log-sql-queries-executed-by-activerecord.md)
|
||||
- [Mark A Migration As Irreversible](rails/mark-a-migration-as-irreversible.md)
|
||||
- [Make A String Attribute Easy To Inquire About](rails/make-a-string-attribute-easy-to-inquire-about.md)
|
||||
- [Make ActionMailer Synchronous In Test](rails/make-action-mailer-synchronous-in-test.md)
|
||||
- [Make Remove Column Migration Reversible](rails/make-remove-column-migration-reversible.md)
|
||||
- [Manually Run A Migration From Rails Console](rails/manually-run-a-migration-from-rails-console.md)
|
||||
|
||||
40
jq/combine-an-array-of-objects-into-a-single-object.md
Normal file
40
jq/combine-an-array-of-objects-into-a-single-object.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Combine An Array Of Objects Into A Single Object
|
||||
|
||||
If you've spent any amount of time pulling data out of a JSON file with `jq`,
|
||||
you may have run into a result set that looks a little too spacious. It's this
|
||||
array of single key-value pair objects.
|
||||
|
||||
```bash
|
||||
$ jq '.items | map({(.slug)}: .amount})' my-data.json
|
||||
|
||||
[
|
||||
{
|
||||
"key-1": 123
|
||||
},
|
||||
{
|
||||
"key-2": 345
|
||||
},
|
||||
{
|
||||
"key-3": 456
|
||||
},
|
||||
...
|
||||
]
|
||||
```
|
||||
|
||||
When what you really wanted was a single object full of those unique key-value
|
||||
pairs.
|
||||
|
||||
That query has you 90% of the way there. The trick is to pipe that array
|
||||
through the [`add` function](https://jqlang.github.io/jq/manual/#add) which
|
||||
will combine each of those individual objects into a single object.
|
||||
|
||||
```bash
|
||||
$ jq '.items | map({(.slug)}: .amount}) | add' my-data.json
|
||||
|
||||
{
|
||||
"key-1": 123,
|
||||
"key-2": 345,
|
||||
"key-3": 456,
|
||||
...
|
||||
}
|
||||
```
|
||||
49
rails/make-a-string-attribute-easy-to-inquire-about.md
Normal file
49
rails/make-a-string-attribute-easy-to-inquire-about.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Make A String Attribute Easy to Inquire About
|
||||
|
||||
Have you ever been curious why Rails environment checks work the way they do?
|
||||
|
||||
```ruby
|
||||
> Rails.env
|
||||
#=> 'development'
|
||||
> Rails.env.development?
|
||||
#=> true
|
||||
```
|
||||
|
||||
What is powering this is
|
||||
[`ActiveSupport::StringInquirer`](https://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html).
|
||||
And since it is part of `ActiveSupport`, you can use that functionality
|
||||
elsewhere in your Rails code.
|
||||
|
||||
Let's look at an example:
|
||||
|
||||
```ruby
|
||||
class UserWithRole
|
||||
attr_reader :name, :role
|
||||
|
||||
def initialize(name, role)
|
||||
@name = name
|
||||
@role = ActiveSupport::StringInquirer.new(role)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
With that class defined, we can initialize a user and inquire about their role.
|
||||
|
||||
```ruby
|
||||
> user = UserWithRole.new('Bob', 'instructor')
|
||||
#=> <UserWithRole ...>
|
||||
> user.role.instructor?
|
||||
#=> true
|
||||
> user.role.admin?
|
||||
#=> false
|
||||
> user.role
|
||||
#=> 'instructor'
|
||||
```
|
||||
|
||||
This helper class makes it much cleaner to inquire about the role of a user.
|
||||
Notice we don't have to do a string comparison to check if they are an
|
||||
instructor, e.g.:
|
||||
|
||||
```ruby
|
||||
> user.role == 'instructor'
|
||||
```
|
||||
Reference in New Issue
Block a user