#!/usr/bin/env ruby require "json" require "net/http" require "uri" class User attr_accessor :id, :name, :email, :active def initialize(id:, name:, email:, active: true) @id = id @name = name @email = email @active = active end def to_s "#{@name} <#{@email}>" end def active? @active end def deactivate! @active = false end end class UserRepository def initialize @users = {} end def add(user) @users[user.id] = user end def find(id) @users[id] end def find_by_email(email) @users.values.find { |u| u.email == email } end def active_users @users.values.select(&:active?) end def each(&block) @users.values.each(&block) end def to_json(*args) @users.values.map(&:to_h).to_json(*args) end end def fetch_users(url) uri = URI.parse(url) response = Net::HTTP.get_response(uri) raise "HTTP error: #{response.code}" unless response.is_a?(Net::HTTPSuccess) JSON.parse(response.body) rescue StandardError => e warn "Failed to fetch users: #{e.message}" [] end def process_items(items) items.map { |item| yield item } end repo = UserRepository.new repo.add(User.new(id: 1, name: "Alice", email: "alice@example.com")) repo.each do |user| puts user.to_s end puts "Active: #{repo.active_users.size}"