fast_jsonapi 1.0.17 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +106 -38
- data/lib/extensions/has_one.rb +19 -13
- data/lib/fast_jsonapi.rb +2 -0
- data/lib/fast_jsonapi/instrumentation.rb +2 -0
- data/lib/fast_jsonapi/instrumentation/serializable_hash.rb +15 -0
- data/lib/fast_jsonapi/instrumentation/serialized_json.rb +15 -0
- data/lib/fast_jsonapi/instrumentation/skylight.rb +2 -0
- data/lib/fast_jsonapi/instrumentation/skylight/normalizers/serializable_hash.rb +22 -0
- data/lib/fast_jsonapi/instrumentation/skylight/normalizers/serialized_json.rb +22 -0
- data/lib/fast_jsonapi/multi_to_json.rb +92 -0
- data/lib/fast_jsonapi/object_serializer.rb +120 -91
- data/lib/fast_jsonapi/serialization_core.rb +44 -32
- data/lib/generators/serializer/USAGE +8 -0
- data/lib/generators/serializer/serializer_generator.rb +19 -0
- data/lib/generators/serializer/templates/serializer.rb.tt +6 -0
- metadata +48 -88
- data/.document +0 -5
- data/.rspec +0 -1
- data/Gemfile +0 -4
- data/Gemfile.lock +0 -158
- data/README.rdoc +0 -231
- data/Rakefile +0 -55
- data/VERSION +0 -1
- data/docs/collection_serializer_output.json +0 -35
- data/docs/object_serializer.json +0 -30
- data/fast_jsonapi.gemspec +0 -108
- data/spec/lib/extensions/active_record_spec.rb +0 -67
- data/spec/lib/object_serializer_caching_spec.rb +0 -68
- data/spec/lib/object_serializer_class_methods_spec.rb +0 -69
- data/spec/lib/object_serializer_hyphen_spec.rb +0 -40
- data/spec/lib/object_serializer_performance_spec.rb +0 -87
- data/spec/lib/object_serializer_spec.rb +0 -126
- data/spec/lib/object_serializer_struct_spec.rb +0 -31
- data/spec/lib/serialization_core_spec.rb +0 -84
- data/spec/shared/contexts/ams_context.rb +0 -83
- data/spec/shared/contexts/movie_context.rb +0 -192
- data/spec/spec_helper.rb +0 -15
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'active_record'
|
3
|
-
require 'sqlite3'
|
4
|
-
|
5
|
-
describe 'active record' do
|
6
|
-
|
7
|
-
# Setup DB
|
8
|
-
before(:all) do
|
9
|
-
@db_file = "test.db"
|
10
|
-
|
11
|
-
# Open a database
|
12
|
-
db = SQLite3::Database.new @db_file
|
13
|
-
|
14
|
-
# Create tables
|
15
|
-
db.execute_batch <<-SQL
|
16
|
-
create table suppliers (
|
17
|
-
name varchar(30),
|
18
|
-
id int primary key
|
19
|
-
);
|
20
|
-
|
21
|
-
create table accounts (
|
22
|
-
name varchar(30),
|
23
|
-
id int primary key,
|
24
|
-
supplier_id int,
|
25
|
-
FOREIGN KEY (supplier_id) REFERENCES suppliers(id)
|
26
|
-
);
|
27
|
-
SQL
|
28
|
-
|
29
|
-
# Insert records
|
30
|
-
@account_id = 2
|
31
|
-
@supplier_id = 1
|
32
|
-
db.execute_batch <<-SQL
|
33
|
-
insert into suppliers values ('Supplier1', #{@supplier_id});
|
34
|
-
insert into accounts values ('Dollar Account', #{@account_id}, #{@supplier_id});
|
35
|
-
SQL
|
36
|
-
end
|
37
|
-
|
38
|
-
# Setup Active Record
|
39
|
-
before(:all) do
|
40
|
-
class Supplier < ActiveRecord::Base
|
41
|
-
has_one :account
|
42
|
-
end
|
43
|
-
|
44
|
-
class Account < ActiveRecord::Base
|
45
|
-
belongs_to :supplier
|
46
|
-
end
|
47
|
-
|
48
|
-
ActiveRecord::Base.establish_connection(
|
49
|
-
:adapter => 'sqlite3',
|
50
|
-
:database => @db_file
|
51
|
-
)
|
52
|
-
end
|
53
|
-
|
54
|
-
context 'has one patch' do
|
55
|
-
|
56
|
-
it 'has account_id method for a supplier' do
|
57
|
-
expect(Supplier.first.respond_to?(:account_id)).to be true
|
58
|
-
expect(Supplier.first.account_id).to eq @account_id
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
# Clean up DB
|
64
|
-
after(:all) do
|
65
|
-
File.delete(@db_file) if File.exist?(@db_file)
|
66
|
-
end
|
67
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FastJsonapi::ObjectSerializer do
|
4
|
-
include_context 'movie class'
|
5
|
-
|
6
|
-
context 'when caching has_many' do
|
7
|
-
before(:each) do
|
8
|
-
rails = OpenStruct.new
|
9
|
-
rails.cache = ActiveSupport::Cache::MemoryStore.new
|
10
|
-
stub_const('Rails', rails)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'returns correct hash when serializable_hash is called' do
|
14
|
-
options = {}
|
15
|
-
options[:meta] = { total: 2 }
|
16
|
-
options[:include] = [:actors]
|
17
|
-
serializable_hash = CachingMovieSerializer.new([movie, movie], options).serializable_hash
|
18
|
-
|
19
|
-
expect(serializable_hash[:data].length).to eq 2
|
20
|
-
expect(serializable_hash[:data][0][:relationships].length).to eq 3
|
21
|
-
expect(serializable_hash[:data][0][:attributes].length).to eq 2
|
22
|
-
|
23
|
-
expect(serializable_hash[:meta]).to be_instance_of(Hash)
|
24
|
-
|
25
|
-
expect(serializable_hash[:included]).to be_instance_of(Array)
|
26
|
-
expect(serializable_hash[:included][0]).to be_instance_of(Hash)
|
27
|
-
expect(serializable_hash[:included].length).to eq 3
|
28
|
-
|
29
|
-
serializable_hash = CachingMovieSerializer.new(movie).serializable_hash
|
30
|
-
|
31
|
-
expect(serializable_hash[:data]).to be_instance_of(Hash)
|
32
|
-
expect(serializable_hash[:meta]).to be nil
|
33
|
-
expect(serializable_hash[:included]).to be nil
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'uses cached values for the record' do
|
37
|
-
previous_name = movie.name
|
38
|
-
previous_actors = movie.actors
|
39
|
-
CachingMovieSerializer.new(movie).serializable_hash
|
40
|
-
|
41
|
-
movie.name = 'should not match'
|
42
|
-
allow(movie).to receive(:actor_ids).and_return([99])
|
43
|
-
|
44
|
-
expect(previous_name).not_to eq(movie.name)
|
45
|
-
expect(previous_actors).not_to eq(movie.actors)
|
46
|
-
serializable_hash = CachingMovieSerializer.new(movie).serializable_hash
|
47
|
-
|
48
|
-
expect(serializable_hash[:data][:attributes][:name]).to eq(previous_name)
|
49
|
-
expect(serializable_hash[:data][:relationships][:actors][:data].length).to eq movie.actors.length
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'uses cached values for has many as specified' do
|
53
|
-
previous_name = movie.name
|
54
|
-
previous_actors = movie.actors
|
55
|
-
CachingMovieWithHasManySerializer.new(movie).serializable_hash
|
56
|
-
|
57
|
-
movie.name = 'should not match'
|
58
|
-
allow(movie).to receive(:actor_ids).and_return([99])
|
59
|
-
|
60
|
-
expect(previous_name).not_to eq(movie.name)
|
61
|
-
expect(previous_actors).not_to eq(movie.actors)
|
62
|
-
serializable_hash = CachingMovieWithHasManySerializer.new(movie).serializable_hash
|
63
|
-
|
64
|
-
expect(serializable_hash[:data][:attributes][:name]).to eq(previous_name)
|
65
|
-
expect(serializable_hash[:data][:relationships][:actors][:data].length).to eq previous_actors.length
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FastJsonapi::ObjectSerializer do
|
4
|
-
|
5
|
-
include_context 'movie class'
|
6
|
-
|
7
|
-
context 'when testing class methods of object serializer' do
|
8
|
-
|
9
|
-
before(:example) do
|
10
|
-
MovieSerializer.relationships_to_serialize = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'returns correct relationship hash for a has_many relationship' do
|
14
|
-
MovieSerializer.has_many :roles
|
15
|
-
relationship = MovieSerializer.relationships_to_serialize[:roles]
|
16
|
-
expect(relationship).to be_instance_of(Hash)
|
17
|
-
expect(relationship.keys).to all(be_instance_of(Symbol))
|
18
|
-
expect(relationship[:id_method_name]).to end_with '_ids'
|
19
|
-
expect(relationship[:record_type]).to eq 'roles'.singularize.to_sym
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'returns correct relationship hash for a has_many relationship with overrides' do
|
23
|
-
MovieSerializer.has_many :roles, id_method_name: :roles_only_ids, record_type: :super_role
|
24
|
-
relationship = MovieSerializer.relationships_to_serialize[:roles]
|
25
|
-
expect(relationship[:id_method_name]).to be :roles_only_ids
|
26
|
-
expect(relationship[:record_type]).to be :super_role
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'returns correct relationship hash for a belongs_to relationship' do
|
30
|
-
MovieSerializer.belongs_to :area
|
31
|
-
relationship = MovieSerializer.relationships_to_serialize[:area]
|
32
|
-
expect(relationship).to be_instance_of(Hash)
|
33
|
-
expect(relationship.keys).to all(be_instance_of(Symbol))
|
34
|
-
expect(relationship[:id_method_name]).to end_with '_id'
|
35
|
-
expect(relationship[:record_type]).to eq 'area'.singularize.to_sym
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'returns correct relationship hash for a belongs_to relationship with overrides' do
|
39
|
-
MovieSerializer.has_many :area, id_method_name: :blah_id, record_type: :awesome_area, serializer: :my_area
|
40
|
-
relationship = MovieSerializer.relationships_to_serialize[:area]
|
41
|
-
expect(relationship[:id_method_name]).to be :blah_id
|
42
|
-
expect(relationship[:record_type]).to be :awesome_area
|
43
|
-
expect(relationship[:serializer]).to be :MyAreaSerializer
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'returns correct relationship hash for a has_one relationship' do
|
47
|
-
MovieSerializer.has_one :area
|
48
|
-
relationship = MovieSerializer.relationships_to_serialize[:area]
|
49
|
-
expect(relationship).to be_instance_of(Hash)
|
50
|
-
expect(relationship.keys).to all(be_instance_of(Symbol))
|
51
|
-
expect(relationship[:id_method_name]).to end_with '_id'
|
52
|
-
expect(relationship[:record_type]).to eq 'area'.singularize.to_sym
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'returns correct relationship hash for a has_one relationship with overrides' do
|
56
|
-
MovieSerializer.has_one :area, id_method_name: :blah_id, record_type: :awesome_area
|
57
|
-
relationship = MovieSerializer.relationships_to_serialize[:area]
|
58
|
-
expect(relationship[:id_method_name]).to be :blah_id
|
59
|
-
expect(relationship[:record_type]).to be :awesome_area
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'returns serializer name correctly with namespaces' do
|
63
|
-
AppName::V1::MovieSerializer.has_many :area, id_method_name: :blah_id
|
64
|
-
relationship = AppName::V1::MovieSerializer.relationships_to_serialize[:area]
|
65
|
-
expect(relationship[:serializer]).to be :'AppName::V1::AreaSerializer'
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FastJsonapi::ObjectSerializer do
|
4
|
-
include_context 'movie class'
|
5
|
-
include_context 'ams movie class'
|
6
|
-
|
7
|
-
context 'when using hyphens for word separation in the JSON API members' do
|
8
|
-
it 'returns correct hash when serializable_hash is called' do
|
9
|
-
serializable_hash = HyphenMovieSerializer.new([movie, movie]).serializable_hash
|
10
|
-
expect(serializable_hash[:data].length).to eq 2
|
11
|
-
expect(serializable_hash[:data][0][:relationships].length).to eq 3
|
12
|
-
expect(serializable_hash[:data][0][:relationships]).to have_key('movie-type'.to_sym)
|
13
|
-
expect(serializable_hash[:data][0][:attributes].length).to eq 2
|
14
|
-
expect(serializable_hash[:data][0][:attributes]).to have_key("release-year".to_sym)
|
15
|
-
|
16
|
-
serializable_hash = HyphenMovieSerializer.new(movie_struct).serializable_hash
|
17
|
-
expect(serializable_hash[:data][:relationships].length).to eq 3
|
18
|
-
expect(serializable_hash[:data][:relationships]).to have_key('movie-type'.to_sym)
|
19
|
-
expect(serializable_hash[:data][:attributes].length).to eq 2
|
20
|
-
expect(serializable_hash[:data][:attributes]).to have_key('release-year'.to_sym)
|
21
|
-
expect(serializable_hash[:data][:id]).to eq movie_struct.id.to_s
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'returns same thing as ams' do
|
25
|
-
ams_movie = build_ams_movies(1).first
|
26
|
-
movie = build_movies(1).first
|
27
|
-
our_json = HyphenMovieSerializer.new([movie]).serialized_json
|
28
|
-
ams_json = ActiveModelSerializers::SerializableResource.new([ams_movie], key_transform: :dash).to_json
|
29
|
-
expect(our_json.length).to eq (ams_json.length)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns type hypenated when trying to serializing a class with multiple words' do
|
33
|
-
movie_type = MovieType.new
|
34
|
-
movie_type.id = 3
|
35
|
-
movie_type.name = "x"
|
36
|
-
serializable_hash = HyphenMovieTypeSerializer.new(movie_type).serializable_hash
|
37
|
-
expect(serializable_hash[:data][:type].to_sym).to eq 'movie-type'.to_sym
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FastJsonapi::ObjectSerializer do
|
4
|
-
include_context 'movie class'
|
5
|
-
include_context 'ams movie class'
|
6
|
-
|
7
|
-
context 'when testing performance of serialization' do
|
8
|
-
it 'should create a hash of 1000 records in less than 25 ms' do
|
9
|
-
movies = 1000.times.map { |_i| movie }
|
10
|
-
expect { MovieSerializer.new(movies).serializable_hash }.to perform_under(25).ms
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should serialize 1000 records to jsonapi in less than 30 ms' do
|
14
|
-
movies = 1000.times.map { |_i| movie }
|
15
|
-
expect { MovieSerializer.new(movies).serialized_json }.to perform_under(30).ms
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'should create a hash of 1000 records with includes and meta in less than 75 ms' do
|
19
|
-
count = 1000
|
20
|
-
movies = count.times.map { |_i| movie }
|
21
|
-
options = {}
|
22
|
-
options[:meta] = { total: count }
|
23
|
-
options[:include] = [:actors]
|
24
|
-
expect { MovieSerializer.new(movies, options).serializable_hash }.to perform_under(75).ms
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should serialize 1000 records to jsonapi with includes and meta in less than 75 ms' do
|
28
|
-
count = 1000
|
29
|
-
movies = count.times.map { |_i| movie }
|
30
|
-
options = {}
|
31
|
-
options[:meta] = { total: count }
|
32
|
-
options[:include] = [:actors]
|
33
|
-
expect { MovieSerializer.new(movies, options).serialized_json }.to perform_under(75).ms
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def print_stats(count, ams_time, our_time)
|
38
|
-
format = '%-15s %-10s %s'
|
39
|
-
puts ''
|
40
|
-
puts format(format, 'Serializer', 'Records', 'Time')
|
41
|
-
puts format(format, 'AMS serializer', count, ams_time.round(2).to_s + ' ms')
|
42
|
-
puts format(format, 'Fast serializer', count, our_time.round(2).to_s + ' ms')
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'when comparing with AMS 0.10.x' do
|
46
|
-
[1, 25, 250, 1000].each do |movie_count|
|
47
|
-
speed_factor = 25
|
48
|
-
it "should serialize #{movie_count} records atleast #{speed_factor} times faster than AMS" do
|
49
|
-
ams_movies = build_ams_movies(movie_count)
|
50
|
-
movies = build_movies(movie_count)
|
51
|
-
our_json = nil
|
52
|
-
ams_json = nil
|
53
|
-
our_serializer = MovieSerializer.new(movies)
|
54
|
-
ams_serializer = ActiveModelSerializers::SerializableResource.new(ams_movies)
|
55
|
-
our_time = Benchmark.measure { our_json = our_serializer.serialized_json }.real * 1000
|
56
|
-
ams_time = Benchmark.measure { ams_json = ams_serializer.to_json }.real * 1000
|
57
|
-
print_stats(movie_count, ams_time, our_time)
|
58
|
-
expect(our_json.length).to eq ams_json.length
|
59
|
-
expect { our_serializer.serialized_json }.to perform_faster_than { ams_serializer.to_json }.at_least(speed_factor).times
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'when comparing with AMS 0.10.x and with includes and meta' do
|
65
|
-
[1, 25, 250, 1000].each do |movie_count|
|
66
|
-
speed_factor = 25
|
67
|
-
it "should serialize #{movie_count} records atleast #{speed_factor} times faster than AMS" do
|
68
|
-
ams_movies = build_ams_movies(movie_count)
|
69
|
-
movies = build_movies(movie_count)
|
70
|
-
our_json = nil
|
71
|
-
ams_json = nil
|
72
|
-
|
73
|
-
options = {}
|
74
|
-
options[:meta] = { total: movie_count }
|
75
|
-
options[:include] = [:actors, :movie_type]
|
76
|
-
|
77
|
-
our_serializer = MovieSerializer.new(movies, options)
|
78
|
-
ams_serializer = ActiveModelSerializers::SerializableResource.new(ams_movies, include: options[:include], meta: options[:meta])
|
79
|
-
our_time = Benchmark.measure { our_json = our_serializer.serialized_json }.real * 1000
|
80
|
-
ams_time = Benchmark.measure { ams_json = ams_serializer.to_json }.real * 1000
|
81
|
-
print_stats(movie_count, ams_time, our_time)
|
82
|
-
expect(our_json.length).to eq ams_json.length
|
83
|
-
expect { our_serializer.serialized_json }.to perform_faster_than { ams_serializer.to_json }.at_least(speed_factor).times
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
@@ -1,126 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe FastJsonapi::ObjectSerializer do
|
4
|
-
include_context 'movie class'
|
5
|
-
|
6
|
-
context 'when testing instance methods of object serializer' do
|
7
|
-
it 'returns correct hash when serializable_hash is called' do
|
8
|
-
options = {}
|
9
|
-
options[:meta] = { total: 2 }
|
10
|
-
options[:include] = [:actors]
|
11
|
-
serializable_hash = MovieSerializer.new([movie, movie], options).serializable_hash
|
12
|
-
|
13
|
-
expect(serializable_hash[:data].length).to eq 2
|
14
|
-
expect(serializable_hash[:data][0][:relationships].length).to eq 3
|
15
|
-
expect(serializable_hash[:data][0][:attributes].length).to eq 2
|
16
|
-
|
17
|
-
expect(serializable_hash[:meta]).to be_instance_of(Hash)
|
18
|
-
|
19
|
-
expect(serializable_hash[:included]).to be_instance_of(Array)
|
20
|
-
expect(serializable_hash[:included][0]).to be_instance_of(Hash)
|
21
|
-
expect(serializable_hash[:included].length).to eq 3
|
22
|
-
|
23
|
-
serializable_hash = MovieSerializer.new(movie).serializable_hash
|
24
|
-
|
25
|
-
expect(serializable_hash[:data]).to be_instance_of(Hash)
|
26
|
-
expect(serializable_hash[:meta]).to be nil
|
27
|
-
expect(serializable_hash[:included]).to be nil
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'returns correct number of records when serialized_json is called for an array' do
|
31
|
-
options = {}
|
32
|
-
options[:meta] = { total: 2 }
|
33
|
-
json = MovieSerializer.new([movie, movie], options).serialized_json
|
34
|
-
serializable_hash = JSON.parse(json)
|
35
|
-
expect(serializable_hash['data'].length).to eq 2
|
36
|
-
expect(serializable_hash['meta']).to be_instance_of(Hash)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'returns correct id when serialized_json is called for a single object' do
|
40
|
-
json = MovieSerializer.new(movie).serialized_json
|
41
|
-
serializable_hash = JSON.parse(json)
|
42
|
-
expect(serializable_hash['data']['id']).to eq movie.id.to_s
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns correct json when serializing nil' do
|
46
|
-
json = MovieSerializer.new(nil).serialized_json
|
47
|
-
serializable_hash = JSON.parse(json)
|
48
|
-
expect(serializable_hash['data']).to eq nil
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'returns correct json when record id is nil' do
|
52
|
-
movie.id = nil
|
53
|
-
json = MovieSerializer.new(movie).serialized_json
|
54
|
-
serializable_hash = JSON.parse(json)
|
55
|
-
expect(serializable_hash['data']['id']).to be nil
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'returns correct json when has_many returns []' do
|
59
|
-
movie.actor_ids = []
|
60
|
-
json = MovieSerializer.new(movie).serialized_json
|
61
|
-
serializable_hash = JSON.parse(json)
|
62
|
-
expect(serializable_hash['data']['relationships']['actors']['data'].length).to eq 0
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'returns correct json when belongs_to returns nil' do
|
66
|
-
movie.owner_id = nil
|
67
|
-
json = MovieSerializer.new(movie).serialized_json
|
68
|
-
serializable_hash = JSON.parse(json)
|
69
|
-
expect(serializable_hash['data']['relationships']['owner']['data']).to be nil
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'returns correct json when serializing []' do
|
73
|
-
json = MovieSerializer.new([]).serialized_json
|
74
|
-
serializable_hash = JSON.parse(json)
|
75
|
-
expect(serializable_hash['data']).to eq []
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'returns errors when serializing with non-existent includes key' do
|
79
|
-
options = {}
|
80
|
-
options[:meta] = { total: 2 }
|
81
|
-
options[:include] = [:blah_blah]
|
82
|
-
expect { MovieSerializer.new([movie, movie], options).serializable_hash }.to raise_error(ArgumentError)
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'returns keys when serializing with empty string/nil array includes key' do
|
86
|
-
options = {}
|
87
|
-
options[:meta] = { total: 2 }
|
88
|
-
options[:include] = ['']
|
89
|
-
expect(MovieSerializer.new([movie, movie], options).serializable_hash.keys).to eq [:data, :meta]
|
90
|
-
options[:include] = [nil]
|
91
|
-
expect(MovieSerializer.new([movie, movie], options).serializable_hash.keys).to eq [:data, :meta]
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'when testing included do block of object serializer' do
|
96
|
-
it 'should set default_type based on serializer class name' do
|
97
|
-
class BlahSerializer
|
98
|
-
include FastJsonapi::ObjectSerializer
|
99
|
-
end
|
100
|
-
expect(BlahSerializer.record_type).to be :blah
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'should set default_type for a multi word class name' do
|
104
|
-
class BlahBlahSerializer
|
105
|
-
include FastJsonapi::ObjectSerializer
|
106
|
-
end
|
107
|
-
expect(BlahBlahSerializer.record_type).to be :blah_blah
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'shouldnt set default_type for a serializer that doesnt follow convention' do
|
111
|
-
class BlahBlahSerializerBuilder
|
112
|
-
include FastJsonapi::ObjectSerializer
|
113
|
-
end
|
114
|
-
expect(BlahBlahSerializerBuilder.record_type).to be_nil
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'shouldnt set default_type for a serializer that doesnt follow convention' do
|
118
|
-
module V1
|
119
|
-
class BlahSerializer
|
120
|
-
include FastJsonapi::ObjectSerializer
|
121
|
-
end
|
122
|
-
end
|
123
|
-
expect(V1::BlahSerializer.record_type).to be :blah
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|