ardm-serializer 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +35 -0
- data/.travis.yml +11 -0
- data/Gemfile +81 -0
- data/LICENSE +20 -0
- data/README.rdoc +64 -0
- data/Rakefile +4 -0
- data/ardm-serializer.gemspec +28 -0
- data/benchmarks/to_json.rb +137 -0
- data/benchmarks/to_xml.rb +89 -0
- data/lib/ardm-serializer.rb +1 -0
- data/lib/dm-serializer.rb +14 -0
- data/lib/dm-serializer/common.rb +28 -0
- data/lib/dm-serializer/to_csv.rb +71 -0
- data/lib/dm-serializer/to_json.rb +103 -0
- data/lib/dm-serializer/to_xml.rb +126 -0
- data/lib/dm-serializer/to_yaml.rb +160 -0
- data/lib/dm-serializer/version.rb +5 -0
- data/lib/dm-serializer/xml.rb +56 -0
- data/lib/dm-serializer/xml/libxml.rb +44 -0
- data/lib/dm-serializer/xml/nokogiri.rb +44 -0
- data/lib/dm-serializer/xml/rexml.rb +36 -0
- data/spec/fixtures/cow.rb +11 -0
- data/spec/fixtures/planet.rb +46 -0
- data/spec/fixtures/quan_tum_cat.rb +15 -0
- data/spec/fixtures/vehicle.rb +14 -0
- data/spec/lib/serialization_method_shared_spec.rb +290 -0
- data/spec/public/serializer_spec.rb +7 -0
- data/spec/public/to_csv_spec.rb +72 -0
- data/spec/public/to_json_spec.rb +75 -0
- data/spec/public/to_xml_spec.rb +110 -0
- data/spec/public/to_yaml_spec.rb +59 -0
- data/spec/rcov.opts +6 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +26 -0
- data/tasks/spec.rake +38 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +185 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b9a3b759e035df936b3dedfd92358708957ac7e8
|
4
|
+
data.tar.gz: dff5952407b0df0c25c9652d56af3de02e7e049c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5679f89c1bcae61186706075dea152605ffdfdb71a285ec5bf82c19a10f7bdea8ca8ba29d06960145a96274b329fbb51369dec99014b11f1cb9484da55e77439
|
7
|
+
data.tar.gz: f513b39338c5da07f3d070e5cab7a9b5b459f81d02122f3fef834e926b335611ad63eaae3ef6f14b820169be65e02f387afa6c1f697292f3982c96f81fe77178
|
data/.gitignore
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## Rubinius
|
17
|
+
*.rbc
|
18
|
+
|
19
|
+
## PROJECT::GENERAL
|
20
|
+
*.gem
|
21
|
+
coverage
|
22
|
+
rdoc
|
23
|
+
pkg
|
24
|
+
tmp
|
25
|
+
doc
|
26
|
+
log
|
27
|
+
.yardoc
|
28
|
+
measurements
|
29
|
+
|
30
|
+
## BUNDLER
|
31
|
+
.bundle
|
32
|
+
Gemfile.*
|
33
|
+
|
34
|
+
## PROJECT::SPECIFIC
|
35
|
+
spec/db/
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
gemspec
|
6
|
+
|
7
|
+
SOURCE = ENV.fetch('SOURCE', :git).to_sym
|
8
|
+
REPO_POSTFIX = SOURCE == :path ? '' : '.git'
|
9
|
+
DATAMAPPER = SOURCE == :path ? Pathname(__FILE__).dirname.parent : 'http://github.com/ar-dm'
|
10
|
+
DM_VERSION = '~> 1.2.0'
|
11
|
+
DO_VERSION = '~> 0.10.6'
|
12
|
+
DM_DO_ADAPTERS = %w[ sqlite postgres mysql oracle sqlserver ]
|
13
|
+
CURRENT_BRANCH = ENV.fetch('GIT_BRANCH', 'master')
|
14
|
+
|
15
|
+
gem 'fastercsv', '~> 1.5'
|
16
|
+
gem 'multi_json', '~> 1.0'
|
17
|
+
gem 'json', '~> 1.6', :platforms => [ :ruby_18, :jruby ]
|
18
|
+
gem 'json_pure', '~> 1.6', :platforms => [ :mswin ]
|
19
|
+
|
20
|
+
gem 'ardm-core', DM_VERSION,
|
21
|
+
SOURCE => "#{DATAMAPPER}/ardm-core#{REPO_POSTFIX}",
|
22
|
+
:branch => CURRENT_BRANCH
|
23
|
+
|
24
|
+
group :development do
|
25
|
+
gem 'ardm-validations', DM_VERSION,
|
26
|
+
SOURCE => "#{DATAMAPPER}/ardm-validations#{REPO_POSTFIX}",
|
27
|
+
:branch => CURRENT_BRANCH
|
28
|
+
end
|
29
|
+
|
30
|
+
group :testing do
|
31
|
+
gem 'nokogiri', '~> 1.6'
|
32
|
+
gem 'libxml-ruby', '~> 2.0', :platforms => [ :mri, :mswin ]
|
33
|
+
end
|
34
|
+
|
35
|
+
platforms :mri_18 do
|
36
|
+
group :quality do
|
37
|
+
|
38
|
+
gem 'rcov', '~> 0.9.10'
|
39
|
+
gem 'yard', '~> 0.7.2'
|
40
|
+
gem 'yardstick', '~> 0.4'
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
group :datamapper do
|
46
|
+
|
47
|
+
adapters = ENV['ADAPTER'] || ENV['ADAPTERS']
|
48
|
+
adapters = adapters.to_s.tr(',', ' ').split.uniq - %w[ in_memory ]
|
49
|
+
|
50
|
+
if (do_adapters = DM_DO_ADAPTERS & adapters).any?
|
51
|
+
do_options = {}
|
52
|
+
do_options[:git] = "#{DATAMAPPER}/do#{REPO_POSTFIX}" if ENV['DO_GIT'] == 'true'
|
53
|
+
|
54
|
+
gem 'data_objects', DO_VERSION, do_options.dup
|
55
|
+
|
56
|
+
do_adapters.each do |adapter|
|
57
|
+
adapter = 'sqlite3' if adapter == 'sqlite'
|
58
|
+
gem "do_#{adapter}", DO_VERSION, do_options.dup
|
59
|
+
end
|
60
|
+
|
61
|
+
gem 'ardm-do-adapter', DM_VERSION,
|
62
|
+
SOURCE => "#{DATAMAPPER}/ardm-do-adapter#{REPO_POSTFIX}",
|
63
|
+
:branch => CURRENT_BRANCH
|
64
|
+
end
|
65
|
+
|
66
|
+
adapters.each do |adapter|
|
67
|
+
gem "ardm-#{adapter}-adapter", DM_VERSION,
|
68
|
+
SOURCE => "#{DATAMAPPER}/ardm-#{adapter}-adapter#{REPO_POSTFIX}",
|
69
|
+
:branch => CURRENT_BRANCH
|
70
|
+
end
|
71
|
+
|
72
|
+
plugins = ENV['PLUGINS'] || ENV['PLUGIN']
|
73
|
+
plugins = plugins.to_s.tr(',', ' ').split.push('ardm-migrations').uniq
|
74
|
+
|
75
|
+
plugins.each do |plugin|
|
76
|
+
gem plugin, DM_VERSION,
|
77
|
+
SOURCE => "#{DATAMAPPER}/#{plugin}#{REPO_POSTFIX}",
|
78
|
+
:branch => CURRENT_BRANCH
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Guy van den Berg
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
= dm-serializer
|
2
|
+
|
3
|
+
== Overview
|
4
|
+
|
5
|
+
dm-serializer allows DataMapper models and collections to be serialized to a variety of formats (currently JSON, XML, YAML and CSV).
|
6
|
+
|
7
|
+
== How it works
|
8
|
+
|
9
|
+
One method is added to each model/collection for each serialization type - <tt>to_json</tt>, <tt>to_xml</tt>, <tt>to_yaml</tt>, and <tt>to_csv</tt>. With the exception of <tt>to_csv</tt>, all of these methods share the same interface. <tt>to_json</tt> will be used for examples. Any method specific behaviour is documented in its own section below.
|
10
|
+
|
11
|
+
require 'dm-serializer'
|
12
|
+
|
13
|
+
class Cow
|
14
|
+
include DataMapper::Resource
|
15
|
+
|
16
|
+
property :id, Integer, :key => true
|
17
|
+
property :name, String
|
18
|
+
|
19
|
+
def description
|
20
|
+
"A Cow"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
cow = Cow.create(
|
25
|
+
:id => 1,
|
26
|
+
:name => "Berta"
|
27
|
+
)
|
28
|
+
|
29
|
+
cow.to_json # => { "id": 1, "name": "Berta" }
|
30
|
+
cow.to_json(:only => [:name]) # => { "name": "Berta" }
|
31
|
+
cow.to_json(:exclude => [:id]) # => { "name": "Berta" }
|
32
|
+
cow.to_json(:methods => [:desc]) # => { "id": 1, "name": "Berta", "desc": "A Cow" }
|
33
|
+
|
34
|
+
You can include associations by passing the association accessor the <tt>:methods</tt> option.
|
35
|
+
|
36
|
+
If you want to only load a particular serialization method, that's cool, you can do that:
|
37
|
+
|
38
|
+
require 'dm-serializer/to_json'
|
39
|
+
|
40
|
+
== to_xml
|
41
|
+
|
42
|
+
<tt>to_xml</tt> supports some extra options to allow you to override the element names
|
43
|
+
|
44
|
+
cow.to_xml(:element_name => 'bovine') # => <bovine><id>1</id><name>Berta</name></bovine>
|
45
|
+
cows.to_xml(:collection_element_name => 'kine') # => <kine><bovine><id>1</id><name>Berta</name></bovine></kine>
|
46
|
+
|
47
|
+
|
48
|
+
If you would like a nice speed boost (~5x), require <tt>libxml</tt> or <tt>nokogiri</tt> before <tt>dm-serializer</tt>, and that library will be used rather than REXML.
|
49
|
+
|
50
|
+
== to_csv
|
51
|
+
|
52
|
+
<tt>to_csv</tt> currently doesn't support any options yet. It will in the future. It will not support serializing child associations.
|
53
|
+
|
54
|
+
|
55
|
+
== Arrays, Hashes, and other core classes
|
56
|
+
|
57
|
+
<tt>dm-serializer</tt> only adds serialization methods to DataMapper objects and collections, however some libraries used (json, yaml) add methods to core classes, such as <tt>Array</tt>. Note that passing <tt>dm-serializer</tt> options (such as <tt>:only</tt>) to these methods is *not supported*.
|
58
|
+
|
59
|
+
Cow.all.to_a.to_yaml(:only => 'name') # WILL NOT WORK
|
60
|
+
|
61
|
+
|
62
|
+
== Beware
|
63
|
+
|
64
|
+
If you go spelunking through the code you will find other undocumented options. Use at your own risk, I plan on removing or changing these in the near future.
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/dm-serializer/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "ardm-serializer"
|
6
|
+
gem.version = DataMapper::Serializer::VERSION
|
7
|
+
|
8
|
+
gem.authors = [ 'Martin Emde', 'Guy van den Berg', 'Dan Kubb' ]
|
9
|
+
gem.email = [ 'me@martinemde.com', "dan.kubb@gmail.com" ]
|
10
|
+
gem.summary = 'Ardm fork of dm-serializer'
|
11
|
+
gem.description = "DataMapper plugin for serializing Resources and Collections"
|
12
|
+
gem.homepage = "https://github.com/ar-dm/ardm-serializer"
|
13
|
+
gem.license = 'MIT'
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split("\n")
|
16
|
+
gem.test_files = `git ls-files -- {spec}/*`.split("\n")
|
17
|
+
gem.extra_rdoc_files = %w[LICENSE README.rdoc]
|
18
|
+
gem.require_paths = [ "lib" ]
|
19
|
+
|
20
|
+
gem.add_runtime_dependency 'ardm-core', '~> 1.2'
|
21
|
+
gem.add_runtime_dependency 'fastercsv', '~> 1.5'
|
22
|
+
gem.add_runtime_dependency 'multi_json', '~> 1.0'
|
23
|
+
gem.add_runtime_dependency 'json', '~> 1.6'
|
24
|
+
gem.add_runtime_dependency 'json_pure', '~> 1.6'
|
25
|
+
|
26
|
+
gem.add_development_dependency 'rake', '~> 0.9'
|
27
|
+
gem.add_development_dependency 'rspec', '~> 1.3'
|
28
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require 'pathname'
|
3
|
+
require 'better-benchmark'
|
4
|
+
|
5
|
+
gem 'dm-core', '1.0.0'
|
6
|
+
require 'dm-core'
|
7
|
+
|
8
|
+
spec_dir_path = Pathname(__FILE__).dirname.expand_path
|
9
|
+
$LOAD_PATH.unshift(spec_dir_path.parent + 'lib/')
|
10
|
+
require 'dm-serializer'
|
11
|
+
|
12
|
+
def load_driver(name, default_uri)
|
13
|
+
begin
|
14
|
+
DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
|
15
|
+
DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
|
16
|
+
DataMapper::Repository.adapters[:alternate] = DataMapper::Repository.adapters[name]
|
17
|
+
true
|
18
|
+
rescue LoadError => e
|
19
|
+
warn "Could not load do_#{name}: #{e}"
|
20
|
+
false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
HAS_SQLITE3 = load_driver(:sqlite3, 'sqlite3::memory:')
|
25
|
+
|
26
|
+
module DataMapper
|
27
|
+
module Serialize
|
28
|
+
# Serialize a Resource to JavaScript Object Notation (JSON; RFC 4627)
|
29
|
+
#
|
30
|
+
# @return <String> a JSON representation of the Resource
|
31
|
+
def to_json_old(*args)
|
32
|
+
options = args.first || {}
|
33
|
+
result = '{ '
|
34
|
+
fields = []
|
35
|
+
|
36
|
+
propset = properties_to_serialize(options)
|
37
|
+
|
38
|
+
fields += propset.map do |property|
|
39
|
+
"#{property.name.to_json}: #{send(property.name).to_json}"
|
40
|
+
end
|
41
|
+
|
42
|
+
# add methods
|
43
|
+
(options[:methods] || []).each do |meth|
|
44
|
+
if self.respond_to?(meth)
|
45
|
+
fields << "#{meth.to_json}: #{send(meth).to_json}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Note: if you want to include a whole other model via relation, use :methods
|
50
|
+
# comments.to_json(:relationships=>{:user=>{:include=>[:first_name],:methods=>[:age]}})
|
51
|
+
# add relationships
|
52
|
+
# TODO: This needs tests and also needs to be ported to #to_xml and #to_yaml
|
53
|
+
(options[:relationships] || {}).each do |rel,opts|
|
54
|
+
if self.respond_to?(rel)
|
55
|
+
fields << "#{rel.to_json}: #{send(rel).to_json(opts)}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
result << fields.join(', ')
|
60
|
+
result << ' }'
|
61
|
+
result
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class Collection
|
66
|
+
def to_json_old(*args)
|
67
|
+
opts = args.first || {}
|
68
|
+
'[' << map { |e| e.to_json_old(opts) }.join(',') << ']'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
class Cow
|
77
|
+
include DataMapper::Resource
|
78
|
+
|
79
|
+
property :id, Integer, :key => true
|
80
|
+
property :composite, Integer, :key => true
|
81
|
+
property :name, String
|
82
|
+
property :breed, String
|
83
|
+
|
84
|
+
has n, :baby_cows, :model => 'Cow'
|
85
|
+
belongs_to :mother_cow, :model => 'Cow', :required => false
|
86
|
+
end
|
87
|
+
|
88
|
+
DataMapper.auto_migrate!
|
89
|
+
cow = Cow.create(
|
90
|
+
:id => 89,
|
91
|
+
:composite => 34,
|
92
|
+
:name => 'Berta',
|
93
|
+
:breed => 'Guernsey'
|
94
|
+
)
|
95
|
+
|
96
|
+
10.times do |n|
|
97
|
+
Cow.create(
|
98
|
+
:id => n*10,
|
99
|
+
:composite => n,
|
100
|
+
:name => "Bertha"*n,
|
101
|
+
:breed => "Mooing#{n}"
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
all_cows = Cow.all.reload
|
106
|
+
|
107
|
+
puts "Benchmarking single resource serialization."
|
108
|
+
puts "Set 1: old method"
|
109
|
+
puts "Set 2: new method"
|
110
|
+
result = Benchmark.compare_realtime(
|
111
|
+
:iterations => 10,
|
112
|
+
:inner_iterations => 20000,
|
113
|
+
:verbose => true
|
114
|
+
) { |iteration|
|
115
|
+
cow.to_json_old
|
116
|
+
}.with { |iteration|
|
117
|
+
cow.to_json
|
118
|
+
}
|
119
|
+
|
120
|
+
Benchmark.report_on result
|
121
|
+
|
122
|
+
puts
|
123
|
+
|
124
|
+
puts "Benchmarking collection serialization."
|
125
|
+
puts "Set 1: old method"
|
126
|
+
puts "Set 2: new method"
|
127
|
+
result = Benchmark.compare_realtime(
|
128
|
+
:iterations => 10,
|
129
|
+
:inner_iterations => 5000,
|
130
|
+
:verbose => true
|
131
|
+
) { |iteration|
|
132
|
+
all_cows.to_json_old
|
133
|
+
}.with { |iteration|
|
134
|
+
all_cows.to_json
|
135
|
+
}
|
136
|
+
|
137
|
+
Benchmark.report_on result
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
gem 'dm-core', '1.0.0'
|
5
|
+
require 'dm-core'
|
6
|
+
|
7
|
+
spec_dir_path = Pathname(__FILE__).dirname.expand_path
|
8
|
+
$LOAD_PATH.unshift(spec_dir_path.parent + 'lib/')
|
9
|
+
require 'dm-serializer'
|
10
|
+
|
11
|
+
def load_driver(name, default_uri)
|
12
|
+
begin
|
13
|
+
DataMapper.setup(name, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
|
14
|
+
DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
|
15
|
+
DataMapper::Repository.adapters[:alternate] = DataMapper::Repository.adapters[name]
|
16
|
+
true
|
17
|
+
rescue LoadError => e
|
18
|
+
warn "Could not load do_#{name}: #{e}"
|
19
|
+
false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
HAS_SQLITE3 = load_driver(:sqlite3, 'sqlite3::memory:')
|
24
|
+
|
25
|
+
class Cow
|
26
|
+
include DataMapper::Resource
|
27
|
+
|
28
|
+
property :id, Integer, :key => true
|
29
|
+
property :composite, Integer, :key => true
|
30
|
+
property :name, String
|
31
|
+
property :breed, String
|
32
|
+
|
33
|
+
has n, :baby_cows, :model => 'Cow'
|
34
|
+
belongs_to :mother_cow, :model => 'Cow'
|
35
|
+
end
|
36
|
+
|
37
|
+
require "benchwarmer"
|
38
|
+
|
39
|
+
TIMES = 2000
|
40
|
+
DataMapper.auto_migrate!
|
41
|
+
cow = Cow.create(
|
42
|
+
:id => 89,
|
43
|
+
:composite => 34,
|
44
|
+
:name => 'Berta',
|
45
|
+
:breed => 'Guernsey'
|
46
|
+
)
|
47
|
+
all_cows = Cow.all
|
48
|
+
|
49
|
+
puts "REXML"
|
50
|
+
Benchmark.warmer(TIMES) do
|
51
|
+
group("Serialization:") do
|
52
|
+
report "Single Resource" do
|
53
|
+
cow.to_xml
|
54
|
+
end
|
55
|
+
report "Collection" do
|
56
|
+
all_cows.to_xml
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
require 'nokogiri'
|
62
|
+
load 'dm-serializer/xml_serializers.rb'
|
63
|
+
|
64
|
+
puts "Nokogiri"
|
65
|
+
Benchmark.warmer(TIMES) do
|
66
|
+
group("Serialization:") do
|
67
|
+
report "Single Resource" do
|
68
|
+
cow.to_xml
|
69
|
+
end
|
70
|
+
report "Collection" do
|
71
|
+
all_cows.to_xml
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
require 'libxml'
|
77
|
+
load 'dm-serializer/xml_serializers.rb'
|
78
|
+
|
79
|
+
puts "LibXML"
|
80
|
+
Benchmark.warmer(TIMES) do
|
81
|
+
group("Serialization:") do
|
82
|
+
report "Single Resource" do
|
83
|
+
cow.to_xml
|
84
|
+
end
|
85
|
+
report "Collection" do
|
86
|
+
all_cows.to_xml
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|