Class: ComplexConfig::Settings

Inherits:
JSON::GenericObject
  • Object
show all
Includes:
Enumerable
Defined in:
lib/complex_config/settings.rb

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(id, *a, &b) ⇒ Object (private)



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/complex_config/settings.rb', line 63

def method_missing(id, *a, &b)
  case
  when id =~ /\?\z/
    begin
      public_send $`.to_sym, *a, &b
    rescue ComplexConfig::AttributeMissing
      nil
    end
  when id =~ /=\z/
    super
  when value = ComplexConfig::Provider.apply_plugins(self, id)
    value
  else
    if attribute_set?(id)
      super
    else
      raise ComplexConfig::AttributeMissing, "no attribute named #{id.inspect}"
    end
  end
end

Class Method Details

.[](*a) ⇒ Object



5
6
7
# File 'lib/complex_config/settings.rb', line 5

def self.[](*a)
  from_hash *a
end

Instance Method Details

#attribute_names ⇒ Object



18
19
20
# File 'lib/complex_config/settings.rb', line 18

def attribute_names
  table.keys
end

#attribute_set?(name) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/complex_config/settings.rb', line 14

def attribute_set?(name)
  table.key?(name.to_sym)
end

#attribute_values ⇒ Object



22
23
24
# File 'lib/complex_config/settings.rb', line 22

def attribute_values
  table.values
end

#deep_freeze ⇒ Object



46
47
48
49
50
51
# File 'lib/complex_config/settings.rb', line 46

def deep_freeze
  each do |_, v|
    v.ask_and_send(:deep_freeze) || (v.freeze rescue v)
  end
  freeze
end

#each(&block) ⇒ Object



9
10
11
# File 'lib/complex_config/settings.rb', line 9

def each(&block)
  table.each(&block)
end

#to_h ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/complex_config/settings.rb', line 26

def to_h
  each_with_object({}) do |(k, v), h|
    h[k] = if Array === v
             v.to_ary.map { |x| (x.ask_and_send(:to_h) rescue x) || x }
           elsif v.respond_to?(:to_h)
             v.ask_and_send(:to_h) rescue v
           else
             v
           end
  end
end

#to_s ⇒ Object Also known as: inspect



38
39
40
# File 'lib/complex_config/settings.rb', line 38

def to_s
  to_h.to_yaml
end