Spaces:
Paused
Paused
| global_var = "Hello, World!" | |
| # Module for mixing in common functionality | |
| module Loggable | |
| def log(message) | |
| puts "[#{Time.now}] #{message}" | |
| end | |
| end | |
| # Module with class methods | |
| module Utils | |
| class << self | |
| def generate_id | |
| SecureRandom.uuid | |
| end | |
| end | |
| end | |
| # Abstract base class | |
| class BaseProcessor | |
| include Loggable | |
| # Class instance variable | |
| @processors = [] | |
| class << self | |
| attr_reader :processors | |
| def register(processor) | |
| @processors << processor | |
| end | |
| end | |
| # Instance variables with attr accessors | |
| attr_reader :id, :created_at | |
| attr_accessor :status | |
| def initialize | |
| @id = Utils.generate_id | |
| @created_at = Time.now | |
| @status = :pending | |
| self.class.register(self) | |
| end | |
| # Abstract method | |
| def process | |
| raise NotImplementedError, "#{self.class} must implement process" | |
| end | |
| end | |
| # Custom exception class | |
| class ProcessingError < StandardError | |
| attr_reader :item | |
| def initialize(message, item) | |
| @item = item | |
| super(message) | |
| end | |
| end | |
| # Struct definition | |
| User = Struct.new(:name, :email, keyword_init: true) do | |
| def valid? | |
| name && email && email.include?('@') | |
| end | |
| end | |
| # Enum-like module using freeze | |
| module Status | |
| PENDING = 'pending'.freeze | |
| ACTIVE = 'active'.freeze | |
| COMPLETED = 'completed'.freeze | |
| FAILED = 'failed'.freeze | |
| ALL = [PENDING, ACTIVE, COMPLETED, FAILED].freeze | |
| end | |
| # Class using inheritance and mixins | |
| class DataProcessor < BaseProcessor | |
| # Constants | |
| MAX_RETRIES = 3 | |
| DEFAULT_TIMEOUT = 5 | |
| # Class variable | |
| @@instance_count = 0 | |
| def self.instance_count | |
| @@instance_count | |
| end | |
| def initialize(options = {}) | |
| super() | |
| @options = options | |
| @items = [] | |
| @@instance_count += 1 | |
| end | |
| # Method with keyword arguments and default value | |
| def add_item(item:, priority: :normal) | |
| validate_item(item) | |
| @items << [item, priority] | |
| end | |
| # Private methods | |
| private | |
| def validate_item(item) | |
| raise ArgumentError, "Invalid item" unless item.respond_to?(:valid?) | |
| raise ProcessingError.new("Invalid item", item) unless item.valid? | |
| end | |
| # Method using block | |
| def with_retry | |
| retries = 0 | |
| begin | |
| yield | |
| rescue StandardError => e | |
| retries += 1 | |
| retry if retries < MAX_RETRIES | |
| raise | |
| end | |
| end | |
| # Method using lambda | |
| def process_items | |
| sorter = ->(a, b) { a[1] <=> b[1] } | |
| @items.sort(&sorter).each do |item, _priority| | |
| process_item(item) | |
| end | |
| end | |
| protected | |
| def process_item(item) | |
| log("Processing item: #{item}") | |
| # Processing logic here | |
| end | |
| end | |
| # Singleton class | |
| require 'singleton' | |
| class Configuration | |
| include Singleton | |
| def initialize | |
| @settings = {} | |
| end | |
| def [](key) | |
| @settings[key] | |
| end | |
| def []=(key, value) | |
| @settings[key] = value | |
| end | |
| end | |
| # Example usage | |
| if __FILE__ == $PROGRAM_NAME | |
| config = Configuration.instance | |
| config[:timeout] = 30 | |
| processor = DataProcessor.new(timeout: config[:timeout]) | |
| user = User.new(name: "John Doe", email: "john@example.com") | |
| begin | |
| processor.add_item(item: user, priority: :high) | |
| processor.process | |
| rescue ProcessingError => e | |
| puts "Failed to process #{e.item}: #{e.message}" | |
| end | |
| end | |