1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-16 13:38:02 +00:00

Compare commits

...

3 Commits

Author SHA1 Message Date
nick-w-nick
bd54b7209e Merge 295fe153ad into 6af86bd407 2024-11-25 17:19:58 -05:00
jbranchaud
6af86bd407 Add Stack Heredocs In A Method Call as a Ruby TIL 2024-11-25 16:00:16 -06:00
nick-w-nick
295fe153ad added mention of ES6 compatibility
Hello, I've added a small blockquote below the description to indicate that this method of accessing an indefinite number of function arguments has been superseded by the use of the spread operator via rest parameters for ES6+ compatibility.
2022-01-06 11:39:04 -05:00
3 changed files with 41 additions and 1 deletions

View File

@@ -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).
_1516 TILs and counting..._
_1517 TILs and counting..._
---
@@ -1294,6 +1294,7 @@ _1516 TILs and counting..._
- [Specify How Random Array#sample Is](ruby/specify-how-random-array-sample-is.md)
- [Split A Float Into Its Integer And Decimal](ruby/split-a-float-into-its-integer-and-decimal.md)
- [Squeeze Out The Extra Space](ruby/squeeze-out-the-extra-space.md)
- [Stack Heredocs In A Method Call](ruby/stack-heredocs-in-a-method-call.md)
- [String Interpolation With Instance Variables](ruby/string-interpolation-with-instance-variables.md)
- [Summing Collections](ruby/summing-collections.md)
- [Triple Equals: The Case Equality Operator](ruby/triple-equals-the-case-equality-operator.md)

View File

@@ -5,6 +5,8 @@ an array-like object with all of the arguments to the function. Even if not
all of the arguments are referenced in the function signature, they can
still be accessed via the `arguments` object.
> For ES6+ compatibility, the `spread` operator used via [rest parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters) is preferred over the `arugments` object when accessing an abritrary number of function arguments.
```javascript
function argTest(one) {
console.log(one);

View File

@@ -0,0 +1,37 @@
# Stack Heredocs In A Method Call
When you put a heredoc directly in a method call as an argument, it is only the
opening identifier that goes in the argument list.
That looks like this:
```ruby
execute_in_transaction(<<~SQL)
update reading_statuses
set status = 'abandoned'
where started_at < (now() - '2 years'::interval)
and finished_at is null;
SQL
```
You might imagine then that we can put multiple heredocs in a method call. That
leads to [_stacked
heredocs_](https://www.visualmode.dev/ruby-operators/heredoc#stacked-heredocs).
```ruby
execute_in_transaction(<<~SQL1, <<~SQL2, <<~SQL3)
update reading_statuses
set status = 'abandoned'
where started_at < (now() - '2 years'::interval)
and finished_at is null;
SQL1
insert into activity_log (name, description)
values ('abandon_books', 'Mark unread books as abandoned');
SQL2
delete from background_jobs
where id = #{job_id}; -- better to sanitize values like this
SQL3
```
Notice we terminate the body of each heredoc with its closing identifier and
immediately begin the body of the next one.