Class: Qonfig::Settings Private

Inherits:
Object
  • Object
show all
Includes:
Plugins::PrettyPrint::SettingsMixin
Defined in:
lib/qonfig/settings.rb,
lib/qonfig/plugins/pretty_print/settings.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.

Since:

  • 0.21.0

Defined Under Namespace

Modules: Builder Classes: Callbacks, KeyGuard, KeyMatcher, Lock

Constant Summary collapse

BASIC_SETTING_KEY_TRANSFORMER =

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.

Returns:

  • (Proc)

Since:

  • 0.11.0

(proc { |value| value }).freeze
BASIC_SETTING_VALUE_TRANSFORMER =

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.

Returns:

  • (Proc)

Since:

  • 0.11.0

(proc { |value| value }).freeze
DOT_NOTATION_SEPARATOR =

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.

Returns:

  • (String)

Since:

  • 0.19.0

'.'

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Plugins::PrettyPrint::SettingsMixin

#pretty_print

Constructor Details

#initialize(__mutation_callbacks__) ⇒ Settings

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 Settings.

Since:

  • 0.1.0



45
46
47
48
49
# File 'lib/qonfig/settings.rb', line 45

def initialize(__mutation_callbacks__)
  @__options__ = {}
  @__lock__ = Lock.new
  @__mutation_callbacks__ = __mutation_callbacks__
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *arguments, &block) ⇒ void

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.

This method returns an undefined value.

Parameters:

  • method_name (String, Symbol)
  • arguments (Array<Object>)
  • block (Proc)

Raises:

Since:

  • 0.1.0



271
272
273
274
275
# File 'lib/qonfig/settings.rb', line 271

def method_missing(method_name, *arguments, &block)
  super
rescue NoMethodError
  ::Kernel.raise(Qonfig::UnknownSettingError, "Setting with <#{method_name}> key doesnt exist!")
end

Instance Attribute Details

#__mutation_callbacks__Qonfig::Settings::Callbacks (readonly)

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:

Since:

  • 0.13.0



41
42
43
# File 'lib/qonfig/settings.rb', line 41

def __mutation_callbacks__
  @__mutation_callbacks__
end

#__options__Hash (readonly)

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:

  • (Hash)

Since:

  • 0.1.0



35
36
37
# File 'lib/qonfig/settings.rb', line 35

def __options__
  @__options__
end

Instance Method Details

#[](key) ⇒ Object

Parameters:

  • key (Symbol, String)

Returns:

  • (Object)

Since:

  • 0.1.0



138
139
140
141
142
143
144
145
146
# File 'lib/qonfig/settings.rb', line 138

def [](key)
  __lock__.thread_safe_access do
    begin
      __get_value__(key)
    rescue Qonfig::UnknownSettingError
      __deep_access__(*__parse_dot_notated_key__(key))
    end
  end
end

#[]=(key, value) ⇒ void

This method returns an undefined value.

Parameters:

  • key (String, Symbol)
  • value (Object)

Since:

  • 0.1.0

Version:

  • 0.21.0



155
156
157
# File 'lib/qonfig/settings.rb', line 155

def []=(key, value)
  __lock__.thread_safe_access { __assign_value__(key, value) }
end

#__append_settings__(settings) ⇒ void

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.

This method returns an undefined value.

Parameters:

Since:

  • 0.1.0



117
118
119
120
121
122
123
# File 'lib/qonfig/settings.rb', line 117

def __append_settings__(settings)
  __lock__.thread_safe_merge do
    settings.__options__.each_pair do |key, value|
      __define_setting__(key, value)
    end
  end
end

#__apply_values__(settings_map) ⇒ void

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.

This method returns an undefined value.

Parameters:

  • settings_map (Hash)

Since:

  • 0.3.0



164
165
166
# File 'lib/qonfig/settings.rb', line 164

def __apply_values__(settings_map)
  __lock__.thread_safe_access { __set_values_from_map__(settings_map) }
end

#__clear__void

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.

This method returns an undefined value.

Since:

  • 0.2.0



258
259
260
# File 'lib/qonfig/settings.rb', line 258

