def method_missing(method_name, *args)
      attr = "@#{method_name}"
      return super if method_name.match(/[\?!]$/) || !instance_variable_defined?(attr)

      attr_value = instance_variable_get attr
      return attr_value if !attr_value.nil? || @id.nil?

      complete!
      instance_variable_get attr
    end
def method_missing(method_name, *args)
      attr = "@#{method_name}"
      return super if method_name.match(/[\?!]$/) || !instance_variable_defined?(attr)

      attr_value = instance_variable_get attr
      return attr_value if !attr_value.nil? || @id.nil?

      complete!
      instance_variable_get attr
    end
Used internally to retrieve an object's instance variable. If instance
 variable equals nil, calls {#complete!} on object and retrieve it again.

 @example
           user.id #=> "wizzler"

           track = artist.tracks.first
           track.instance_variable_get("@popularity") #=> nil
           track.popularity #=> 62
           track.instance_variable_get("@popularity") #=> 62