cartodb-rb-client
cartodb-rb-client copied to clipboard
CartoDB::Connection.query chokes on columns named 'class'
If the sql query returns a column named 'class', the CartoDB::Client::Utils.parse_json breaks on line 10:
json = ::JSON.parse(response.body, :object_class => CartoDB::Types::Metadata, :symbolize_names => true)
Looks like it's because CartoDB::Types::Metadata defines a method for each column name on itself, which means it then overwrites it's own class variable:
# cartodb/types/metadata.rb:23
# if key is 'class', we just overwrote self.class :-S
self.class.send :define_method, "#{key}" do
self[key.to_sym]
end
Probably means there are problems with other ruby reserved words?
Hey James, thanks for this report.
Indeed, the ruby client can't handle cartodb column named with ruby reserved words.
I've just pushed a patch with a workaround to this issue: it adds an underscore to the end of each column name matching a ruby reserved word. But just when retreiving data from the database.
Please, let me know if this solves your problem to close this issue.