serialize 1.0.0 → 1.1.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.
@@ -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