117 lines
2.6 KiB
Ruby
117 lines
2.6 KiB
Ruby
RSpec.shared_context 'jsonapi-serializers group class' do
|
|
|
|
# Person, Group Classes and serializers
|
|
before(:context) do
|
|
# models
|
|
class JSPerson
|
|
attr_accessor :id, :first_name, :last_name
|
|
end
|
|
|
|
class JSGroup
|
|
attr_accessor :id, :name, :groupees # Let's assume groupees can be Person or Group objects
|
|
end
|
|
|
|
# serializers
|
|
class JSPersonSerializer
|
|
include JSONAPI::Serializer
|
|
attributes :first_name, :last_name
|
|
|
|
def type
|
|
'person'
|
|
end
|
|
end
|
|
|
|
class JSGroupSerializer
|
|
include JSONAPI::Serializer
|
|
attributes :name
|
|
has_many :groupees
|
|
|
|
def type
|
|
'group'
|
|
end
|
|
end
|
|
|
|
class JSONAPISSerializerB
|
|
def initialize(data, options = {})
|
|
@options = options.merge(is_collection: true)
|
|
@data = data
|
|
end
|
|
|
|
def to_json
|
|
JSON.fast_generate(to_hash)
|
|
end
|
|
|
|
def to_hash
|
|
JSONAPI::Serializer.serialize(@data, @options)
|
|
end
|
|
end
|
|
end
|
|
|
|
after :context do
|
|
classes_to_remove = %i[
|
|
JSPerson
|
|
JSGroup
|
|
JSPersonSerializer
|
|
JSGroupSerializer]
|
|
classes_to_remove.each do |klass_name|
|
|
Object.send(:remove_const, klass_name) if Object.constants.include?(klass_name)
|
|
end
|
|
end
|
|
|
|
let(:jsonapi_groups) do
|
|
group_count = 0
|
|
person_count = 0
|
|
3.times.map do |i|
|
|
group = JSGroup.new
|
|
group.id = group_count + 1
|
|
group.name = "Test Group #{group.id}"
|
|
group_count = group.id
|
|
|
|
person = JSPerson.new
|
|
person.id = person_count + 1
|
|
person.last_name = "Last Name #{person.id}"
|
|
person.first_name = "First Name #{person.id}"
|
|
person_count = person.id
|
|
|
|
child_group = JSGroup.new
|
|
child_group.id = group_count + 1
|
|
child_group.name = "Test Group #{child_group.id}"
|
|
group_count = child_group.id
|
|
|
|
group.groupees = [person, child_group]
|
|
group
|
|
end
|
|
end
|
|
|
|
let(:jsonapis_person) do
|
|
person = JSPerson.new
|
|
person.id = 3
|
|
person
|
|
end
|
|
|
|
def build_jsonapis_groups(count)
|
|
group_count = 0
|
|
person_count = 0
|
|
count.times.map do |i|
|
|
group = JSGroup.new
|
|
group.id = group_count + 1
|
|
group.name = "Test Group #{group.id}"
|
|
group_count = group.id
|
|
|
|
person = JSPerson.new
|
|
person.id = person_count + 1
|
|
person.last_name = "Last Name #{person.id}"
|
|
person.first_name = "First Name #{person.id}"
|
|
person_count = person.id
|
|
|
|
child_group = JSGroup.new
|
|
child_group.id = group_count + 1
|
|
child_group.name = "Test Group #{child_group.id}"
|
|
group_count = child_group.id
|
|
|
|
group.groupees = [person, child_group]
|
|
group
|
|
end
|
|
end
|
|
end
|