On initialization of the Core class, could fetch available functions and variables using #info and define methods for each of the things.
Another option would be to define #method_missing on Core and check for matching functions/variables. Would be more flexible since you could update your Core and use access functions/variables easily without re-instantiating your RubySpark::Core object