dm-serializer 1.0.2 → 1.1.0.rc1
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.
- data/Gemfile +32 -95
- data/LICENSE +1 -1
- data/Rakefile +2 -11
- data/VERSION +1 -1
- data/dm-serializer.gemspec +76 -72
- data/lib/dm-serializer/to_json.rb +12 -27
- data/lib/dm-serializer/to_xml.rb +1 -1
- data/lib/dm-serializer/to_yaml.rb +1 -1
- data/spec/fixtures/vehicle.rb +14 -0
- data/spec/lib/serialization_method_shared_spec.rb +11 -1
- data/spec/public/to_json_spec.rb +15 -0
- data/tasks/spec.rake +0 -3
- metadata +64 -63
- data/.gitignore +0 -37
- data/tasks/ci.rake +0 -1
- data/tasks/local_gemfile.rake +0 -16
- data/tasks/metrics.rake +0 -36
data/Gemfile
CHANGED
@@ -1,115 +1,52 @@
|
|
1
|
-
|
2
|
-
# recommended to create a local Gemfile and use this instead of the git
|
3
|
-
# sources. This will make sure that you are developing against your
|
4
|
-
# other local datamapper sources that you currently work on. Gemfile.local
|
5
|
-
# will behave identically to the standard Gemfile apart from the fact that
|
6
|
-
# it fetches the datamapper gems from local paths. This means that you can use
|
7
|
-
# the same environment variables, like ADAPTER(S) or PLUGIN(S) when running
|
8
|
-
# bundle commands. Gemfile.local is added to .gitignore, so you don't need to
|
9
|
-
# worry about accidentally checking local development paths into git.
|
10
|
-
# In order to create a local Gemfile, all you need to do is run:
|
11
|
-
#
|
12
|
-
# bundle exec rake local_gemfile
|
13
|
-
#
|
14
|
-
# This will give you a Gemfile.local file that points to your local clones of
|
15
|
-
# the various datamapper gems. It's assumed that all datamapper repo clones
|
16
|
-
# reside in the same directory. You can use the Gemfile.local like so for
|
17
|
-
# running any bundle command:
|
18
|
-
#
|
19
|
-
# BUNDLE_GEMFILE=Gemfile.local bundle foo
|
20
|
-
#
|
21
|
-
# You can also specify which adapter(s) should be part of the bundle by setting
|
22
|
-
# an environment variable. This of course also works when using the Gemfile.local
|
23
|
-
#
|
24
|
-
# bundle foo # dm-sqlite-adapter
|
25
|
-
# ADAPTER=mysql bundle foo # dm-mysql-adapter
|
26
|
-
# ADAPTERS=sqlite,mysql bundle foo # dm-sqlite-adapter and dm-mysql-adapter
|
27
|
-
#
|
28
|
-
# Of course you can also use the ADAPTER(S) variable when using the Gemfile.local
|
29
|
-
# and running specs against selected adapters.
|
30
|
-
#
|
31
|
-
# For easily working with adapters supported on your machine, it's recommended
|
32
|
-
# that you first install all adapters that you are planning to use or work on
|
33
|
-
# by doing something like
|
34
|
-
#
|
35
|
-
# ADAPTERS=sqlite,mysql,postgres bundle install
|
36
|
-
#
|
37
|
-
# This will clone the various repositories and make them available to bundler.
|
38
|
-
# Once you have them installed you can easily switch between adapters for the
|
39
|
-
# various development tasks. Running something like
|
40
|
-
#
|
41
|
-
# ADAPTER=mysql bundle exec rake spec
|
42
|
-
#
|
43
|
-
# will make sure that the dm-mysql-adapter is part of the bundle, and will be used
|
44
|
-
# when running the specs.
|
45
|
-
#
|
46
|
-
# You can also specify which plugin(s) should be part of the bundle by setting
|
47
|
-
# an environment variable. This also works when using the Gemfile.local
|
48
|
-
#
|
49
|
-
# bundle foo # dm-migrations
|
50
|
-
# PLUGINS=dm-validations bundle foo # dm-migrations and dm-validations
|
51
|
-
# PLUGINS=dm-validations,dm-types bundle foo # dm-migrations, dm-validations and dm-types
|
52
|
-
#
|
53
|
-
# Of course you can combine the PLUGIN(S) and ADAPTER(S) env vars to run specs
|
54
|
-
# for certain adapter/plugin combinations.
|
55
|
-
#
|
56
|
-
# Finally, to speed up running specs and other tasks, it's recommended to run
|
57
|
-
#
|
58
|
-
# bundle lock
|
59
|
-
#
|
60
|
-
# after running 'bundle install' for the first time. This will make 'bundle exec' run
|
61
|
-
# a lot faster compared to the unlocked version. With an unlocked bundle you would
|
62
|
-
# typically just run 'bundle install' from time to time to fetch the latest sources from
|
63
|
-
# upstream. When you locked your bundle, you need to run
|
64
|
-
#
|
65
|
-
# bundle install --relock
|
66
|
-
#
|
67
|
-
# to make sure to fetch the latest updates and then lock the bundle again. Gemfile.lock
|
68
|
-
# is added to the .gitignore file, so you don't need to worry about accidentally checking
|
69
|
-
# it into version control.
|
1
|
+
require 'pathname'
|
70
2
|
|
71
3
|
source 'http://rubygems.org'
|
72
4
|
|
73
|
-
|
74
|
-
|
5
|
+
SOURCE = ENV.fetch('SOURCE', :git).to_sym
|
6
|
+
REPO_POSTFIX = SOURCE == :path ? '' : '.git'
|
7
|
+
DATAMAPPER = SOURCE == :path ? Pathname(__FILE__).dirname.parent : 'http://github.com/datamapper'
|
8
|
+
DM_VERSION = '~> 1.1.0.rc1'
|
75
9
|
|
76
|
-
group :runtime do
|
10
|
+
group :runtime do
|
77
11
|
|
78
12
|
if ENV['EXTLIB']
|
79
|
-
gem 'extlib',
|
13
|
+
gem 'extlib', '~> 0.9.15', SOURCE => "#{DATAMAPPER}/extlib#{REPO_POSTFIX}", :require => nil
|
80
14
|
else
|
81
|
-
gem 'activesupport', '~> 3.0.
|
15
|
+
gem 'activesupport', '~> 3.0.4', :require => nil
|
16
|
+
gem 'i18n', '~> 0.5.0'
|
82
17
|
end
|
83
18
|
|
84
|
-
gem 'dm-core', DM_VERSION,
|
19
|
+
gem 'dm-core', DM_VERSION, SOURCE => "#{DATAMAPPER}/dm-core#{REPO_POSTFIX}"
|
85
20
|
gem 'fastercsv', '~> 1.5.3'
|
86
|
-
gem '
|
21
|
+
gem 'json', '~> 1.5.1'
|
87
22
|
|
88
23
|
end
|
89
24
|
|
90
|
-
group
|
91
|
-
|
92
|
-
gem 'dm-validations', DM_VERSION, :git => "#{DATAMAPPER}/dm-validations.git"
|
93
|
-
gem 'nokogiri', '~> 1.4.1'
|
25
|
+
group :development do
|
94
26
|
|
27
|
+
gem 'dm-validations', DM_VERSION, SOURCE => "#{DATAMAPPER}/dm-validations#{REPO_POSTFIX}"
|
28
|
+
gem 'jeweler', '~> 1.5.2'
|
95
29
|
gem 'rake', '~> 0.8.7'
|
96
|
-
gem 'rspec', '~> 1.3
|
97
|
-
|
30
|
+
gem 'rspec', '~> 1.3.1'
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
group :testing do
|
35
|
+
|
36
|
+
gem 'nokogiri', '~> 1.4.1'
|
37
|
+
gem 'libxml-ruby', '~> 1.1.4', :platforms => [ :mri, :mswin ]
|
98
38
|
|
99
39
|
end
|
100
40
|
|
101
|
-
group :quality do
|
41
|
+
group :quality do
|
102
42
|
|
103
|
-
gem '
|
104
|
-
gem '
|
105
|
-
gem '
|
106
|
-
gem 'roodi', '~> 2.1'
|
107
|
-
gem 'yard', '~> 0.5'
|
108
|
-
gem 'yardstick', '~> 0.1'
|
43
|
+
gem 'rcov', '~> 0.9.9', :platforms => :mri_18
|
44
|
+
gem 'yard', '~> 0.6'
|
45
|
+
gem 'yardstick', '~> 0.2'
|
109
46
|
|
110
47
|
end
|
111
48
|
|
112
|
-
group :datamapper do
|
49
|
+
group :datamapper do
|
113
50
|
|
114
51
|
adapters = ENV['ADAPTER'] || ENV['ADAPTERS']
|
115
52
|
adapters = adapters.to_s.tr(',', ' ').split.uniq - %w[ in_memory ]
|
@@ -119,27 +56,27 @@ group :datamapper do # We need this because we want to pin these dependencies to
|
|
119
56
|
|
120
57
|
if (do_adapters = DM_DO_ADAPTERS & adapters).any?
|
121
58
|
options = {}
|
122
|
-
options[:git] = "#{DATAMAPPER}/do
|
59
|
+
options[:git] = "#{DATAMAPPER}/do#{REPO_POSTFIX}" if ENV['DO_GIT'] == 'true'
|
123
60
|
|
124
|
-
gem 'data_objects',
|
61
|
+
gem 'data_objects', DO_VERSION, options.dup
|
125
62
|
|
126
63
|
do_adapters.each do |adapter|
|
127
64
|
adapter = 'sqlite3' if adapter == 'sqlite'
|
128
65
|
gem "do_#{adapter}", DO_VERSION, options.dup
|
129
66
|
end
|
130
67
|
|
131
|
-
gem 'dm-do-adapter', DM_VERSION,
|
68
|
+
gem 'dm-do-adapter', DM_VERSION, SOURCE => "#{DATAMAPPER}/dm-do-adapter#{REPO_POSTFIX}"
|
132
69
|
end
|
133
70
|
|
134
71
|
adapters.each do |adapter|
|
135
|
-
gem "dm-#{adapter}-adapter", DM_VERSION,
|
72
|
+
gem "dm-#{adapter}-adapter", DM_VERSION, SOURCE => "#{DATAMAPPER}/dm-#{adapter}-adapter#{REPO_POSTFIX}"
|
136
73
|
end
|
137
74
|
|
138
75
|
plugins = ENV['PLUGINS'] || ENV['PLUGIN']
|
139
76
|
plugins = plugins.to_s.tr(',', ' ').split.push('dm-migrations').uniq
|
140
77
|
|
141
78
|
plugins.each do |plugin|
|
142
|
-
gem plugin, DM_VERSION,
|
79
|
+
gem plugin, DM_VERSION, SOURCE => "#{DATAMAPPER}/#{plugin}#{REPO_POSTFIX}"
|
143
80
|
end
|
144
81
|
|
145
82
|
end
|
data/LICENSE
CHANGED
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
|
4
4
|
begin
|
5
|
-
gem 'jeweler', '~> 1.
|
5
|
+
gem 'jeweler', '~> 1.5.2'
|
6
6
|
require 'jeweler'
|
7
7
|
|
8
8
|
Jeweler::Tasks.new do |gem|
|
@@ -15,20 +15,11 @@ begin
|
|
15
15
|
gem.has_rdoc = 'yard'
|
16
16
|
|
17
17
|
gem.rubyforge_project = 'datamapper'
|
18
|
-
|
19
|
-
gem.add_dependency 'dm-core', '~> 1.0.2'
|
20
|
-
gem.add_dependency 'fastercsv', '~> 1.5.3'
|
21
|
-
gem.add_dependency 'json_pure', '~> 1.4'
|
22
|
-
|
23
|
-
gem.add_development_dependency 'rspec', '~> 1.3'
|
24
|
-
gem.add_development_dependency 'dm-validations', '~> 1.0.2'
|
25
|
-
gem.add_development_dependency 'nokogiri', '~> 1.4.3'
|
26
|
-
# gem.add_development_dependency 'libxml-ruby', '~> 1.1.4' # not available on JRuby
|
27
18
|
end
|
28
19
|
|
29
20
|
Jeweler::GemcutterTasks.new
|
30
21
|
|
31
22
|
FileList['tasks/**/*.rake'].each { |task| import task }
|
32
23
|
rescue LoadError
|
33
|
-
puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
|
24
|
+
puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler -v 1.5.2'
|
34
25
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.1.0.rc1
|
data/dm-serializer.gemspec
CHANGED
@@ -1,108 +1,112 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dm-serializer}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.1.0.rc1"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Guy van den Berg"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-02-28}
|
13
13
|
s.description = %q{DataMapper plugin for serializing Resources and Collections}
|
14
14
|
s.email = %q{vandenberg.guy [a] gmail [d] com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
|
-
"
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
"tasks/spec.rake",
|
57
|
-
"tasks/yard.rake",
|
58
|
-
"tasks/yardstick.rake"
|
20
|
+
"Gemfile",
|
21
|
+
"LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"autotest/discover.rb",
|
26
|
+
"autotest/dmserializer_rspec.rb",
|
27
|
+
"benchmarks/to_json.rb",
|
28
|
+
"benchmarks/to_xml.rb",
|
29
|
+
"dm-serializer.gemspec",
|
30
|
+
"lib/dm-serializer.rb",
|
31
|
+
"lib/dm-serializer/common.rb",
|
32
|
+
"lib/dm-serializer/to_csv.rb",
|
33
|
+
"lib/dm-serializer/to_json.rb",
|
34
|
+
"lib/dm-serializer/to_xml.rb",
|
35
|
+
"lib/dm-serializer/to_yaml.rb",
|
36
|
+
"lib/dm-serializer/xml_serializers.rb",
|
37
|
+
"lib/dm-serializer/xml_serializers/libxml.rb",
|
38
|
+
"lib/dm-serializer/xml_serializers/nokogiri.rb",
|
39
|
+
"lib/dm-serializer/xml_serializers/rexml.rb",
|
40
|
+
"spec/fixtures/cow.rb",
|
41
|
+
"spec/fixtures/planet.rb",
|
42
|
+
"spec/fixtures/quan_tum_cat.rb",
|
43
|
+
"spec/fixtures/vehicle.rb",
|
44
|
+
"spec/lib/serialization_method_shared_spec.rb",
|
45
|
+
"spec/public/serializer_spec.rb",
|
46
|
+
"spec/public/to_csv_spec.rb",
|
47
|
+
"spec/public/to_json_spec.rb",
|
48
|
+
"spec/public/to_xml_spec.rb",
|
49
|
+
"spec/public/to_yaml_spec.rb",
|
50
|
+
"spec/rcov.opts",
|
51
|
+
"spec/spec.opts",
|
52
|
+
"spec/spec_helper.rb",
|
53
|
+
"tasks/spec.rake",
|
54
|
+
"tasks/yard.rake",
|
55
|
+
"tasks/yardstick.rake"
|
59
56
|
]
|
60
|
-
s.has_rdoc = %q{yard}
|
61
57
|
s.homepage = %q{http://github.com/datamapper/dm-serializer}
|
62
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
63
58
|
s.require_paths = ["lib"]
|
64
59
|
s.rubyforge_project = %q{datamapper}
|
65
|
-
s.rubygems_version = %q{1.
|
60
|
+
s.rubygems_version = %q{1.5.2}
|
66
61
|
s.summary = %q{DataMapper plugin for serializing Resources and Collections}
|
67
62
|
s.test_files = [
|
68
63
|
"spec/fixtures/cow.rb",
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
64
|
+
"spec/fixtures/planet.rb",
|
65
|
+
"spec/fixtures/quan_tum_cat.rb",
|
66
|
+
"spec/fixtures/vehicle.rb",
|
67
|
+
"spec/lib/serialization_method_shared_spec.rb",
|
68
|
+
"spec/public/serializer_spec.rb",
|
69
|
+
"spec/public/to_csv_spec.rb",
|
70
|
+
"spec/public/to_json_spec.rb",
|
71
|
+
"spec/public/to_xml_spec.rb",
|
72
|
+
"spec/public/to_yaml_spec.rb",
|
73
|
+
"spec/spec_helper.rb"
|
78
74
|
]
|
79
75
|
|
80
76
|
if s.respond_to? :specification_version then
|
81
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
82
77
|
s.specification_version = 3
|
83
78
|
|
84
79
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
85
|
-
s.add_runtime_dependency(%q<
|
80
|
+
s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.4"])
|
81
|
+
s.add_runtime_dependency(%q<i18n>, ["~> 0.5.0"])
|
82
|
+
s.add_runtime_dependency(%q<dm-core>, ["~> 1.1.0.rc1"])
|
86
83
|
s.add_runtime_dependency(%q<fastercsv>, ["~> 1.5.3"])
|
87
|
-
s.add_runtime_dependency(%q<
|
88
|
-
s.add_development_dependency(%q<
|
89
|
-
s.add_development_dependency(%q<
|
90
|
-
s.add_development_dependency(%q<
|
84
|
+
s.add_runtime_dependency(%q<json>, ["~> 1.5.1"])
|
85
|
+
s.add_development_dependency(%q<dm-validations>, ["~> 1.1.0.rc1"])
|
86
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
87
|
+
s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
|
88
|
+
s.add_development_dependency(%q<rspec>, ["~> 1.3.1"])
|
91
89
|
else
|
92
|
-
s.add_dependency(%q<
|
90
|
+
s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
|
91
|
+
s.add_dependency(%q<i18n>, ["~> 0.5.0"])
|
92
|
+
s.add_dependency(%q<dm-core>, ["~> 1.1.0.rc1"])
|
93
93
|
s.add_dependency(%q<fastercsv>, ["~> 1.5.3"])
|
94
|
-
s.add_dependency(%q<
|
95
|
-
s.add_dependency(%q<
|
96
|
-
s.add_dependency(%q<
|
97
|
-
s.add_dependency(%q<
|
94
|
+
s.add_dependency(%q<json>, ["~> 1.5.1"])
|
95
|
+
s.add_dependency(%q<dm-validations>, ["~> 1.1.0.rc1"])
|
96
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
97
|
+
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
98
|
+
s.add_dependency(%q<rspec>, ["~> 1.3.1"])
|
98
99
|
end
|
99
100
|
else
|
100
|
-
s.add_dependency(%q<
|
101
|
+
s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
|
102
|
+
s.add_dependency(%q<i18n>, ["~> 0.5.0"])
|
103
|
+
s.add_dependency(%q<dm-core>, ["~> 1.1.0.rc1"])
|
101
104
|
s.add_dependency(%q<fastercsv>, ["~> 1.5.3"])
|
102
|
-
s.add_dependency(%q<
|
103
|
-
s.add_dependency(%q<
|
104
|
-
s.add_dependency(%q<
|
105
|
-
s.add_dependency(%q<
|
105
|
+
s.add_dependency(%q<json>, ["~> 1.5.1"])
|
106
|
+
s.add_dependency(%q<dm-validations>, ["~> 1.1.0.rc1"])
|
107
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
108
|
+
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
109
|
+
s.add_dependency(%q<rspec>, ["~> 1.3.1"])
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
@@ -15,12 +15,14 @@ module DataMapper
|
|
15
15
|
#
|
16
16
|
# @since 1.0.1
|
17
17
|
#
|
18
|
-
def as_json(options={})
|
19
|
-
|
18
|
+
def as_json(options = {})
|
19
|
+
options = {} if options.nil?
|
20
|
+
result = {}
|
20
21
|
|
21
22
|
properties_to_serialize(options).each do |property|
|
22
23
|
property_name = property.name
|
23
|
-
|
24
|
+
value = __send__(property_name)
|
25
|
+
result[property_name] = value.kind_of?(DataMapper::Model) ? value.name : value
|
24
26
|
end
|
25
27
|
|
26
28
|
# add methods
|
@@ -45,8 +47,8 @@ module DataMapper
|
|
45
47
|
#
|
46
48
|
# @return <String> a JSON representation of the Resource
|
47
49
|
def to_json(*args)
|
48
|
-
options = args.first
|
49
|
-
options =
|
50
|
+
options = args.first
|
51
|
+
options = {} unless options.kind_of?(Hash)
|
50
52
|
|
51
53
|
result = as_json(options)
|
52
54
|
|
@@ -68,33 +70,16 @@ module DataMapper
|
|
68
70
|
|
69
71
|
end
|
70
72
|
|
71
|
-
|
72
|
-
module Associations
|
73
|
-
# the json gem adds Object#to_json, which breaks the DM proxies, since it
|
74
|
-
# happens *after* the proxy has been blank slated. This code removes the added
|
75
|
-
# method, so it is delegated correctly to the Collection
|
76
|
-
proxies = []
|
77
|
-
|
78
|
-
proxies << ManyToMany::Proxy if defined?(ManyToMany::Proxy)
|
79
|
-
proxies << OneToMany::Proxy if defined?(OneToMany::Proxy)
|
80
|
-
proxies << ManyToOne::Proxy if defined?(ManyToOne::Proxy)
|
81
|
-
|
82
|
-
proxies.each do |proxy|
|
83
|
-
if proxy.public_instance_methods.any? { |m| m.to_sym == :to_json }
|
84
|
-
proxy.send(:undef_method, :to_json)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
73
|
class Collection
|
90
74
|
def to_json(*args)
|
91
|
-
|
75
|
+
options = args.first
|
76
|
+
options = {} unless options.kind_of?(Hash)
|
92
77
|
|
93
|
-
|
94
|
-
collection = map { |
|
78
|
+
resource_options = options.merge(:to_json => false)
|
79
|
+
collection = map { |resource| resource.to_json(resource_options) }
|
95
80
|
|
96
81
|
# default to making JSON
|
97
|
-
if
|
82
|
+
if options.fetch(:to_json, true)
|
98
83
|
collection.to_json
|
99
84
|
else
|
100
85
|
collection
|
data/lib/dm-serializer/to_xml.rb
CHANGED
@@ -29,7 +29,7 @@ module DataMapper
|
|
29
29
|
xml.add_node(root, property.name.to_s, value, attrs)
|
30
30
|
end
|
31
31
|
|
32
|
-
(opts[:methods]
|
32
|
+
Array(opts[:methods]).each do |meth|
|
33
33
|
if self.respond_to?(meth)
|
34
34
|
xml_name = meth.to_s.gsub(/[^a-z0-9_]/, '')
|
35
35
|
value = __send__(meth)
|
@@ -21,7 +21,7 @@ module DataMapper
|
|
21
21
|
map.add(property.name, value.is_a?(Class) ? value.to_s : value)
|
22
22
|
end
|
23
23
|
# add methods
|
24
|
-
(opts[:methods]
|
24
|
+
Array(opts[:methods]).each do |meth|
|
25
25
|
if respond_to?(meth)
|
26
26
|
map.add(meth.to_sym, __send__(meth))
|
27
27
|
end
|
@@ -102,7 +102,7 @@ share_examples_for 'A serialization method' do
|
|
102
102
|
result.values_at("name", "aphelion").should == ["Mars", nil]
|
103
103
|
end
|
104
104
|
|
105
|
-
it "should serialize values returned by methods given to :methods option" do
|
105
|
+
it "should serialize values returned by an array of methods given to :methods option" do
|
106
106
|
planet = Planet.new(
|
107
107
|
:name => "Mars",
|
108
108
|
:aphelion => 249_209_300.4
|
@@ -114,6 +114,16 @@ share_examples_for 'A serialization method' do
|
|
114
114
|
result.values_at("category", boolean_method_name).should == ["terrestrial", false]
|
115
115
|
end
|
116
116
|
|
117
|
+
it "should serialize values returned by a single method given to :methods option" do
|
118
|
+
planet = Planet.new(
|
119
|
+
:name => "Mars",
|
120
|
+
:aphelion => 249_209_300.4
|
121
|
+
)
|
122
|
+
|
123
|
+
result = @harness.test(planet, :methods => :category)
|
124
|
+
result.values_at("category").should == ["terrestrial"]
|
125
|
+
end
|
126
|
+
|
117
127
|
it "should only include properties given to :only option" do
|
118
128
|
planet = Planet.new(
|
119
129
|
:name => "Mars",
|
data/spec/public/to_json_spec.rb
CHANGED
@@ -57,4 +57,19 @@ describe DataMapper::Serialize, '#to_json' do
|
|
57
57
|
|
58
58
|
it "has :repository option to override used repository"
|
59
59
|
|
60
|
+
it "can be serialized within a Hash" do
|
61
|
+
hash = { 'cows' => Cow.all }
|
62
|
+
JSON.parse(hash.to_json).should == hash
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
describe DataMapper::Serialize, '#as_json' do
|
68
|
+
it "handles nil for options" do
|
69
|
+
expect { Cow.new.as_json(nil) }.to_not raise_error
|
70
|
+
end
|
71
|
+
|
72
|
+
it "serializes Discriminator types as strings" do
|
73
|
+
Motorcycle.new.as_json[:type].should == "Motorcycle"
|
74
|
+
end
|
60
75
|
end
|
data/tasks/spec.rake
CHANGED
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
version: 1.0.2
|
4
|
+
prerelease: 6
|
5
|
+
version: 1.1.0.rc1
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Guy van den Berg
|
@@ -14,97 +10,108 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date:
|
13
|
+
date: 2011-02-28 00:00:00 -08:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
22
|
-
prerelease: false
|
17
|
+
name: activesupport
|
23
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
19
|
none: false
|
25
20
|
requirements:
|
26
21
|
- - ~>
|
27
22
|
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 1
|
30
|
-
- 0
|
31
|
-
- 2
|
32
|
-
version: 1.0.2
|
23
|
+
version: 3.0.4
|
33
24
|
type: :runtime
|
25
|
+
prerelease: false
|
34
26
|
version_requirements: *id001
|
35
27
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
37
|
-
prerelease: false
|
28
|
+
name: i18n
|
38
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
30
|
none: false
|
40
31
|
requirements:
|
41
32
|
- - ~>
|
42
33
|
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
- 1
|
45
|
-
- 5
|
46
|
-
- 3
|
47
|
-
version: 1.5.3
|
34
|
+
version: 0.5.0
|
48
35
|
type: :runtime
|
36
|
+
prerelease: false
|
49
37
|
version_requirements: *id002
|
50
38
|
- !ruby/object:Gem::Dependency
|
51
|
-
name:
|
52
|
-
prerelease: false
|
39
|
+
name: dm-core
|
53
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
41
|
none: false
|
55
42
|
requirements:
|
56
43
|
- - ~>
|
57
44
|
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
- 1
|
60
|
-
- 4
|
61
|
-
version: "1.4"
|
45
|
+
version: 1.1.0.rc1
|
62
46
|
type: :runtime
|
47
|
+
prerelease: false
|
63
48
|
version_requirements: *id003
|
64
49
|
- !ruby/object:Gem::Dependency
|
65
|
-
name:
|
66
|
-
prerelease: false
|
50
|
+
name: fastercsv
|
67
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
52
|
none: false
|
69
53
|
requirements:
|
70
54
|
- - ~>
|
71
55
|
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
version: "1.3"
|
76
|
-
type: :development
|
56
|
+
version: 1.5.3
|
57
|
+
type: :runtime
|
58
|
+
prerelease: false
|
77
59
|
version_requirements: *id004
|
78
60
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
80
|
-
prerelease: false
|
61
|
+
name: json
|
81
62
|
requirement: &id005 !ruby/object:Gem::Requirement
|
82
63
|
none: false
|
83
64
|
requirements:
|
84
65
|
- - ~>
|
85
66
|
- !ruby/object:Gem::Version
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
- 2
|
90
|
-
version: 1.0.2
|
91
|
-
type: :development
|
67
|
+
version: 1.5.1
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
92
70
|
version_requirements: *id005
|
93
71
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
95
|
-
prerelease: false
|
72
|
+
name: dm-validations
|
96
73
|
requirement: &id006 !ruby/object:Gem::Requirement
|
97
74
|
none: false
|
98
75
|
requirements:
|
99
76
|
- - ~>
|
100
77
|
- !ruby/object:Gem::Version
|
101
|
-
|
102
|
-
- 1
|
103
|
-
- 4
|
104
|
-
- 3
|
105
|
-
version: 1.4.3
|
78
|
+
version: 1.1.0.rc1
|
106
79
|
type: :development
|
80
|
+
prerelease: false
|
107
81
|
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: jeweler
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.5.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rake
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ~>
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 0.8.7
|
101
|
+
type: :development
|
102
|
+
prerelease: false
|
103
|
+
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: rspec
|
106
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 1.3.1
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: *id009
|
108
115
|
description: DataMapper plugin for serializing Resources and Collections
|
109
116
|
email: vandenberg.guy [a] gmail [d] com
|
110
117
|
executables: []
|
@@ -115,7 +122,6 @@ extra_rdoc_files:
|
|
115
122
|
- LICENSE
|
116
123
|
- README.rdoc
|
117
124
|
files:
|
118
|
-
- .gitignore
|
119
125
|
- Gemfile
|
120
126
|
- LICENSE
|
121
127
|
- README.rdoc
|
@@ -139,6 +145,7 @@ files:
|
|
139
145
|
- spec/fixtures/cow.rb
|
140
146
|
- spec/fixtures/planet.rb
|
141
147
|
- spec/fixtures/quan_tum_cat.rb
|
148
|
+
- spec/fixtures/vehicle.rb
|
142
149
|
- spec/lib/serialization_method_shared_spec.rb
|
143
150
|
- spec/public/serializer_spec.rb
|
144
151
|
- spec/public/to_csv_spec.rb
|
@@ -148,19 +155,16 @@ files:
|
|
148
155
|
- spec/rcov.opts
|
149
156
|
- spec/spec.opts
|
150
157
|
- spec/spec_helper.rb
|
151
|
-
- tasks/ci.rake
|
152
|
-
- tasks/local_gemfile.rake
|
153
|
-
- tasks/metrics.rake
|
154
158
|
- tasks/spec.rake
|
155
159
|
- tasks/yard.rake
|
156
160
|
- tasks/yardstick.rake
|
157
|
-
has_rdoc:
|
161
|
+
has_rdoc: true
|
158
162
|
homepage: http://github.com/datamapper/dm-serializer
|
159
163
|
licenses: []
|
160
164
|
|
161
165
|
post_install_message:
|
162
|
-
rdoc_options:
|
163
|
-
|
166
|
+
rdoc_options: []
|
167
|
+
|
164
168
|
require_paths:
|
165
169
|
- lib
|
166
170
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -168,21 +172,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
172
|
requirements:
|
169
173
|
- - ">="
|
170
174
|
- !ruby/object:Gem::Version
|
171
|
-
segments:
|
172
|
-
- 0
|
173
175
|
version: "0"
|
174
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
177
|
none: false
|
176
178
|
requirements:
|
177
|
-
- - "
|
179
|
+
- - ">"
|
178
180
|
- !ruby/object:Gem::Version
|
179
|
-
|
180
|
-
- 0
|
181
|
-
version: "0"
|
181
|
+
version: 1.3.1
|
182
182
|
requirements: []
|
183
183
|
|
184
184
|
rubyforge_project: datamapper
|
185
|
-
rubygems_version: 1.
|
185
|
+
rubygems_version: 1.5.2
|
186
186
|
signing_key:
|
187
187
|
specification_version: 3
|
188
188
|
summary: DataMapper plugin for serializing Resources and Collections
|
@@ -190,6 +190,7 @@ test_files:
|
|
190
190
|
- spec/fixtures/cow.rb
|
191
191
|
- spec/fixtures/planet.rb
|
192
192
|
- spec/fixtures/quan_tum_cat.rb
|
193
|
+
- spec/fixtures/vehicle.rb
|
193
194
|
- spec/lib/serialization_method_shared_spec.rb
|
194
195
|
- spec/public/serializer_spec.rb
|
195
196
|
- spec/public/to_csv_spec.rb
|
data/.gitignore
DELETED
@@ -1,37 +0,0 @@
|
|
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.local
|
33
|
-
Gemfile.lock
|
34
|
-
Gemfile.local.lock
|
35
|
-
|
36
|
-
## PROJECT::SPECIFIC
|
37
|
-
spec/db/
|
data/tasks/ci.rake
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
task :ci => [ :verify_measurements, 'metrics:all' ]
|
data/tasks/local_gemfile.rake
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
desc "Support bundling from local source code (allows BUNDLE_GEMFILE=Gemfile.local bundle foo)"
|
2
|
-
task :local_gemfile do |t|
|
3
|
-
|
4
|
-
root = Pathname(__FILE__).dirname.parent
|
5
|
-
datamapper = root.parent
|
6
|
-
|
7
|
-
root.join('Gemfile.local').open('w') do |f|
|
8
|
-
root.join('Gemfile').open.each do |line|
|
9
|
-
line.sub!(/DATAMAPPER = 'git:\/\/github.com\/datamapper'/, "DATAMAPPER = '#{datamapper}'")
|
10
|
-
line.sub!(/:git => \"#\{DATAMAPPER\}\/(.+?)(?:\.git)?\"/, ':path => "#{DATAMAPPER}/\1"')
|
11
|
-
line.sub!(/do_options\[:git\] = \"#\{DATAMAPPER\}\/(.+?)(?:\.git)?\"/, 'do_options[:path] = "#{DATAMAPPER}/\1"')
|
12
|
-
f.puts line
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
data/tasks/metrics.rake
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require 'metric_fu'
|
3
|
-
rescue LoadError
|
4
|
-
namespace :metrics do
|
5
|
-
task :all do
|
6
|
-
abort 'metric_fu is not available. In order to run metrics:all, you must: gem install metric_fu'
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
begin
|
12
|
-
require 'reek/adapters/rake_task'
|
13
|
-
|
14
|
-
Reek::RakeTask.new do |t|
|
15
|
-
t.fail_on_error = true
|
16
|
-
t.verbose = false
|
17
|
-
t.source_files = 'lib/**/*.rb'
|
18
|
-
end
|
19
|
-
rescue LoadError
|
20
|
-
task :reek do
|
21
|
-
abort 'Reek is not available. In order to run reek, you must: gem install reek'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
begin
|
26
|
-
require 'roodi'
|
27
|
-
require 'roodi_task'
|
28
|
-
|
29
|
-
RoodiTask.new do |t|
|
30
|
-
t.verbose = false
|
31
|
-
end
|
32
|
-
rescue LoadError
|
33
|
-
task :roodi do
|
34
|
-
abort 'Roodi is not available. In order to run roodi, you must: gem install roodi'
|
35
|
-
end
|
36
|
-
end
|