Class: ComplexConfig::Settings

Inherits:
JSON::GenericObject
  • Object
show all
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)



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/complex_config/settings.rb', line 100

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
    elsif table.respond_to?(id)
      table.__send__(id, *a, &b)
    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



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

def attribute_names
  table.keys
end

#attribute_set?(name) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#attribute_values ⇒ Object



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

def attribute_values
  table.values
end

#deep_freeze ⇒ Object



79
80
81
82
83
84
# File 'lib/complex_config/settings.rb', line 79

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

#pathes(hash = table, path_sep: ?., prefix: '', result: {}) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/complex_config/settings.rb', line 40

def pathes(hash = table, path_sep: ?., prefix: '', result: {})
  hash.each do |key, value|
    path = prefix.empty? ? key.to_s : "#{prefix}#{path_sep}#{key}"
    case value
    when ComplexConfig::Settings
      pathes(
        value,
        path_sep: path_sep,
        prefix:   path,
        result:   result
      )
    when Array
      value.each_with_index do |v, i|
        sub_path = path + "[#{i}]"
        if ComplexConfig::Settings === v
          pathes(
            v,
            path_sep: path_sep,
            prefix:   sub_path,
            result:   result
          )
        else
          result[sub_path] = v
        end
      end
    else
      result[path] = value
    end
  end
  result
end

#to_ary(*a, &b) ⇒ Object



73
74
75
# File 'lib/complex_config/settings.rb', line 73

def to_ary(*a, &b)
  table_enumerator.__send__(:to_a, *a, &b)
end

#to_h ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/complex_config/settings.rb', line 21

def to_h
  table_enumerator.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(pair_sep: ' = ', path_sep: ?.) ⇒ Object Also known as: inspect



34
35
36
37
38
# File 'lib/complex_config/settings.rb', line 34

def to_s(pair_sep: ' = ', path_sep: ?.)
  pathes(path_sep: path_sep).inject('') do |result, (path, value)|
    result << "#{path}#{pair_sep}#{value.inspect}\n"
  end
end