cartodb-rb-client icon indicating copy to clipboard operation
cartodb-rb-client copied to clipboard

CartoDB::Connection.query chokes on columns named 'class'

Open th3james opened this issue 12 years ago • 1 comments

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?

th3james avatar Mar 28 '12 12:03 th3james

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.

Ferdev avatar Apr 06 '12 18:04 Ferdev