panko_serializer 0.3.3 → 0.3.4

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: eef3c77d8a03018af85326b4c07890d6d543909925c664f6baf6f20f634033e2
4
- data.tar.gz: 28c88dea3cd021f1ba3cb5e31b21e03f3ddb9cdbf4851cccafa78770d742a994
3
+ metadata.gz: f2b1c0dbc2c75d9b48d7b2057ef66f2150702e86db83110e552ba8b99dfb7662
4
+ data.tar.gz: b980005c2670d69ba9093fd9aa4bee57f2f106eeedbccbd8739b64004591f62b
5
5
  SHA512:
6
- metadata.gz: edbe1e16a0216d8cd9e8af32289e6b173565ad7d1b50c3177f90a2cc683fd00d26cf7248e0d563e4a76916e481d0723b23041fe6973c5df05b180227e1da82fe
7
- data.tar.gz: d0883a7ba84ff19d57738d56846ca9fc9b4ed70d6343c6280225ccfa83abe6489d611b64cea4be294ce4ddccfc8e992be55545fd6ff18bf65936fae91db94ce3
6
+ metadata.gz: d27d528c54db62acffb611c5eba616f6346e410a78c9fe52835ccb5a60c4253e890f58dbc4aa6316f496db45fd1da7b4b79b4751fbd3898588b91efe715fb83e
7
+ data.tar.gz: ddf22bfc9d998fea61482a9e6ec71c460848401b7c922352f1c37395e717944c7cad77537133f90751a6cc9581e507cbb06d927af484f03bded9966a74e549e3
data/benchmarks/sanity.rb CHANGED
@@ -3,6 +3,40 @@ require_relative "./benchmarking_support"
3
3
  require_relative "./app"
4
4
  require_relative "./setup"
5
5
 
6
+ class PostWithAliasModel < ActiveRecord::Base
7
+ self.table_name = 'posts'
8
+
9
+ alias_attribute :new_id, :id
10
+ alias_attribute :new_body, :body
11
+ alias_attribute :new_title, :title
12
+ alias_attribute :new_author_id, :author_id
13
+ alias_attribute :new_created_at, :created_at
14
+ end
15
+
16
+ class PostWithAliasFastSerializer < Panko::Serializer
17
+ attributes :new_id, :new_body, :new_title, :new_author_id, :new_created_at
18
+ end
19
+
20
+ def benchmark_aliased(prefix, serializer, options = {})
21
+ posts = PostWithAliasModel.all.to_a
22
+ posts_50 = posts.first(50).to_a
23
+ data = { all: posts, small: posts_50 }
24
+
25
+ merged_options = options.merge(each_serializer: serializer)
26
+
27
+ Benchmark.run("Panko_#{prefix}_PostWithAliasModels_#{posts.count}") do
28
+ Panko::ArraySerializer.new(posts, merged_options).to_json
29
+ end
30
+
31
+ posts = PostWithAliasModel.all.to_a
32
+ posts_50 = posts.first(50).to_a
33
+ data = { all: posts, small: posts_50 }
34
+
35
+ Benchmark.run("Panko_#{prefix}_Posts_50") do
36
+ Panko::ArraySerializer.new(posts_50, merged_options).to_json
37
+ end
38
+ end
39
+
6
40
  class AuthorFastSerializer < Panko::Serializer
7
41
  attributes :id, :name
8
42
  end
@@ -55,7 +89,7 @@ end
55
89
 
56
90
 
57
91
 
58
-
59
- benchmark 'SimpleWithMethodCall', PostFastWithMethodCallSerializer
92
+ benchmark "SimpleWithMethodCall", PostFastWithMethodCallSerializer
60
93
  benchmark "HasOne", PostWithHasOneFastSerializer
61
94
  benchmark "Simple", PostFastSerializer
95
+ benchmark_aliased "Simple (aliased)", PostWithAliasFastSerializer
@@ -1,5 +1,6 @@
1
1
  #include "attribute.h"
2
2
 
3
+ ID attribute_aliases_id = 0;
3
4
  VALUE cAttribute;
4
5
 
5
6
  static void attribute_free(void* ptr) {
@@ -50,6 +51,23 @@ void attribute_try_invalidate(Attribute attribute, VALUE new_record_class) {
50
51
  if (rb_equal(attribute->record_class, new_record_class) == Qfalse) {
51
52
  attribute->type = Qnil;
52
53
  attribute->record_class = new_record_class;
54
+
55
+ // Once the record class is changed for this attribute, check if
56
+ // we attribute_aliases (from ActivRecord), if so fill in
57
+ // performance wise - this code should be called once (unless the serialzier
58
+ // is polymorphic)
59
+ volatile VALUE ar_aliases_hash =
60
+ rb_funcall(new_record_class, attribute_aliases_id, 0);
61
+
62
+ if (!panko_is_empty_hash(ar_aliases_hash)) {
63
+ volatile VALUE aliasedValue =
64
+ rb_hash_aref(ar_aliases_hash, attribute->name_str);
65
+ if (aliasedValue != Qnil) {
66
+ attribute->alias_name = attribute->name_str;
67
+ attribute->name_str = aliasedValue;
68
+ attribute->name_id = rb_intern_str(attribute->name_str);
69
+ }
70
+ }
53
71
  }
54
72
  }
55
73
 
@@ -64,6 +82,8 @@ VALUE attribute_alias_name_ref(VALUE self) {
64
82
  }
65
83
 
66
84
  void panko_init_attribute(VALUE mPanko) {
85
+ attribute_aliases_id = rb_intern("attribute_aliases");
86
+
67
87
  cAttribute = rb_define_class_under(mPanko, "Attribute", rb_cObject);
68
88
 
69
89
  rb_define_module_function(cAttribute, "new", attribute_new, -1);
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "byebug"
3
2
 
4
3
  class Panko::SerializerResolver
5
4
 
data/lib/panko/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Panko
3
- VERSION = "0.3.3"
3
+ VERSION = "0.3.4"
4
4
  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.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yosi Attias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-23 00:00:00.000000000 Z
11
+ date: 2018-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
165
  version: '0'
166
166
  requirements: []
167
167
  rubyforge_project:
168
- rubygems_version: 2.7.3
168
+ rubygems_version: 2.7.4
169
169
  signing_key:
170
170
  specification_version: 4
171
171
  summary: Fast serialization for ActiveModel