Вобщем так, сам разобрался зачем Фибры нужны - по РУССКИ говоря, скорее всего как внешние итераторы, к примеру так:
class PhotoClass
def initialize(media)
@fibs = []
@media = media
@fib = fib(media)
end
def read
@fib.resume @media
end
private
def fib(media)
Fiber.new do |media|
loop do
stop = true
(0..media.length).each do |index|
result = fiber_inner(index).resume media[index].stock_photos if media[index]
unless result.nil?
stop = false
Fiber.yield ({ :index => index, :title => { :group => media[index].title, :image => media[index].stock_photos[result].title }, :url => media[index].stock_photos[result].image.url })
end
end
Fiber.yield nil if stop
end
end
end
protected
def fiber_inner(num)
return @fibs[num] if @fibs[num]
@fibs[num] = Fiber.new do |content|
content.each_with_index do |(image),index|
Fiber.yield index
end
loop do Fiber.yield nil end
end
end
end
Используем во вьюхе:
<% loop do %>
<% image = @photo.read %>
<% break if image.nil? %>
<div class="portfolio-box cm<%= image[:index] %>-design">
<div class="portfolio-box-container work">
<img src="<%= image[:url] %>" alt="" data-at2x="<%= image[:url] %>">
<div class="portfolio-box-text">
<h3><%= image[:title][:group] %></h3>
<p>Краткое описание картинки изобра.</p>
</div>
<div class="work-bottom">
<a class="big-link-2 view-work" href="<%= image[:url]%>"><span class="icon_search"></span></a>
<a class="big-link-2" href="/complectation/index"><span class="icon_link"></span></a>
</div>
</div>
</div>
<% end %>