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
 |