serialize 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ### 1.1.0
4
+
5
+ * The object to be serialized can be passed into the structure for speed improvements
6
+ * Benchmarked method_missing vs. passing in the object
7
+
3
8
  ### 1.0.0
4
9
 
5
10
  * XML support is disabled by default, but it can be enabled
data/README.md CHANGED
@@ -20,23 +20,23 @@ Or install it yourself as:
20
20
 
21
21
  class UserSerializer < Serialize
22
22
  # create a default serialization structure
23
- structure do
23
+ structure do |user|
24
24
  {
25
- :name => name,
26
- :gender => gender,
27
- :email => email
25
+ :name => user.name,
26
+ :gender => user.gender,
27
+ :email => user.email
28
28
  }
29
29
  end
30
30
 
31
31
  # create a named serialization structure
32
32
  structure :extended do
33
33
  {
34
- :name => name,
35
- :gender => gender,
36
- :email => email,
37
- :height => height,
38
- :eye_color => eye_color,
39
- :hair_color => hair_color
34
+ :name => user.name,
35
+ :gender => user.gender,
36
+ :email => user.email,
37
+ :height => user.height,
38
+ :eye_color => user.eye_color,
39
+ :hair_color => user.hair_color
40
40
  }
41
41
  end
42
42
  end
data/Rakefile CHANGED
@@ -4,3 +4,7 @@ require "bundler/gem_tasks"
4
4
  task :default do
5
5
  exec "ruby -Itest:lib test/all.rb"
6
6
  end
7
+
8
+ task :bench do
9
+ exec "ruby -Itest:lib test/*_benchmark.rb"
10
+ end
@@ -13,7 +13,10 @@ class Serialize
13
13
  end
14
14
 
15
15
  def to_hash
16
- instance_eval &@block
16
+ case @block.arity
17
+ when 0 then instance_eval &@block
18
+ when 1 then @block.call(@object)
19
+ end
17
20
  end
18
21
 
19
22
  def method_missing(*args, &block)
@@ -1,3 +1,3 @@
1
1
  class Serialize
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -21,6 +21,12 @@ class SerializeTest < MiniTest::Unit::TestCase
21
21
  assert_equal @user_hash.to_json, serializer.to_json
22
22
  end
23
23
 
24
+ def test_new_json_serialization
25
+ @user_hash[:email] = @user.email
26
+ serializer = UserSerializer.new(@user, as: :new)
27
+ assert_equal @user_hash.to_json, serializer.to_json
28
+ end
29
+
24
30
  def test_collection_json_serialization
25
31
  serializer = UserSerializer.new(@collection)
26
32
  assert_equal @hash_collection.to_json, serializer.to_json
@@ -0,0 +1,64 @@
1
+ require "serialize"
2
+ require "support/mock_user"
3
+ require "support/mock_resource"
4
+ require "support/user_serializer"
5
+ require "support/resource_serializer"
6
+
7
+ require "minitest/benchmark"
8
+ require "minitest/autorun"
9
+
10
+ class BenchSerializationTest < MiniTest::Unit::TestCase
11
+ def self.bench_range
12
+ [100, 1_000, 10_000, 100_000, 1_000_000]
13
+ end
14
+
15
+ def bench_with_method_missing
16
+ assert_performance_linear do |n|
17
+ collection = n.times.map do
18
+ User.new(:name => "John Smith", :age => "27", :gender => "M")
19
+ end
20
+
21
+ UserSerializer.new(collection).to("application/json")
22
+ end
23
+ end
24
+
25
+ def bench_without_method_missing
26
+ assert_performance_linear do |n|
27
+ collection = n.times.map do
28
+ User.new(:name => "John Smith", :age => "27", :gender => "M")
29
+ end
30
+
31
+ UserSerializer.new(collection, :as => :new).to("application/json")
32
+ end
33
+ end
34
+
35
+ class User
36
+ attr :name
37
+ attr :age
38
+ attr :gender
39
+
40
+ def initialize(args={})
41
+ @name = args[:name]
42
+ @age = args[:age]
43
+ @gender = args[:gender]
44
+ end
45
+ end
46
+
47
+ class UserSerializer < Serialize
48
+ structure do
49
+ {
50
+ :name => name,
51
+ :age => age,
52
+ :gender => gender
53
+ }
54
+ end
55
+
56
+ structure(:new) do |user|
57
+ {
58
+ :name => user.name,
59
+ :age => user.age,
60
+ :gender => user.gender
61
+ }
62
+ end
63
+ end
64
+ end
@@ -13,4 +13,12 @@ class UserSerializer < Serialize
13
13
  email: email
14
14
  }
15
15
  end
16
+
17
+ structure :new do |user|
18
+ {
19
+ name: user.name,
20
+ age: user.age,
21
+ email: user.email
22
+ }
23
+ end
16
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serialize
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-12 00:00:00.000000000 Z
12
+ date: 2012-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yajl-ruby
@@ -51,6 +51,7 @@ files:
51
51
  - test/all.rb
52
52
  - test/serialize/generator_test.rb
53
53
  - test/serialize_test.rb
54
+ - test/structure_benchmark.rb
54
55
  - test/support/mock_resource.rb
55
56
  - test/support/mock_user.rb
56
57
  - test/support/resource_serializer.rb
@@ -84,6 +85,7 @@ test_files:
84
85
  - test/all.rb
85
86
  - test/serialize/generator_test.rb
86
87
  - test/serialize_test.rb
88
+ - test/structure_benchmark.rb
87
89
  - test/support/mock_resource.rb
88
90
  - test/support/mock_user.rb
89
91
  - test/support/resource_serializer.rb