Class: Sinclair::ConfigFactory Private

Inherits:
Object
  • Object
show all
Defined in:
lib/sinclair/config_factory.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Class responsible for configuring the configuration class

Examples:

General usage

factory = Sinclair::ConfigFactory.new
factory.add_configs(:name)
factory.configure { |c| c.name 'John' }

config = factory.config

config.class.superclass       # returns Sinclair::Config
factory.config.equal?(config) # returns true
config.name                   # returns 'John'

Constant Summary collapse

CONFIG_CLASS_WARNING =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Deprecation warning message

'Config class is expected to be ConfigClass. ' \
"In future releases this will be enforced.\n" \
'see more on https://github.com/darthjee/sinclair/blob/master/WARNINGS.md#usage-of-custom-config-classes'

Instance Method Summary collapse

Constructor Details

#initialize(config_class: Class.new(Config), config_attributes: []) ⇒ ConfigFactory

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of ConfigFactory.

Parameters:

  • config_class (Class) (defaults to: Class.new(Config))

    configuration class to be used

  • config_attributes (Array<Symbol,String>) (defaults to: [])

    list of possible configurations



27
28
29
30
31
32
33
# File 'lib/sinclair/config_factory.rb', line 27

def initialize(config_class: Class.new(Config), config_attributes: [])
  @config_class = config_class
  @config_attributes = config_attributes.dup

  return if config_class.is_a?(ConfigClass)
  warn CONFIG_CLASS_WARNING
end

Instance Method Details

#add_configs(*args) ⇒ Array<Symbol>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

TODO:

remove class check once only ConfigClass are accepted

Adds possible configurations

It change the configuration class adding methods

and keeps track of those configurations so that
{ConfigBuilder} is able to set those values when invoked

Examples:

Adding configuration name

factory = Sinclair::ConfigFactory.new
config = factory.config

config.respond_to? :active
# returns false

factory.add_configs(:active)

config.respond_to? :active
# returns true

Returns:

  • (Array<Symbol>)

    all known config attributes



95
96
97
98
99
100
101
102
103
# File 'lib/sinclair/config_factory.rb', line 95

def add_configs(*args)
  builder = if config_class.is_a?(Sinclair::ConfigClass)
              config_class.add_configs(*args)
            else
              Config::MethodsBuilder.build(config_class, *args)
            end

  config_attributes.concat(builder.config_names.map(&:to_sym))
end

#childConfigFactory

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of ConfigFactory

the new instance will have the same config_attributes and for config_class a child of the current config_class

This method is called when initializing Sinclair::Configurable config_factory and the superclass is also configurable

This way, child classes from other Sinclair::Configurable classes will have a config_class that is a child from the original config_class

Returns:



154
155
156
157
158
159
# File 'lib/sinclair/config_factory.rb', line 154

def child
  self.class.new(
    config_class: Class.new(config_class),
    config_attributes: config_attributes
  )
end

#configConfig, Object

Returns current instance of config

the method returns the same instance until reset_config is called

Examples:

General usage

factory = Sinclair::ConfigFactory.new
factory.add_configs(:name)
factory.configure { |c| c.name 'John' }

config = factory.config

config.class.superclass       # returns Sinclair::Config
factory.config.equal?(config) # returns true
config.name                   # returns 'John'

Returns:

  • (Config, Object)

    the instance of given config_class. by default, this returns Class.new(Config).new

See Also:



49
50
51
# File 'lib/sinclair/config_factory.rb', line 49

def config
  @config ||= config_class.new
end

#configure {|ConfigBuilder| ... } ⇒ Object

Set the values in the config

The block given is evaluated by the Sinclair::ConfigBuilder where each method missed will be used to set a variable in the config

Examples:

Setting name on config

class MyConfig
  extend Sinclair::ConfigClass

  attr_reader :name
end

factory = Sinclair::ConfigFactory.new(
  config_class: MyConfig,
  config_attributes: [:name]
)

config = factory.config

factory.configure { name 'John' }

config.name # returns 'John'

Yields:

Returns:

  • (Object)

    the result of the block



136
137
138
# File 'lib/sinclair/config_factory.rb', line 136

def configure(&block)
  config_builder.instance_eval(&block)
end

#reset_configNilClass

Cleans the current config instance

After cleaning it, #config will generate a new instance

Examples:

factory = Sinclair::ConfigFactory.new

config = factory.config

factory.reset_config

factory.config == config # returns false

Returns:

  • (NilClass)


70
71
72
# File 'lib/sinclair/config_factory.rb', line 70

def reset_config
  @config = nil
end