Open
Description
I'm trying to set up an API that uses Sequel. Trying to present a collection throws this error:
NoMethodError: Entities::Event missing attribute
name' 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