Mathieu Mathieu - 1 month ago 6
Ruby Question

Factorize ruby script based on Constant Array Loop

In my Ruby on Rails 4 (ruby 2.2) app, i have inside a view:

<%= sanitize( @template.render(
'text1' => modal['text1'],
'text2' => modal['text2'],
'text3' => modal['text3'],
'text4' => modal['text4'],
'image1' => modal['image1'],
'image2' => modal['image2'],
'image3' => modal['image3']
goes on like this....
)
) %>


Where you see above 'goes on like this', it's because I woukd like to factorize this and use dirctly values coming from this constant:

MODAL_ELEMENTS = [ "text1",
"text2",
"text3",
"text4",
"image1",
"image2",
"image3",
"video1",
"video2",
"video3",
"..."
]


I want to find a way to change what's inside sanitize @template.render so that ruby loops through each of the MODAL_ELEMENTS items (text1, text2,..) and inject them like 'text1' => 'text1' => modal['text1'], 'text2' => modal['text1'] on the code above.

Today I have this but it fails:

<%= sanitize( @template.render(
MODAL_ELEMENTS.each { |element| element => modal[ element ] ) ) %>


The difficulty also is that the loop has to add each coma (",") that we see here in bold:

'text1' => modal['text1'],

'text2' => modal['text2'],

...

Answer

If it is just that string you want and that string is evaluated later then this code would do

MODAL_ELEMENTS.map{ |element| "'#{element}' => modal[ '#{element}' ]"}.join(", ")