Support for subproduct metaprogramming

Allows to write

class SomeProduct
  subproduct :cool, Plaid::Cool
end

You may even skip the class part:

class SomeProduct
  subproduct :foo_bar
end

will use Plaid::FooBar.

Methods
S
Instance Public methods
subproduct(name, klass = nil)
# File lib/plaid/products/base_product.rb, line 18
def subproduct(name, klass = nil)
  unless klass
    class_name = name.to_s.split('_').map(&:capitalize).join
    klass = Plaid.const_get(class_name)
  end

  define_method(name) do
    ivar = "@#{name}"

    if instance_variable_defined?(ivar)
      instance_variable_get(ivar)
    else
      instance_variable_set(ivar, klass.new(client))
    end
  end
end