CartoDB / cartodb-rb-client

Ruby client for cartodb API
BSD 4-Clause "Original" or "Old" License
24 stars 21 forks source link

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

Open th3james opened 12 years ago

th3james commented 12 years ago

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?

Ferdev commented 12 years ago

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.