dabroz/array_with_progress

View on GitHub
example/example.rb

Summary

Maintainability
A
0 mins
Test Coverage
require './lib/array_with_progress.rb'

class Example
  attr_accessor :name, :data, :status

  def self.generate(n)
    (1..n).map do
      example = Example.new

      names = %w{James John Robert Michael William David Richard Charles Joseph Thomas Christopher Daniel Paul Mark Donald George Kenneth Steven Edward Brian}
      surnames = %w{Smith Johnson Williams Brown Jones Miller Davis Garcia Rodriguez Wilson Martinez Anderson Taylor Thomas Hernandez Moore Martin Jackson Thompson White}

      example.name = "#{names.sample} #{surnames.sample}"
      if rand(100) > 20
        id = 'abcdefghijklmnopqrstuvwxyz0123456789'.split(//).sample(16).join
        example.data = "http://example.server/user_details/#{example.name.downcase.gsub(' ', '_')}/#{id}.json"
        example.status = %w{ok ok ok ok ok ok ok ok warning warning error}.sample.to_sym
      end
      example
    end
  end

  def to_s
    "User '#{name}'"
  end
end

Example.generate(30).each_with_progress('Reindex data for') do |user, operation|
  if user.data
    operation.expand_name('[details available]')
    sleep 0.5
    operation.expand_name("[#{user.data}]")
    sleep 1
    if user.status == :error
      operation.expand_name("[#{user.data} - HTTP 404 Not Found!]")
    elsif user.status == :warning
      operation.expand_name("[#{user.data} - version mismatch]")
    end
    user.status
  else
    :skip
  end
end