panko_serializer 0.3.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ab84d97925b9d089338d41c18a234c0bb6b3b7da154f98e0949237a5b7e82a6
4
- data.tar.gz: 9c96788f38ca60c61962f117f638c7d06c48d9503fd91b8f50b71a99f619ccf4
3
+ metadata.gz: 7cd2e60ecfb8f4fd8557aa148cbd981d0552e72e40678e36168b494e31a426a9
4
+ data.tar.gz: 302d629080ee255fc8ae3117ec169a1f9db35c1e9ff4c598b9cad5a8f9830a9b
5
5
  SHA512:
6
- metadata.gz: 1bc8887275aa3fab6016c46b88a4df400c273998502cf4c459a96d61c93cedcca7f97e4a01d41631b7c0a57841478a5026f2b5c1cad03fef0840e00b82c06c79
7
- data.tar.gz: d7fc5e62f49961a3095e186434fe8e53e6cd3b9410bb5153443b59437254e506e301913bbec37bcac9bd508a390e0d37254264ef0263f0a7fe22e7bc9e7d0af3
6
+ metadata.gz: 53bdb412d51f9aaf0ab7d0bd7065117257f28cf6b468a51761d7bb8a4582d2d69b9105e02de65ec0964ddefdd158d169c821f50f03ae46f9a6a4243a9b5035b3
7
+ data.tar.gz: 86eae7fb5ecda7ae0d356d24cabf557d99bf817577b4b3a45a1f4fcbc5120f54bb2eece291e356047d42857af69c24e5870b6fdae45308881c6c4619241a1961
data/.travis.yml CHANGED
@@ -2,7 +2,7 @@ sudo: false
2
2
  cache: bundler
3
3
  language: ruby
4
4
  rvm:
5
- - 2.5.0
5
+ - 2.5.1
6
6
 
7
7
  env:
8
8
  global:
@@ -22,5 +22,6 @@ after_success:
22
22
 
23
23
  env:
24
24
  matrix:
25
- - "RAILS_VERSION=4.2"
26
- - "RAILS_VERSION=5.1"
25
+ - "RAILS_VERSION=4.2.0"
26
+ - "RAILS_VERSION=5.1.0"
27
+ - "RAILS_VERSION=5.2.0"
data/Gemfile CHANGED
@@ -6,11 +6,8 @@ gemspec
6
6
  raw_rails_version = ENV.fetch("RAILS_VERSION", "4.2")
7
7
  rails_version = "~> #{raw_rails_version}"
8
8
 
9
- gem "rails", rails_version
10
- gem "railties", rails_version
11
9
  gem "activesupport", rails_version
12
10
  gem "activemodel", rails_version
13
- gem "actionpack", rails_version
14
11
  gem "activerecord", rails_version, group: :test
15
12
 
16
13
  group :benchmarks do
@@ -23,8 +20,6 @@ group :benchmarks do
23
20
 
24
21
  gem "benchmark-ips"
25
22
  gem "active_model_serializers"
26
- gem "fast_jsonapi" if raw_rails_version.start_with? "5"
27
-
28
23
  gem "terminal-table"
29
24
  end
30
25
 
data/Rakefile CHANGED
@@ -72,7 +72,7 @@ end
72
72
 
73
73
  desc "Type Casts - Benchmarks"
74
74
  task :bm_type_casts do
75
- run_benchmarks Dir[File.join(__dir__, "benchmarks", "type_casts", "bm_*")]
75
+ run_benchmarks Dir[File.join(__dir__, "benchmarks", "type_casts", "bm_*")], items_count: 0
76
76
  end
77
77
 
78
78
  desc "Sanity Benchmarks"
data/benchmarks/app.rb CHANGED
@@ -2,12 +2,9 @@
2
2
  require "bundler/setup"
3
3
 
4
4
 
5
- require "rails"
6
5
  require "active_model"
7
6
  require "active_support"
8
7
  require "active_support/json"
9
- require "action_controller"
10
- require "action_controller/railtie"
11
8
 
12
9
  require "active_model_serializers"
13
10
  require "panko_serializer"
