def lut(lut_key = nil, lut_item_key = nil)
      @lut ||= {}

      if lut_key.nil?
        hash = {}
        self.lut_keys.each { |key| hash[key] = self.lut(key) } # CHECK: use .inject?
        return hash
      end

      @lut[lut_key.intern] ||= lut_read(lut_key) || {} if lut_key.respond_to?(:intern)

      self.lut_deep_hash_call(:lut, @lut, lut_key, lut_item_key)
    end
def lut(lut_key = nil, lut_item_key = nil)
      @lut ||= {}

      if lut_key.nil?
        hash = {}
        self.lut_keys.each { |key| hash[key] = self.lut(key) } # CHECK: use .inject?
        return hash
      end

      @lut[lut_key.intern] ||= lut_read(lut_key) || {} if lut_key.respond_to?(:intern)

      self.lut_deep_hash_call(:lut, @lut, lut_key, lut_item_key)
    end
== Calling LookUpTables

 === Call without any params
 * Returns: All LUTs defined within Foobar
     Foobar.lut
     =>
       {
         :foo    => { :a => 1 },
         :bar    => { :b => 2 },
         :foobar => { :c => 3, :d => 4, :e => 5 }
       }

 === Call with :lut_key:
 * Returns: Hash representing LUT defined by :lut_key
     Foobar.lut :foo
     => { :a => 1 }

 === Call with array of :lut_keys
 * Returns: Hash representing LUT defined with :lut_key in given Array
     Foobar.lut [:foo, :bar]
     =>
       {
         :foo => { :a => 1 },
         :bar => { :b => 2 }
       }

 === Call with Call with :lut_key and :lut_item_key
 * Returns: Value in LUT defined by :lut_key and :lut_item_key
     Foobar.lut :foo, "foobar"
     => 1
     # So we've got a Foobar with :foo => "foobar", its ID is '1'

 === Call with Call with :lut_key and :lut_item_key as Array
 * Returns: Hash representing LUT defined by :lut_key with
   :lut_item_keys in Array
     Foobar.lut :foobar, ["foo", "bar", "oof"]
     =>
       {
         "foo" => 3,
         "bar" => 4,
         "oof" => nil
       }
     # So we got Foobars with ID '3' and '4'
     # and no Foobar defined by :foobar => :oof

 === Call with :lut_key as a Hash
 * Returns: Hash representing LUTs given by keys of passed Hash.
   - If given value of Hash-Item is nil, will get whole LUT.
   - If given value is String or Symbol, will get value of LUT.
   - If given value is Array, will get values of entries.
 * Example:
    Foobar.lut { :foo => :a, :bar => nil, :foobar => [:c, :d] }
    =>
      {
        :foo    => 1,
        :bar    => { :b => 2 },
        :foobar => { :c => 3, :d => 4 }
      }