gpi-active_model_serializers 0.8.2
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/.gitignore +18 -0
- data/.travis.yml +18 -0
- data/CHANGELOG.md +113 -0
- data/CONTRIBUTING.md +20 -0
- data/DESIGN.textile +586 -0
- data/Gemfile +12 -0
- data/Gemfile.edge +9 -0
- data/MIT-LICENSE.txt +21 -0
- data/README.md +716 -0
- data/Rakefile +18 -0
- data/active_model_serializers.gemspec +28 -0
- data/bench/perf.rb +43 -0
- data/cruft.md +19 -0
- data/lib/action_controller/serialization.rb +58 -0
- data/lib/active_model/array_serializer.rb +65 -0
- data/lib/active_model/serializable.rb +49 -0
- data/lib/active_model/serializer.rb +475 -0
- data/lib/active_model/serializer/associations.rb +191 -0
- data/lib/active_model/serializer/caching.rb +37 -0
- data/lib/active_model/serializer/version.rb +5 -0
- data/lib/active_model_serializers.rb +95 -0
- data/lib/active_record/serializer_override.rb +16 -0
- data/lib/generators/resource_override.rb +13 -0
- data/lib/generators/serializer/USAGE +9 -0
- data/lib/generators/serializer/serializer_generator.rb +36 -0
- data/lib/generators/serializer/templates/serializer.rb +8 -0
- data/test/array_serializer_test.rb +85 -0
- data/test/association_test.rb +592 -0
- data/test/caching_test.rb +96 -0
- data/test/generators_test.rb +73 -0
- data/test/no_serialization_scope_test.rb +34 -0
- data/test/serialization_scope_name_test.rb +99 -0
- data/test/serialization_test.rb +394 -0
- data/test/serializer_support_test.rb +51 -0
- data/test/serializer_test.rb +1521 -0
- data/test/test_fakes.rb +202 -0
- data/test/test_helper.rb +41 -0
- metadata +176 -0
data/test/test_fakes.rb
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
class Model
|
2
|
+
def initialize(hash={})
|
3
|
+
@attributes = hash
|
4
|
+
end
|
5
|
+
|
6
|
+
def read_attribute_for_serialization(name)
|
7
|
+
@attributes[name]
|
8
|
+
end
|
9
|
+
|
10
|
+
def as_json(*)
|
11
|
+
{ model: "Model" }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class ModelWithActiveModelSerializer < Model
|
16
|
+
include ActiveModel::Serializers::JSON
|
17
|
+
attr_accessor :attributes
|
18
|
+
def read_attribute_for_serialization(name)
|
19
|
+
@attributes[name]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class User
|
24
|
+
include ActiveModel::SerializerSupport
|
25
|
+
|
26
|
+
attr_accessor :superuser
|
27
|
+
|
28
|
+
def initialize(hash={})
|
29
|
+
@attributes = hash.merge(first_name: "Jose", last_name: "Valim", password: "oh noes yugive my password")
|
30
|
+
end
|
31
|
+
|
32
|
+
def read_attribute_for_serialization(name)
|
33
|
+
@attributes[name]
|
34
|
+
end
|
35
|
+
|
36
|
+
def super_user?
|
37
|
+
@superuser
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Post < Model
|
42
|
+
def initialize(attributes)
|
43
|
+
super(attributes)
|
44
|
+
self.comments ||= []
|
45
|
+
self.comments_disabled = false
|
46
|
+
self.author = nil
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_accessor :comments, :comments_disabled, :author
|
50
|
+
def active_model_serializer; PostSerializer; end
|
51
|
+
end
|
52
|
+
|
53
|
+
class Comment < Model
|
54
|
+
def active_model_serializer; CommentSerializer; end
|
55
|
+
end
|
56
|
+
|
57
|
+
class UserSerializer < ActiveModel::Serializer
|
58
|
+
attributes :first_name, :last_name
|
59
|
+
|
60
|
+
def serializable_hash
|
61
|
+
attributes.merge(ok: true).merge(options[:scope])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class UserAttributesWithKeySerializer < ActiveModel::Serializer
|
66
|
+
attributes first_name: :f_name, last_name: :l_name
|
67
|
+
|
68
|
+
def serializable_hash
|
69
|
+
attributes.merge(ok: true).merge(options[:scope])
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class UserAttributesWithSomeKeySerializer < ActiveModel::Serializer
|
74
|
+
attributes :first_name, last_name: :l_name
|
75
|
+
|
76
|
+
def serializable_hash
|
77
|
+
attributes.merge(ok: true).merge(options[:scope])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class UserAttributesWithUnsymbolizableKeySerializer < ActiveModel::Serializer
|
82
|
+
attributes :first_name, last_name: :"last-name"
|
83
|
+
|
84
|
+
def serializable_hash
|
85
|
+
attributes.merge(ok: true).merge(options[:scope])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
class DefaultUserSerializer < ActiveModel::Serializer
|
90
|
+
attributes :first_name, :last_name
|
91
|
+
end
|
92
|
+
|
93
|
+
class MyUserSerializer < ActiveModel::Serializer
|
94
|
+
attributes :first_name, :last_name
|
95
|
+
|
96
|
+
def serializable_hash
|
97
|
+
hash = attributes
|
98
|
+
hash = hash.merge(super_user: true) if object.super_user?
|
99
|
+
hash
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class CommentSerializer
|
104
|
+
def initialize(comment, options={})
|
105
|
+
@object = comment
|
106
|
+
end
|
107
|
+
|
108
|
+
attr_reader :object
|
109
|
+
|
110
|
+
def serializable_hash
|
111
|
+
{ title: @object.read_attribute_for_serialization(:title) }
|
112
|
+
end
|
113
|
+
|
114
|
+
def as_json(options=nil)
|
115
|
+
options ||= {}
|
116
|
+
if options[:root] == false
|
117
|
+
serializable_hash
|
118
|
+
else
|
119
|
+
{ comment: serializable_hash }
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
class PostSerializer < ActiveModel::Serializer
|
125
|
+
attributes :title, :body
|
126
|
+
has_many :comments, serializer: CommentSerializer
|
127
|
+
end
|
128
|
+
|
129
|
+
class PostWithConditionalCommentsSerializer < ActiveModel::Serializer
|
130
|
+
root :post
|
131
|
+
attributes :title, :body
|
132
|
+
has_many :comments, serializer: CommentSerializer
|
133
|
+
|
134
|
+
def include_associations!
|
135
|
+
include! :comments unless object.comments_disabled
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
class PostWithMultipleConditionalsSerializer < ActiveModel::Serializer
|
140
|
+
root :post
|
141
|
+
attributes :title, :body, :author
|
142
|
+
has_many :comments, serializer: CommentSerializer
|
143
|
+
|
144
|
+
def include_comments?
|
145
|
+
!object.comments_disabled
|
146
|
+
end
|
147
|
+
|
148
|
+
def include_author?
|
149
|
+
scope.super_user?
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
class Blog < Model
|
154
|
+
attr_accessor :author
|
155
|
+
end
|
156
|
+
|
157
|
+
class AuthorSerializer < ActiveModel::Serializer
|
158
|
+
attributes :first_name, :last_name
|
159
|
+
end
|
160
|
+
|
161
|
+
class BlogSerializer < ActiveModel::Serializer
|
162
|
+
has_one :author, serializer: AuthorSerializer
|
163
|
+
end
|
164
|
+
|
165
|
+
class BlogWithRootSerializer < BlogSerializer
|
166
|
+
root true
|
167
|
+
end
|
168
|
+
|
169
|
+
class CustomPostSerializer < ActiveModel::Serializer
|
170
|
+
attributes :title
|
171
|
+
end
|
172
|
+
|
173
|
+
class CustomBlog < Blog
|
174
|
+
attr_accessor :public_posts, :public_user
|
175
|
+
end
|
176
|
+
|
177
|
+
class CustomBlogSerializer < ActiveModel::Serializer
|
178
|
+
has_many :public_posts, key: :posts, serializer: PostSerializer
|
179
|
+
has_one :public_user, key: :user, serializer: UserSerializer
|
180
|
+
end
|
181
|
+
|
182
|
+
class SomeSerializer < ActiveModel::Serializer
|
183
|
+
attributes :some
|
184
|
+
end
|
185
|
+
|
186
|
+
class SomeObject < Struct.new(:some)
|
187
|
+
end
|
188
|
+
|
189
|
+
# Set up some classes for polymorphic testing
|
190
|
+
class Attachment < Model
|
191
|
+
def attachable
|
192
|
+
@attributes[:attachable]
|
193
|
+
end
|
194
|
+
|
195
|
+
def readable
|
196
|
+
@attributes[:readable]
|
197
|
+
end
|
198
|
+
|
199
|
+
def edible
|
200
|
+
@attributes[:edible]
|
201
|
+
end
|
202
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.start do
|
6
|
+
add_group "lib", "lib"
|
7
|
+
add_group "spec", "spec"
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'coveralls'
|
11
|
+
Coveralls.wear!
|
12
|
+
|
13
|
+
require "pry"
|
14
|
+
|
15
|
+
require "active_model_serializers"
|
16
|
+
require "active_support/json"
|
17
|
+
require "minitest/autorun"
|
18
|
+
|
19
|
+
require 'rails'
|
20
|
+
|
21
|
+
module TestHelper
|
22
|
+
Routes = ActionDispatch::Routing::RouteSet.new
|
23
|
+
Routes.draw do
|
24
|
+
resource :hypermedia
|
25
|
+
get ':controller(/:action(/:id))'
|
26
|
+
get ':controller(/:action)'
|
27
|
+
end
|
28
|
+
|
29
|
+
ActionController::Base.send :include, Routes.url_helpers
|
30
|
+
ActiveModel::Serializer.send :include, Routes.url_helpers
|
31
|
+
end
|
32
|
+
|
33
|
+
ActiveSupport::TestCase.class_eval do
|
34
|
+
setup do
|
35
|
+
@routes = ::TestHelper::Routes
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Object
|
40
|
+
undef_method :id if respond_to?(:id)
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gpi-active_model_serializers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- José Valim
|
9
|
+
- Yehuda Katz
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2014-06-12 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activemodel
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.2'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '3.2'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rails
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '3.2'
|
39
|
+
type: :development
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.2'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: pry
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: simplecov
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: coveralls
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
description: Making it easy to serialize models for client-side use
|
96
|
+
email:
|
97
|
+
- jose.valim@gmail.com
|
98
|
+
- wycats@gmail.com
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- .gitignore
|
104
|
+
- .travis.yml
|
105
|
+
- CHANGELOG.md
|
106
|
+
- CONTRIBUTING.md
|
107
|
+
- DESIGN.textile
|
108
|
+
- Gemfile
|
109
|
+
- Gemfile.edge
|
110
|
+
- MIT-LICENSE.txt
|
111
|
+
- README.md
|
112
|
+
- Rakefile
|
113
|
+
- active_model_serializers.gemspec
|
114
|
+
- bench/perf.rb
|
115
|
+
- cruft.md
|
116
|
+
- lib/action_controller/serialization.rb
|
117
|
+
- lib/active_model/array_serializer.rb
|
118
|
+
- lib/active_model/serializable.rb
|
119
|
+
- lib/active_model/serializer.rb
|
120
|
+
- lib/active_model/serializer/associations.rb
|
121
|
+
- lib/active_model/serializer/caching.rb
|
122
|
+
- lib/active_model/serializer/version.rb
|
123
|
+
- lib/active_model_serializers.rb
|
124
|
+
- lib/active_record/serializer_override.rb
|
125
|
+
- lib/generators/resource_override.rb
|
126
|
+
- lib/generators/serializer/USAGE
|
127
|
+
- lib/generators/serializer/serializer_generator.rb
|
128
|
+
- lib/generators/serializer/templates/serializer.rb
|
129
|
+
- test/array_serializer_test.rb
|
130
|
+
- test/association_test.rb
|
131
|
+
- test/caching_test.rb
|
132
|
+
- test/generators_test.rb
|
133
|
+
- test/no_serialization_scope_test.rb
|
134
|
+
- test/serialization_scope_name_test.rb
|
135
|
+
- test/serialization_test.rb
|
136
|
+
- test/serializer_support_test.rb
|
137
|
+
- test/serializer_test.rb
|
138
|
+
- test/test_fakes.rb
|
139
|
+
- test/test_helper.rb
|
140
|
+
homepage: https://github.com/goplaceit/active_model_serializers
|
141
|
+
licenses: []
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
148
|
+
requirements:
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 1.9.3
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
requirements: []
|
159
|
+
rubyforge_project:
|
160
|
+
rubygems_version: 1.8.23
|
161
|
+
signing_key:
|
162
|
+
specification_version: 3
|
163
|
+
summary: Bringing consistency and object orientation to model serialization. Works
|
164
|
+
great for client-side MVC frameworks!
|
165
|
+
test_files:
|
166
|
+
- test/array_serializer_test.rb
|
167
|
+
- test/association_test.rb
|
168
|
+
- test/caching_test.rb
|
169
|
+
- test/generators_test.rb
|
170
|
+
- test/no_serialization_scope_test.rb
|
171
|
+
- test/serialization_scope_name_test.rb
|
172
|
+
- test/serialization_test.rb
|
173
|
+
- test/serializer_support_test.rb
|
174
|
+
- test/serializer_test.rb
|
175
|
+
- test/test_fakes.rb
|
176
|
+
- test/test_helper.rb
|