data/benchmarks/sanity.rb CHANGED
@@ -89,7 +89,7 @@ end
89
89
 
90
90
 
91
91
 
92
- benchmark "SimpleWithMethodCall", PostFastWithMethodCallSerializer
93
- benchmark "HasOne", PostWithHasOneFastSerializer
94
92
  benchmark "Simple", PostFastSerializer
93
+ benchmark "HasOne", PostWithHasOneFastSerializer
94
+ benchmark "SimpleWithMethodCall", PostFastWithMethodCallSerializer
95
95
  benchmark_aliased "Simple (aliased)", PostWithAliasFastSerializer
@@ -79,7 +79,12 @@ if ENV["RAILS_VERSION"].start_with? "4.2"
79
79
  ar_type_convert ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Float, "1.23", 1.23
80
80
  ar_type_convert ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Float, "Infinity", ::Float::INFINITY
81
81
  end
82
- ar_type_convert ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Json, '{"a":1}', {a:1}
82
+ if check_if_exists "ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Json"
83
+ ar_type_convert ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Json, '{"a":1}', {a:1}
84
+ end
85
+ if check_if_exists "ActiveRecord::Type::Json"
86
+ ar_type_convert ActiveRecord::Type::Json, '{"a":1}', {a:1}
87
+ end
83
88
 
84
89
  db_ar_time
85
90
  utc_ar_time
@@ -59,6 +59,11 @@ if ENV["RAILS_VERSION"].start_with? "4.2"
59
59
  panko_type_convert ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Float, "Infinity", ::Float::INFINITY
60
60
  end
61
61
 
62
- panko_type_convert ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Json, '{"a":1}', {a:1}
62
+ if check_if_exists "ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Json"
63
+ panko_type_convert ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Json, '{"a":1}', {a:1}
64
+ end
65
+ if check_if_exists "ActiveRecord::Type::Json"
66
+ panko_type_convert ActiveRecord::Type::Json, '{"a":1}', {a:1}
67
+ end
63
68
  db_panko_time
64
69
  utc_panko_time
@@ -14,4 +14,10 @@ def assert(type_name, from, to)
14
14
  raise "#{type_name} - #{from.class} is not equals to #{to.class}" unless from.to_json == to.to_json
15
15
  end
16
16
 
17
+ def check_if_exists(module_name)
18
+ mod = (module_name.constantize rescue nil)
19
+ return true if mod
20
+ return false unless mod
21
+ end
22
+
17
23
  Time.zone = "UTC"
@@ -17,6 +17,7 @@ static VALUE ar_integer_type = Qundef;
17
17
  static VALUE ar_boolean_type = Qundef;
18
18
  static VALUE ar_date_time_type = Qundef;
19
19
  static VALUE ar_time_zone_converter = Qundef;
20
+ static VALUE ar_json_type = Qundef;
20
21
 
21
22
  static VALUE ar_pg_integer_type = Qundef;
22
23
  static VALUE ar_pg_float_type = Qundef;
@@ -119,6 +120,10 @@ void cache_type_lookup() {
119
120
  deserialize_from_db_id = rb_intern("type_cast_from_database");
120
121
  }
121
122
 
123
+ if (rb_const_defined_at(ar_type, rb_intern("Json")) == (int)Qtrue) {
124
+ ar_json_type = rb_const_get_at(ar_type, rb_intern("Json"));
125
+ }
126
+
122
127
  // TODO: if we get error or not, add this to some debug log
123
128
  int isErrored;
124
129
  rb_protect(cache_postgres_type_lookup, ar, &isErrored);
@@ -203,7 +208,8 @@ VALUE cast_integer_type(VALUE value) {
203
208
  }
204
209
 
205
210
  bool is_json_type(VALUE type_klass) {
206
- return ar_pg_json_type != Qundef && type_klass == ar_pg_json_type;
211
+ return ((ar_pg_json_type != Qundef && type_klass == ar_pg_json_type) ||
212
+ (ar_json_type != Qundef && type_klass == ar_json_type));
207
213
  }
208
214
 
