Questions tagged [ruby-block]

37 questions
309
votes
10 answers

Blocks and yields in Ruby

I am trying to understand blocks and yield and how they work in Ruby. How is yield used? Many of the Rails applications I've looked at use yield in a weird way. Can someone explain to me or show me where to go to understand them?
Matt Elhotiby
  • 43,028
  • 85
  • 218
  • 321
138
votes
5 answers

Rails render partial with block

I'm trying to re-use an html component that i've written that provides panel styling. Something like:

Some Title

.. content goes here …
brad
  • 31,987
  • 28
  • 102
  • 155
43
votes
1 answer

Ruby: Use the return of the conditional for variable assignment and comparison

I have a method and in order to check whether it is being passed a block, I do the following: if block_given? res = yield(array[i], array[i+1]) else res = array[i] - array[i+1] end However RuboCop is giving me a warning which I don't…
noloman
  • 11,411
  • 20
  • 82
  • 129
24
votes
4 answers

Why does Array#each return an array with the same elements?

I'm learning the details of how each works in ruby, and I tried out the following line of code: p [1,2,3,4,5].each { |element| el } And the result is an array of [1,2,3,4,5] Why is the return value of each the same array? Doesn't each just provide…
Jeff Storey
  • 56,312
  • 72
  • 233
  • 406
7
votes
1 answer

How to chain a method call to a `do ... end` block in Ruby?

I'm doing the following: array_variable = collection.map do |param| some value with param end return array_variable.compact Can I call map and compact in one statement somehow, so I can return the result instantly? I'm thinking on something like…
MattSom
  • 2,097
  • 5
  • 31
  • 53
7
votes
3 answers

Ruby - What are the differences between checking if block_given? and !block.nil?

I have a ruby method that needs to check if a block was passed to it. A colleague is suggesting that simply checking if block.nil? is slightly faster in performance and works for named blocks. This is already quite annoying since he is using the…
singletony
  • 1,392
  • 1
  • 9
  • 9
6
votes
2 answers

How to check block is called using rspec

I want to check whether the block is called in my function using rspec. Below is my code: class SP def speak(options={},&block) puts "speak called" block.call() rescue ZeroDivisionError => e end end describe SP do it "testing…
ojas
  • 2,150
  • 5
  • 22
  • 37
3
votes
2 answers

Pass a block to map function

I was wondering if something like this was possible? info = arrange_info({|x| [x.name, x.number]}, info_array) def arrange_info(block, info) info.map(block).to_h end This would allow me to pass different blocks to arrange the array is…
user2320239
  • 1,021
  • 2
  • 18
  • 43
2
votes
1 answer

Ruby block as an array element for splatting in public_send

I am trying to build a generic method using meta programming where it uses manipulating methods from array and send to the object using splat, following is the working snippet: ALLOWED_DATA_TYPES = { 'Integer' => [['to_i']], 'Csv' => [['split',…
Md. Farhan Memon
  • 6,055
  • 2
  • 11
  • 36
2
votes
2 answers

Does `block_given?` render `&block` parameter optional?

I am comfortable with the following: def some_def(foo, &block) puts "block utilized below" block.call(foo) end def some_other_def(bar) puts "using yield below" yield bar puts "and back into the method" end So I have learned to…
foo
  • 195
  • 1
  • 8
2
votes
4 answers

How can I chain with_index and with_object on an enumerable in ruby?

I want to process the array ['a', 'b', 'c'] to return the string '0a1b2c' (i.e, string formed by concatenating each index with its value). I can do this: result = '' ['a', 'b', 'c'].each.with_index do |char, i| result += "#{i}#{char}" end …
Anand
  • 3,690
  • 4
  • 33
  • 64
1
vote
1 answer

Pass a method that receives args to another method that takes a block

I have some code that needs to be called directly or passed to another method that must take a block. Pseudocode: class Foo def bar if condition return method_that_needs_a_block!('string', named1:, named2:) do shared_method('a',…
ryanpback
  • 275
  • 4
  • 17
1
vote
1 answer

Optional explicit block parameter in Ruby?

As noted in the comments, the question is actually the answer. If the method gets a block, I want to use it further. But I also have a variant where the block isn’t needed. Can I do this in any way? For example: def maybe_gets_block(&blk) if blk …
user13775669
1
vote
0 answers

Unable to set the node attributes within a ruby block

I have exactly the same code as suggested in the given link by @StephenKing (https://stackoverflow.com/users/400222/stephenking) and although the command works and gives the correct return value (verified using log/print) the value is not set in the…
blueowl
  • 35
  • 6
1
vote
1 answer

Get the name of the currently if condition declaration

I was wondering if it was possible to pass as parameter the if condition statement as string or symbol. Because method name or if statement name could change and if I need it to refacto things it's better to work with a variable, here an example…
v2lrf
  • 321
  • 3
  • 8
1
2 3