def attribute(name, type=Object)
      name = name.to_sym #normalize

      raise NameError, "attribute `#{name}` already created" if members.include?(name)
      raise TypeError, "second argument, type, must be a Class but got `#{type.inspect}` insted" unless type.is_a?(Class)
      raise TypeError, "directly converting to Bignum is not supported, use Integer instead" if type == Bignum

      new_attribute(name, type)
    end
def attribute(name, type=Object)
      name = name.to_sym #normalize

      raise NameError, "attribute `#{name}` already created" if members.include?(name)
      raise TypeError, "second argument, type, must be a Class but got `#{type.inspect}` insted" unless type.is_a?(Class)
      raise TypeError, "directly converting to Bignum is not supported, use Integer instead" if type == Bignum

      new_attribute(name, type)
    end
Create attribute accesors for the included class
   Also validations and coercions for the type specified

 @param [Symbol] name the accessor name
 @param [Class] type the class type to use for validations and coercions

 @example
   class Person
     include StronglyTyped::Model

     attribute :id, Integer
     attribute :slug, String
   end

   Person.new(id: 1, slug: 'elgalu')
   #=> #<Person:0x00c98 @id=1, @slug="elgalu">
   leo.id   #=> 1
   leo.slug #=> "elgalu"