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.
@@ -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
@@ -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