def proxy_methods(*methods)
      @_methods ||= {}

      methods.each do |method|
        if method.is_a? Symbol
          # If given a symbol, store as a method to overwrite and use the default loader
          proxy_method method
        elsif method.is_a? Hash
          # If its a hash it will include methods to overwrite along with custom loaders
          method.each { |method_name, proc| proxy_method method_name, proc }
        end
      end
    end
def proxy_methods(*methods)
      @_methods ||= {}

      methods.each do |method|
        if method.is_a? Symbol
          # If given a symbol, store as a method to overwrite and use the default loader
          proxy_method method
        elsif method.is_a? Hash
          # If its a hash it will include methods to overwrite along with custom loaders
          method.each { |method_name, proc| proxy_method method_name, proc }
        end
      end
    end
Establish attributes to proxy along with an alternative proc of how
 the attribute should be loaded

 @example Load method using uppercase
   class GithubUser
     include ClassProxy

     fallback_fetch { |args| Octokit.user(args[:login]) }
     after_fallback_fetch { |obj| self.name = obj.name; self.login = obj.login }

     attr_accessor :name, :followers :login

     proxy_methods :name, :followers, uppercase_login: lambda { login.upcase }
   end

   user = GithubUser.find(login: 'heelhook')
   user.login           # -> 'heelhook'
   user.uppercase_login # -> 'HEELHOOK'