Module: LazyInit

Defined in:
lib/lazy_init.rb,
lib/lazy_init/errors.rb,
lib/lazy_init/version.rb,
lib/lazy_init/lazy_value.rb,
lib/lazy_init/class_methods.rb,
lib/lazy_init/configuration.rb,
lib/lazy_init/instance_methods.rb,
lib/lazy_init/dependency_resolver.rb

Overview

Thread-safe lazy initialization patterns for Ruby

Examples:

Basic usage

class ApiClient
  extend LazyInit

  lazy_attr_reader :connection do
    HTTPClient.new(api_url)
  end
end

Class-level shared resources

class DatabaseManager
  extend LazyInit

  lazy_class_variable :connection_pool do
    ConnectionPool.new(size: 20)
  end
end

Defined Under Namespace

Modules: ClassMethods, InstanceMethods Classes: Configuration, DependencyError, DependencyResolver, Error, InvalidAttributeNameError, LazyValue, TimeoutError

Constant Summary collapse

VERSION =
'0.1.1'

Class Method Summary collapse

Class Method Details

.configurationConfiguration

Returns the global configuration instance.

Returns:



39
40
41
# File 'lib/lazy_init/configuration.rb', line 39

def self.configuration
  @configuration ||= Configuration.new
end

.configure {|Configuration| ... } ⇒ Configuration

Configures LazyInit global settings.

Examples:

Environment-specific configuration

LazyInit.configure do |config|
  config.default_timeout = 10
  config.max_lazy_once_entries = 5000
  config.lazy_once_ttl = 1.hour
end

Yields:

Returns:



54
55
56
# File 'lib/lazy_init/configuration.rb', line 54

def self.configure
  yield(configuration)
end

.extended(base) ⇒ Object

Called when LazyInit is extended by a class Adds only class methods

Parameters:

  • base (Class)

    the class extending this module



44
45
46
# File 'lib/lazy_init.rb', line 44

def self.extended(base)
  base.extend(ClassMethods)
end

.included(base) ⇒ Object

Called when LazyInit is included in a class Adds both class and instance methods

Parameters:

  • base (Class)

    the class including this module



35
36
37
38
# File 'lib/lazy_init.rb', line 35

def self.included(base)
  base.extend(ClassMethods)
  base.include(InstanceMethods)
end