grape-entity icon indicating copy to clipboard operation
grape-entity copied to clipboard

Sequel collection support

Open tombruijn opened this issue 10 years ago • 1 comments

I'm trying to set up an API that uses Sequel. Trying to present a collection throws this error:

NoMethodError: Entities::Event missing attributename' on #Sequel::Postgres::Dataset:0x007fe4861eb078`

This works with ActiveRecord, but not with Sequel. The check for if an object is a collection is done by checking if the .to_ary method exists on an object. This is true for ActiveRecord, but not for Sequel.

I've made a small workaround to make it work for now, but I feel this should be part of Grape Entity and not Sequel.

module Sequel
  class Dataset
    alias_method :to_ary, :to_a
  end
end

Is there a more reliable way to check if an object is a collection? Such as doing a check on .to_a? Or to check if it is somehow Enumerable?


Example setup:

require "rubygems"
require "pg"
require "sequel"
require "grape"
require "grape-entity"

# Sequel.migration do
#   change do
#     create_table :events do
#       Integer :id, primary_key: true
#       String :name, size: 255
#       DateTime :created_at, null: true, index: true
#     end
#   end
# end

DB = Sequel.connect("postgres://user:password@localhost:5432/my_database")

module Sequel
  class Dataset
    # If this is removed the collection present doesn't work.
    alias_method :to_ary, :to_a
  end
end

class Event < Sequel::Model
end

module Entities
  class Event < Grape::Entity
    expose :name
  end
end

class API < Grape::API
  format :json

  resource :events do
    get do
      present :events, Event.all, with: Entities::Event
    end
  end
end

tombruijn avatar Nov 05 '15 14:11 tombruijn

Reading http://stackoverflow.com/questions/9467395/whats-the-difference-between-to-a-and-to-ary-in-activerecord it seems like we need to support both to_a and to_ary, so I would take a pull request.

dblock avatar Nov 06 '15 14:11 dblock