Method: DatawireQuarkCore::Static#static

Defined in:
lib/datawire-quark-core.rb

#static(pairs) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/datawire-quark-core.rb', line 97

def static(pairs)
  pairs.each do |name, default|
    _lazy_statics << name
    self.instance_variable_set("@#{name}", Unassigned)

    define_singleton_method(name) do
      value = self.instance_variable_get("@#{name}")

      if value == Unassigned
        value = default.call
        self.instance_variable_set("@#{name}", value)
      end

      value
    end

    define_singleton_method("#{name}=") do |value|
      self.instance_variable_set("@#{name}", value)
    end

    define_method(name) do
      self.class.send(name)
    end

    define_method("#{name}=") do |value|
      self.class.send("#{name}=", value)
    end
  end
end