209
215
  VALUE rescue_func() {
@@ -15,8 +15,7 @@ void write_value(VALUE str_writer, VALUE key, VALUE value) {
15
15
 
16
16
  void serialize_method_fields(VALUE subject,
17
17
  VALUE str_writer,
18
- SerializationDescriptor descriptor,
19
- VALUE context) {
18
+ SerializationDescriptor descriptor) {
20
19
  VALUE method_fields, serializer;
21
20
  long i;
22
21
 
@@ -26,7 +25,7 @@ void serialize_method_fields(VALUE subject,
26
25
  }
27
26
 
28
27
  serializer = sd_build_serializer(descriptor);
29
- sd_apply_serializer_config(serializer, subject, context);
28
+ sd_apply_serializer_config(descriptor, serializer, subject);
30
29
 
31
30
  for (i = 0; i < RARRAY_LEN(method_fields); i++) {
32
31
  volatile VALUE attribute_name = RARRAY_AREF(method_fields, i);
@@ -39,17 +38,15 @@ void serialize_method_fields(VALUE subject,
39
38
 
40
39
  void serialize_fields(VALUE subject,
41
40
  VALUE str_writer,
42
- SerializationDescriptor descriptor,
43
- VALUE context) {
41
+ SerializationDescriptor descriptor) {
44
42
  descriptor->attributes_writer.write_attributes(
45
43
  subject, descriptor->attributes, write_value, str_writer);
46
44
 
47
- serialize_method_fields(subject, str_writer, descriptor, context);
45
+ serialize_method_fields(subject, str_writer, descriptor);
48
46
  }
49
47
 
50
48
  void serialize_has_one_associations(VALUE subject,
51
49
  VALUE str_writer,
52
- VALUE context,
53
50
  SerializationDescriptor descriptor,
54
51
  VALUE associations) {
55
52
  long i;
@@ -63,14 +60,13 @@ void serialize_has_one_associations(VALUE subject,
63
60
  write_value(str_writer, association->name_str, value);
64
61
  } else {
65
62
  serialize_subject(association->name_str, value, str_writer,
66
- association->descriptor, context);
63
+ association->descriptor);
67
64
  }
68
65
  }
69
66
  }
70
67
 
71
68
  void serialize_has_many_associations(VALUE subject,
72
69
  VALUE str_writer,
73
- VALUE context,
74
70
  SerializationDescriptor descriptor,
75
71
  VALUE associations) {
76
72
  long i;
@@ -84,7 +80,7 @@ void serialize_has_many_associations(VALUE subject,
84
80
  write_value(str_writer, association->name_str, value);
85
81
  } else {
86
82
  serialize_subjects(association->name_str, value, str_writer,
87
- association->descriptor, context);
83
+ association->descriptor);
88
84
  }
89
85
  }
90
86
  }
@@ -92,21 +88,20 @@ void serialize_has_many_associations(VALUE subject,
92
88
  VALUE serialize_subject(VALUE key,
93
89
  VALUE subject,
94
90
  VALUE str_writer,
95
- SerializationDescriptor descriptor,
96
- VALUE context) {
91
+ SerializationDescriptor descriptor) {
97
92
  sd_set_writer(descriptor, subject);
98
93
 
99
94
  rb_funcall(str_writer, push_object_id, 1, key);
100
95
 
101
- serialize_fields(subject, str_writer, descriptor, context);
96
+ serialize_fields(subject, str_writer, descriptor);
102
97
 
103
98
  if (RARRAY_LEN(descriptor->has_one_associations) >= 0) {
104
- serialize_has_one_associations(subject, str_writer, context, descriptor,
99
+ serialize_has_one_associations(subject, str_writer, descriptor,
105
100
  descriptor->has_one_associations);
106
101
  }
107
102
 
108
103
  if (RARRAY_LEN(descriptor->has_many_associations) >= 0) {
109
- serialize_has_many_associations(subject, str_writer, context, descriptor,
104
+ serialize_has_many_associations(subject, str_writer, descriptor,
110
105
  descriptor->has_many_associations);
111
106
  }
112
107
 
@@ -118,8 +113,7 @@ VALUE serialize_subject(VALUE key,
118
113
  VALUE serialize_subjects(VALUE key,
119
114
  VALUE subjects,
120
115
  VALUE str_writer,
121
- SerializationDescriptor descriptor,
122
- VALUE context) {
116
+ SerializationDescriptor descriptor) {
123
117
  long i;
124
118
 
125
119
  rb_funcall(str_writer, push_array_id, 1, key);
@@ -130,7 +124,7 @@ VALUE serialize_subjects(VALUE key,
130
124
 
131
125
  for (i = 0; i < RARRAY_LEN(subjects); i++) {
132
126
  volatile VALUE subject = RARRAY_AREF(subjects, i);
133
- serialize_subject(Qnil, subject, str_writer, descriptor, context);
127
+ serialize_subject(Qnil, subject, str_writer, descriptor);
134
128
  }
135
129
 
136
130
  rb_funcall(str_writer, pop_id, 0);
@@ -141,18 +135,16 @@ VALUE serialize_subjects(VALUE key,
141
135
  VALUE serialize_subject_api(VALUE klass,
142
136
  VALUE subject,
143
137
  VALUE str_writer,
144
- VALUE descriptor,
145
- VALUE context) {
138
+ VALUE descriptor) {
146
139
  SerializationDescriptor sd = sd_read(descriptor);
147
- return serialize_subject(Qnil, subject, str_writer, sd, context);
140
+ return serialize_subject(Qnil, subject, str_writer, sd);
148
141
  }
149
142
 
150
143
  VALUE serialize_subjects_api(VALUE klass,
151
144
  VALUE subjects,
152
145
  VALUE str_writer,
153
- VALUE descriptor,
154
- VALUE context) {
155
- serialize_subjects(Qnil, subjects, str_writer, sd_read(descriptor), context);
146
+ VALUE descriptor) {
147
+ serialize_subjects(Qnil, subjects, str_writer, sd_read(descriptor));
156
148
 
157
149
  return Qnil;
158
150
  }
@@ -167,10 +159,10 @@ void Init_panko_serializer() {
167
159
  VALUE mPanko = rb_define_module("Panko");
168
160
 
169
161
  rb_define_singleton_method(mPanko, "serialize_subject", serialize_subject_api,
170
- 4);
162
+ 3);
171
163
 
172
164
  rb_define_singleton_method(mPanko, "serialize_subjects",
173
- serialize_subjects_api, 4);
165
+ serialize_subjects_api, 3);
174
166
 
175
167
  panko_init_serialization_descriptor(mPanko);
176
168
  init_attributes_writer(mPanko);
@@ -8,11 +8,9 @@
8
8
  VALUE serialize_subject(VALUE key,
9
9
  VALUE subject,
10
10
  VALUE str_writer,
11
- SerializationDescriptor descriptor,
12
- VALUE context);
11
+ SerializationDescriptor descriptor);
13
12
 
14
13
  VALUE serialize_subjects(VALUE key,
15
14
  VALUE subjects,
16
15
  VALUE str_writer,
17
- SerializationDescriptor descriptor,
18
- VALUE context);
16
+ SerializationDescriptor descriptor);
@@ -3,6 +3,7 @@
3
3
  VALUE cSerializationDescriptor;
4
4
 
5
5
  static ID context_id;
6
+ static ID scope_id;
6
7
  static ID object_id;
7
8
 
8
9
 
@@ -18,6 +19,8 @@ static void sd_free(SerializationDescriptor sd) {
18
19
  sd->has_one_associations = Qnil;
19
20
  sd->has_many_associations = Qnil;
20
21
  sd->aliases = Qnil;
22
+ sd->context = Qnil;
23
+ sd->scope = Qnil;
21
24
 
22
25
  xfree(sd);
23
26
  }
@@ -30,6 +33,8 @@ void sd_mark(SerializationDescriptor data) {
30
33
  rb_gc_mark(data->has_one_associations);
31
34
  rb_gc_mark(data->has_many_associations);
32
35
  rb_gc_mark(data->aliases);
36
+ rb_gc_mark(data->context);
37
+ rb_gc_mark(data->scope);
33
38
  }
34
39
 
35
40
  static VALUE sd_new(int argc, VALUE* argv, VALUE self) {
@@ -42,6 +47,8 @@ static VALUE sd_new(int argc, VALUE* argv, VALUE self) {
42
47
  sd->has_one_associations = Qnil;
43
48
  sd->has_many_associations = Qnil;
44
49
  sd->aliases = Qnil;
50
+ sd->context = Qnil;
51
+ sd->scope = Qnil;
45
52
 
46
53
  sd->attributes_writer = create_empty_attributes_writer();
47
54
 
@@ -83,11 +90,16 @@ VALUE sd_serializer_ref(VALUE self) {
83
90
  return sd->serializer;
84
91
  }
85
92
 
86
- void sd_apply_serializer_config(VALUE serializer, VALUE object, VALUE context) {
93
+ void sd_apply_serializer_config(SerializationDescriptor descriptor, VALUE serializer, VALUE object) {
87
94
  rb_ivar_set(serializer, object_id, object);
88
- if (context != Qnil && context != Qundef) {
89
- rb_ivar_set(serializer, context_id, context);
95
+ if (descriptor->context != Qnil && descriptor->context != Qundef) {
96
+ rb_ivar_set(serializer, context_id, descriptor->context);
90
97
  }
98
+
99
+ if (descriptor->scope != Qnil && descriptor->scope != Qundef) {
100
+ rb_ivar_set(serializer, scope_id, descriptor->scope);
101
+ }
102
+
91
103
  }
92
104
  VALUE sd_attributes_set(VALUE self, VALUE attributes) {
93
105
  SerializationDescriptor sd = (SerializationDescriptor)DATA_PTR(self);
@@ -162,9 +174,22 @@ VALUE public_sd_build_serializer(VALUE self) {
162
174
  return sd_build_serializer(sd);
163
175
  }
164
176
 
177
+ VALUE sd_context_set(VALUE self, VALUE context) {
178
+ SerializationDescriptor sd = (SerializationDescriptor)DATA_PTR(self);
179
+ sd->context = context;
180
+ return Qnil;
181
+ }
182
+
183
+ VALUE sd_scope_set(VALUE self, VALUE scope) {
184
+ SerializationDescriptor sd = (SerializationDescriptor)DATA_PTR(self);
185
+ sd->scope = scope;
186
+ return Qnil;
187
+ }
188
+
165
189
  void panko_init_serialization_descriptor(VALUE mPanko) {
166
190
  object_id = rb_intern("@object");
167
191
  context_id = rb_intern("@context");
192
+ scope_id = rb_intern("@scope");
168
193
 
169
194
  cSerializationDescriptor =
170
195
  rb_define_class_under(mPanko, "SerializationDescriptor", rb_cObject);
@@ -202,6 +227,8 @@ void panko_init_serialization_descriptor(VALUE mPanko) {
202
227
  rb_define_method(cSerializationDescriptor, "aliases=", sd_aliases_set, 1);
203
228
  rb_define_method(cSerializationDescriptor, "aliases", sd_aliases_aref, 0);
204
229
 
230
+ rb_define_method(cSerializationDescriptor, "scope=", sd_scope_set, 1);
231
+ rb_define_method(cSerializationDescriptor, "context=", sd_context_set, 1);
205
232
  rb_define_method(cSerializationDescriptor, "build_serializer",
206
233
  public_sd_build_serializer, 0);
207
234
  }
@@ -18,6 +18,8 @@ typedef struct _SerializationDescriptor {
18
18
  VALUE has_one_associations;
19
19
  VALUE has_many_associations;
20
20
 
21
+ VALUE context;
22
+ VALUE scope;
21
23
  AttributesWriter attributes_writer;
22
24
  } * SerializationDescriptor;
23
25
 
@@ -26,7 +28,7 @@ SerializationDescriptor sd_read(VALUE descriptor);
26
28
  void sd_mark(SerializationDescriptor data);
27
29
 
28
30
  VALUE sd_build_serializer(SerializationDescriptor descriptor);
29
- void sd_apply_serializer_config(VALUE serializer, VALUE object, VALUE context);
31
+ void sd_apply_serializer_config(SerializationDescriptor descriptor, VALUE serializer, VALUE object);
30
32
  void sd_set_writer(SerializationDescriptor sd, VALUE subject);
31
33
 
32
34
  void panko_init_serialization_descriptor(VALUE mPanko);
@@ -8,10 +8,19 @@ module Panko
8
8
  @subjects = subjects
9
9
  @each_serializer = options[:each_serializer]
10
10
 
11
+ if @each_serializer.nil?
12
+ raise ArgumentError, %{
13
+ Please pass valid each_serializer to ArraySerializer, for example:
14
+ > Panko::ArraySerializer.new(posts, each_serializer: PostSerializer)
15
+ }
16
+ end
17
+
11
18
 
12
19
  serializer_options = {
13
20
  only: options.fetch(:only, []),
14
- except: options.fetch(:except, [])
21
+ except: options.fetch(:except, []),
22
+ context: options[:context],
23
+ scope: options[:scope]
15
24
  }
16
25
 
17
26
  @descriptor = Panko::SerializationDescriptor.build(@each_serializer, serializer_options)
@@ -32,7 +41,7 @@ module Panko
32
41
 
33
42
  def serialize_to_json(subjects)
34
43
  writer = Oj::StringWriter.new(mode: :rails)
35
- Panko::serialize_subjects(subjects.to_a, writer, @descriptor, @context)
44
+ Panko::serialize_subjects(subjects.to_a, writer, @descriptor)
36
45
  writer.to_s
37
46
  end
38
47
  end
@@ -9,9 +9,13 @@ module Panko
9
9
  backend = Panko::SerializationDescriptor.duplicate(serializer._descriptor)
10
10
 
11
11
  if serializer.respond_to? :filters_for
12
- options.merge! serializer.filters_for(options[:context])
12
+ options.merge! serializer.filters_for(options[:context], options[:scope])
13
13
  end
14
+
15
+ backend.context = options[:context]
16
+ backend.scope = options[:scope]
14
17
  backend.apply_filters(options)
18
+
15
19
  backend
16
20
  end
17
21
 
@@ -35,6 +39,9 @@ module Panko
35
39
  backend.has_many_associations = descriptor.has_many_associations.dup
36
40
  backend.has_one_associations = descriptor.has_one_associations.dup
37
41
 
42
+ backend.context = nil
43
+ backend.scope = nil
44
+
38
45
  backend
39
46
  end
40
47
 
@@ -6,16 +6,22 @@ module Panko
6
6
  class Serializer
7
7
  class << self
8
8
  def inherited(base)
9
- base._descriptor = Panko::SerializationDescriptor.new
10
- base._descriptor.type = base
11
9
 
12
- base._descriptor.attributes = []
13
- base._descriptor.aliases = {}
10
+ unless _descriptor.nil?
11
+ base._descriptor = Panko::SerializationDescriptor.duplicate(_descriptor)
12
+ else
13
+ base._descriptor = Panko::SerializationDescriptor.new
14
+
15
+ base._descriptor.attributes = []
16
+ base._descriptor.aliases = {}
17
+
18
+ base._descriptor.method_fields = []
14
19
 
15
- base._descriptor.method_fields = []
20
+ base._descriptor.has_many_associations = []
21
+ base._descriptor.has_one_associations = []
22
+ end
23
+ base._descriptor.type = base
16
24
 
17
- base._descriptor.has_many_associations = []
18
- base._descriptor.has_one_associations = []
19
25
  end
20
26
 
21
27
  attr_accessor :_descriptor
@@ -72,9 +78,10 @@ module Panko
72
78
  def initialize(options = {})
73
79
  @descriptor = Panko::SerializationDescriptor.build(self.class, options)
74
80
  @context = options[:context]
81
+ @scope = options[:scope]
75
82
  end
76
83
 
77
- attr_reader :object, :context
84
+ attr_reader :object, :context, :scope
78
85
 
79
86
  def serialize(object)
80
87
  Oj.load(serialize_to_json(object))
@@ -82,13 +89,14 @@ module Panko
82
89
 
83
90
  def serialize_to_json(object)
84
91
  writer = Oj::StringWriter.new(mode: :rails)
85
- Panko::serialize_subject(object, writer, @descriptor, @context)
92
+ Panko::serialize_subject(object, writer, @descriptor)
86
93
  writer.to_s
87
94
  end
88
95
 
89
96
  def reset
90
97
  @object = nil
91
98
  @context = nil
99
+ @scope = nil
92
100
 
93
101
  self
94
102
  end
data/lib/panko/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Panko
3
- VERSION = "0.3.9"
3
+ VERSION = "0.4.0"
4
4
  end
@@ -22,9 +22,9 @@ Gem::Specification.new do |spec|
22
22
  spec.extensions << "ext/panko_serializer/extconf.rb"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.14"
25
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rake", "~> 10.5"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
  spec.add_development_dependency "rake-compiler"
28
28
 
29
- spec.add_dependency "oj", "~> 3.3.0"
29
+ spec.add_dependency "oj", "~> 3.6.0"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panko_serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yosi Attias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-18 00:00:00.000000000 Z
11
+ date: 2018-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '10.5'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '10.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 3.3.0
75
+ version: 3.6.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 3.3.0
82
+ version: 3.6.0
83
83
  description:
84
84
  email:
85
85
  - yosy101@gmail.com
@@ -102,7 +102,6 @@ files:
102
102
  - benchmarks/app.rb
103
103
  - benchmarks/benchmarking_support.rb
104
104
  - benchmarks/bm_ams_0_10.rb
105
- - benchmarks/bm_fastjsonapi.rb
106
105
  - benchmarks/bm_panko_json.rb
107
106
  - benchmarks/bm_panko_object.rb
108
107
  - benchmarks/bm_plain_object.rb
@@ -172,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
171
  version: '0'
173
172
  requirements: []
174
173
  rubyforge_project:
175
- rubygems_version: 2.7.4
174
+ rubygems_version: 2.7.6
176
175
  signing_key:
177
176
  specification_version: 4
178
177
  summary: Fast serialization for ActiveModel
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
- exit unless ENV.fetch("RAILS_VERSION", "4.2").start_with? "5"
3
-
4
- require_relative "./benchmarking_support"
5
- require_relative "./app"
6
- require_relative "./setup"
7
- require 'fast_jsonapi'
8
-
9
- class AuthorSerializer
10
- include FastJsonapi::ObjectSerializer
11
- attributes :id, :name
12
- end
13
-
14
-
15
- class PostFastSerializer
16
- include FastJsonapi::ObjectSerializer
17
- attributes :id, :body, :title, :author_id, :created_at
18
- end
19
-
20
- class PostWithHasOneFastSerializer
21
- include FastJsonapi::ObjectSerializer
22
- attributes :id, :body, :title, :author_id
23
-
24
- has_one :author
25
- end
26
-
27
- class AuthorWithHasManyFastSerializer
28
- include FastJsonapi::ObjectSerializer
29
- attributes :id, :name
30
-
31
- has_many :posts, serializer: :post_fast
32
- end
33
-
34
-
35
- def benchmark(prefix, serializer, options = {})
36
- data = Benchmark.data
37
- posts = data[:all]
38
- posts_50 = data[:small]
39
-
40
- merged_options = options.merge(each_serializer: serializer)
41
-
42
- Benchmark.run("FastJSONAPI_#{prefix}_Posts_#{posts.count}") do
43
- serializer.new(posts, merged_options).serialized_json
44
- end
45
-
46
- data = Benchmark.data
47
- posts = data[:all]
48
- posts_50 = data[:small]
49
-
50
- Benchmark.run("FastJSONAPI_#{prefix}_Posts_50") do
51
- serializer.new(posts_50, merged_options).serialized_json
52
- end
53
- end
54
-
55
- benchmark "Simple", PostFastSerializer
56
- benchmark "HasOne", PostWithHasOneFastSerializer, include: [:author]