def __clear__
  __lock__.thread_safe_access { __clear_option_values__ }
end

#__deep_each_setting__(initial_setting_key = nil, yield_all: false, &block) {|key, value| ... } ⇒ Enumerable

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.

Parameters:

  • initial_setting_key (String, NilClass) (defaults to: nil)
  • block (Proc)
  • yield_all (Hash) (defaults to: false)

    a customizable set of options

Options Hash (yield_all:):

  • (Boolean)

Yields:

  • (key, value)

Yield Parameters:

  • key (String)
  • value (Object)

Returns:

  • (Enumerable)

Since:

  • 0.13.0



77
78
79
80
81
# File 'lib/qonfig/settings.rb', line 77

def __deep_each_setting__(initial_setting_key = nil, yield_all: false, &block)
  __lock__.thread_safe_access do
    __deep_each_key_value_pair__(initial_setting_key, yield_all: yield_all, &block)
  end
end

#__define_setting__(key, value, with_redefinition: false) ⇒ void

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.

This method returns an undefined value.

Parameters:

  • key (Symbol, String)
  • value (Object)
  • with_redefinition (Hash) (defaults to: false)

    a customizable set of options

Options Hash (with_redefinition:):

  • (Boolean)

Since:

  • 0.1.0

Version:

  • 0.20.0



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/qonfig/settings.rb', line 91

def __define_setting__(key, value, with_redefinition: false) # rubocop:disable Metrics/AbcSize
  __lock__.thread_safe_definition do
    key = __indifferently_accessable_option_key__(key)

    __prevent_core_method_intersection__(key)

    case
    when with_redefinition || !__options__.key?(key)
      __options__[key] = value
    when __is_a_setting__(__options__[key]) && __is_a_setting__(value)
      __options__[key].__append_settings__(value)
    else
      __options__[key] = value
    end

    __define_option_reader__(key)
    __define_option_writer__(key)
    __define_option_predicate__(key)
  end
end

#__dig__(*keys) ⇒ Object

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.

Parameters:

  • keys (Array<String, Symbol>)

Returns:

  • (Object)

Since:

  • 0.2.0



173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/qonfig/settings.rb', line 173

def __dig__(*keys)
  __lock__.thread_safe_access do
    begin
      __deep_access__(*keys)
    rescue Qonfig::UnknownSettingError
      if keys.size == 1
        __deep_access__(*__parse_dot_notated_key__(keys.first))
      else
        raise
      end
    end
  end
end

#__each_setting__(&block) {|key, value| ... } ⇒ Enumerable

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.

Parameters:

  • block (Proc)

Yields:

  • (key, value)

Yield Parameters:

  • key (String)
  • value (Object)

Returns:

  • (Enumerable)

Since:

  • 0.13.0



60
61
62
63
64
# File 'lib/qonfig/settings.rb', line 60

def __each_setting__(&block)
  __lock__.thread_safe_access do
    __each_key_value_pair__(&block)
  end
end

#__freeze__void

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.

This method returns an undefined value.

Since:

  • 0.1.0



291
292
293
294
295
296
297
298
299
# File 'lib/qonfig/settings.rb', line 291

def __freeze__
  __lock__.thread_safe_access do
    __options__.freeze

    __options__.each_value do |value|
      value.__freeze__ if __is_a_setting__(value)
    end
  end
end

#__has_key__(*key_path) ⇒ Boolean

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.

Parameters:

  • key_path (Array<Symbol, String>)

Returns:

  • (Boolean)

Since:

  • 0.17.0



323
324
325
# File 'lib/qonfig/settings.rb', line 323

def __has_key__(*key_path)
  __lock__.thread_safe_access { __is_key_exists__(*key_path) }
end

#__invoke_mutation_callbacks__void

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.

This method returns an undefined value.

Since:

  • 0.13.0



129
130
131
# File 'lib/qonfig/settings.rb', line 129

def __invoke_mutation_callbacks__
  __mutation_callbacks__.call
end

#__is_a_setting__(value) ⇒ Boolean

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.

Parameters:

  • value (Any)

Returns:

  • (Boolean)

Since:

  • 0.13.0



314
315
316
# File 'lib/qonfig/settings.rb', line 314

def __is_a_setting__(value)
  value.is_a?(Qonfig::Settings)
end

#__is_frozen__Boolean

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:

  • (Boolean)

Since:

  • 0.2.0



305
306
307
# File 'lib/qonfig/settings.rb', line 305

def __is_frozen__
  __lock__.thread_safe_access { __options__.frozen? }
end

#__keys__(all_variants: false) ⇒ Array<String>

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.

Parameters:

  • all_variants (Hash) (defaults to: false)

    a customizable set of options

Options Hash (all_variants:):

  • (Boolean)

Returns:

  • (Array<String>)

Since:

  • 0.18.0



242
243
244
# File 'lib/qonfig/settings.rb', line 242

def __keys__(all_variants: false)
  __lock__.thread_safe_access { __setting_keys__(all_variants: all_variants) }
end

#__root_keys__Array<String>

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:

  • (Array<String>)

Since:

  • 0.18.0



250
251
252
# File 'lib/qonfig/settings.rb', line 250

def __root_keys__
  __lock__.thread_safe_access { __root_setting_keys__ }
end

#__slice__(*keys) ⇒ Hash

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.

Parameters:

  • keys (Array<String, Symbol>)

Returns:

  • (Hash)

Since:

  • 0.9.0



192
193
194
# File 'lib/qonfig/settings.rb', line 192

def __slice__(*keys)
  __lock__.thread_safe_access { __deep_slice__(*keys) }
end

#__slice_value__(*keys) ⇒ Hash, Any

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.

Parameters:

  • keys (Array<String, Symbol>)

Returns:

  • (Hash, Any)

Since:

  • 0.10.0



201
202
203
# File 'lib/qonfig/settings.rb', line 201

def __slice_value__(*keys)
  __lock__.thread_safe_access { __deep_slice_value__(*keys) }
end

#__subset__(*keys) ⇒ Hash

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.

Parameters:

  • keys (Array<String, Symbol, Array<String, Symbol>>)

Returns:

  • (Hash)

Since:

  • 0.16.0



210
211
212
# File 'lib/qonfig/settings.rb', line 210

def __subset__(*keys)
  __lock__.thread_safe_access { __deep_subset__(*keys) }
end

#__to_hash__(transform_key: BASIC_SETTING_KEY_TRANSFORMER, transform_value: BASIC_SETTING_VALUE_TRANSFORMER) ⇒ Hash Also known as: __to_h__

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.

rubocop:disable Layout/LineLength

Parameters:

  • transform_key (Hash) (defaults to: BASIC_SETTING_KEY_TRANSFORMER)

    a customizable set of options

  • transform_value (Hash) (defaults to: BASIC_SETTING_VALUE_TRANSFORMER)

    a customizable set of options

Options Hash (transform_key:):

  • (Proc)

Options Hash (transform_value:):

  • (Proc)

Returns:

  • (Hash)

Since:

  • 0.1.0



221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'lib/qonfig/settings.rb', line 221

def __to_hash__(transform_key: BASIC_SETTING_KEY_TRANSFORMER, transform_value: BASIC_SETTING_VALUE_TRANSFORMER)
  unless transform_key.is_a?(Proc)
    ::Kernel.raise(Qonfig::IncorrectKeyTransformerError, 'Key transformer should be a type of proc')
  end

  unless transform_value.is_a?(Proc)
    ::Kernel.raise(Qonfig::IncorrectValueTransformerError, 'Value transformer should be a type of proc')
  end

  __lock__.thread_safe_access do
    __build_hash_representation__(transform_key: transform_key, transform_value: transform_value)
  end
end

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

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:

  • (Boolean)

Since:

  • 0.1.0



281
282
283
284
285
# File 'lib/qonfig/settings.rb', line 281

def respond_to_missing?(method_name, include_private = false)
  # :nocov:
  __options__.key?(method_name.to_s) || __options__.key?(method_name.to_sym) || super
  # :nocov:
end