active_model_serializers 0.8.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe4ac40d39a738a9f0761ddaf33f1a13c5ef5565
4
- data.tar.gz: a3db3953c4a189e3eb2c7b9b45fec250572013bf
3
+ metadata.gz: ee11c77cee4b5f85a7a31b2ae7fded2ae12dcab1
4
+ data.tar.gz: a8a8c430d80820d373fa123dc22199418e7150ee
5
5
  SHA512:
6
- metadata.gz: 2d410fea01930d45f6b263c4cc347b3f4be9aae2d92465ca83bc6e56f7c5059bde90fcf2207fabfca2ae048eb136c6d81fea15b186c4b8a0a2b54dfd2177a3af
7
- data.tar.gz: 4f87769234bdaa917b36387b124da7667bac3acb13745694b8013a0cdbdcb366f6519641fddacb0c2db26e5ea2bc2654234db3ec5d82e1f0d0b6fc46ed20d68f
6
+ metadata.gz: 3b468f9db91455e90e6f61f12c6168224f59c151e58f51ac54a2a09791daa0160119470154325b0983b7c73f2a4e614c6ac5d29a40e9914ddbdbabba35bd3574
7
+ data.tar.gz: 74dff8c032533a17b4e917ff8eaa57a35e19a789f0081294918b6f87619eab7abdc043ff1be9aec2bdaac8ebd38c92d7dfcef7adbc81da8a5e1518ce8b168c3c
data/.travis.yml CHANGED
@@ -7,8 +7,7 @@ rvm:
7
7
  - ree
8
8
  - jruby-18mode
9
9
  - jruby-19mode
10
- - rbx-18mode
11
- - rbx-19mode
10
+ - rbx-2
12
11
  gemfile:
13
12
  - Gemfile
14
13
  - Gemfile.edge
data/CHANGELOG.md CHANGED
@@ -22,9 +22,11 @@
22
22
  * URL helpers used inside of Engines now work properly.
23
23
 
24
24
  * Serializers now can filter attributes with `only` and `except`:
25
-
25
+
26
+ ```
26
27
  UserSerializer.new(user, only: [:first_name, :last_name])
27
28
  UserSerializer.new(user, except: :first_name)
29
+ ```
28
30
 
29
31
  * Basic Mongoid support. We now include our mixins in the right place.
30
32
 
data/Gemfile CHANGED
@@ -2,5 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify gem dependencies in active_model_serializers.gemspec
4
4
  gemspec
5
-
6
- gem "coveralls", :require => false
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://api.travis-ci.org/rails-api/active_model_serializers.png)](https://travis-ci.org/rails-api/active_model_serializers) [![Code Climate](https://codeclimate.com/github/rails-api/active_model_serializers.png)](https://codeclimate.com/github/rails-api/active_model_serializers) [![Coverage Status](https://coveralls.io/repos/rails-api/active_model_serializers/badge.png?branch=master)](https://coveralls.io/r/rails-api/active_model_serializers)
1
+ [![Build Status](https://api.travis-ci.org/rails-api/active_model_serializers.png)](https://travis-ci.org/rails-api/active_model_serializers) [![Code Climate](https://codeclimate.com/github/rails-api/active_model_serializers.png)](https://codeclimate.com/github/rails-api/active_model_serializers)
2
2
 
3
3
  # Purpose
4
4
 
@@ -19,7 +19,7 @@ The easiest way to install `ActiveModel::Serializers` is to add it to your
19
19
  `Gemfile`:
20
20
 
21
21
  ```ruby
22
- gem "active_model_serializers", "~> 0.7.0"
22
+ gem "active_model_serializers", "~> 0.8.0"
23
23
  ```
24
24
 
25
25
  Then, install it on the command line:
@@ -54,7 +54,7 @@ compliant but do not descend from `ActiveRecord` or include
54
54
  `Mongoid::Document`, you must add an include statement for
55
55
  `ActiveModel::SerializerSupport` to make models serializable. If you
56
56
  also want to make collections serializable, you should include
57
- `ActiveModel::ArraySerializationSupport` into your ORM's
57
+ `ActiveModel::ArraySerializerSupport` into your ORM's
58
58
  relation/criteria class.
59
59
 
60
60
  # ActiveModel::Serializer
@@ -139,23 +139,47 @@ render :json => @posts, :root => "some_posts"
139
139
  ```
140
140
 
141
141
  You may disable the root element for arrays at the top level, which will result in
142
- more concise json. To disable the root element for arrays, you have 4 options:
142
+ more concise json. See the next section for ways on how to do this. Disabling the
143
+ root element of the array with any of those methods will produce
143
144
 
144
- #### 1. Disable root globally for in `ArraySerializer`. In an initializer:
145
+ ```json
146
+ [
147
+ { "title": "Post 1", "body": "Hello!" },
148
+ { "title": "Post 2", "body": "Goodbye!" }
149
+ ]
150
+ ```
151
+
152
+ To specify a custom serializer for the items within an array:
153
+
154
+ ```ruby
155
+ render :json => @posts, :each_serializer => FancyPostSerializer
156
+ ```
157
+
158
+ ## Disabling the root element
159
+
160
+ You have 4 options to disable the root element, each with a slightly different scope:
161
+
162
+ #### 1. Disable root globally for all, or per class
163
+
164
+ In an initializer:
145
165
 
146
166
  ```ruby
147
167
  ActiveSupport.on_load(:active_model_serializers) do
168
+ # Disable for all serializers (except ArraySerializer)
169
+ ActiveModel::Serializer.root = false
170
+
171
+ # Disable for ArraySerializer
148
172
  ActiveModel::ArraySerializer.root = false
149
173
  end
150
174
  ```
151
175
 
152
- #### 2. Disable root per render call in your controller:
176
+ #### 2. Disable root per render call in your controller
153
177
 
154
178
  ```ruby
155
179
  render :json => @posts, :root => false
156
180
  ```
157
181
 
158
- #### 3. Create a custom `ArraySerializer` and render arrays with it:
182
+ #### 3. Subclass the serializer, and specify using it
159
183
 
160
184
  ```ruby
161
185
  class CustomArraySerializer < ActiveModel::ArraySerializer
@@ -166,21 +190,6 @@ end
166
190
  render :json => @posts, :serializer => CustomArraySerializer
167
191
  ```
168
192
 
169
- Disabling the root element of the array with any of the above 3 methods
170
- will produce
171
-
172
- ```json
173
- [
174
- { "title": "Post 1", "body": "Hello!" },
175
- { "title": "Post 2", "body": "Goodbye!" }
176
- ]
177
- ```
178
-
179
- To specify a custom serializer for the items within an array:
180
-
181
- ```ruby
182
- render :json => @posts, :each_serializer => FancyPostSerializer
183
- ```
184
193
  #### 4. Define default_serializer_options in your controller
185
194
 
186
195
  If you define `default_serializer_options` method in your controller,
@@ -20,6 +20,4 @@ Gem::Specification.new do |gem|
20
20
  gem.add_dependency 'activemodel', '>= 3.0'
21
21
  gem.add_development_dependency "rails", ">= 3.0"
22
22
  gem.add_development_dependency "pry"
23
- gem.add_development_dependency "simplecov"
24
- gem.add_development_dependency "coveralls"
25
23
  end
@@ -83,7 +83,7 @@ module ActiveModel
83
83
  serializer = item.active_model_serializer
84
84
  end
85
85
 
86
- serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options)
86
+ serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options.merge(:root => false))
87
87
 
88
88
  if serializable.respond_to?(:serializable_hash)
89
89
  serializable.serializable_hash
@@ -337,6 +337,7 @@ module ActiveModel
337
337
  # Returns a json representation of the serializable
338
338
  # object including the root.
339
339
  def as_json(options={})
340
+ options ||= {}
340
341
  if root = options.fetch(:root, @options.fetch(:root, root_name))
341
342
  @options[:hash] = hash = {}
342
343
  @options[:unique_values] = {}
@@ -1,5 +1,5 @@
1
1
  module ActiveModel
2
2
  class Serializer
3
- VERSION = "0.8.1"
3
+ VERSION = "0.8.2"
4
4
  end
5
5
  end
@@ -20,9 +20,7 @@ if defined?(Rails)
20
20
 
21
21
  initializer "include_routes.active_model_serializer" do |app|
22
22
  ActiveSupport.on_load(:active_model_serializers) do
23
- include AbstractController::UrlFor
24
- extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
25
- include app.routes.mounted_helpers
23
+ include app.routes.url_helpers
26
24
  end
27
25
  end
28
26
 
@@ -2,6 +2,27 @@ require "test_helper"
2
2
  require "test_fakes"
3
3
 
4
4
  class ArraySerializerTest < ActiveModel::TestCase
5
+
6
+ def test_array_items_do_not_have_root
7
+ array = [
8
+ BasicActiveModel.new(:name => "First model"),
9
+ BasicActiveModel.new(:name => "Second model")
10
+ ]
11
+ expected = { "root" => [
12
+ { :name => "First model" },
13
+ { :name => "Second model" }
14
+ ] }
15
+
16
+ default_serializer = array.active_model_serializer.new(array, :root => "root")
17
+ each_serializer = array.active_model_serializer.new(array, :root => "root", :each_serializer => BasicSerializer)
18
+
19
+ default_json = default_serializer.as_json
20
+ each_json = each_serializer.as_json
21
+
22
+ assert_equal(expected, default_json)
23
+ assert_equal(expected, each_json)
24
+ end
25
+
5
26
  # serialize different typed objects
6
27
  def test_array_serializer
7
28
  model = Model.new
@@ -1449,4 +1449,17 @@ class SerializerTest < ActiveModel::TestCase
1449
1449
  }
1450
1450
  }, post_serializer.as_json)
1451
1451
  end
1452
+
1453
+ def test_as_json_with_nil_options
1454
+ user = User.new
1455
+ user_serializer = DefaultUserSerializer.new(user, {})
1456
+
1457
+ # ActiveSupport 3.1 Object#to_json generates this downstream call
1458
+ assert_equal({
1459
+ :default_user => {
1460
+ :first_name => "Jose",
1461
+ :last_name => "Valim"
1462
+ }
1463
+ }, user_serializer.as_json(nil))
1464
+ end
1452
1465
  end
data/test/test_fakes.rb CHANGED
@@ -1,3 +1,26 @@
1
+ class BasicActiveModel
2
+ include ActiveModel::Serializers::JSON
3
+ def initialize(hash = {})
4
+ @attributes = hash
5
+ end
6
+
7
+ def serializable_hash(*)
8
+ @attributes
9
+ end
10
+
11
+ def method_missing(method)
12
+ if @attributes.key? method
13
+ @attributes[method]
14
+ else
15
+ raise NoMethodError
16
+ end
17
+ end
18
+ end
19
+
20
+ class BasicSerializer < ActiveModel::Serializer
21
+ attributes :name
22
+ end
23
+
1
24
  class Model
2
25
  def initialize(hash={})
3
26
  @attributes = hash
data/test/test_helper.rb CHANGED
@@ -1,15 +1,6 @@
1
1
  require "rubygems"
2
2
  require "bundler/setup"
3
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
4
  require "pry"
14
5
 
15
6
  require "active_model_serializers"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_model_serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - José Valim
@@ -9,76 +9,48 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-06 00:00:00.000000000 Z
12
+ date: 2014-09-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '>='
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '3.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '>='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '3.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rails
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: '3.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '3.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: pry
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: simplecov
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- - !ruby/object:Gem::Dependency
71
- name: coveralls
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - '>='
53
+ - - ">="
82
54
  - !ruby/object:Gem::Version
83
55
  version: '0'
84
56
  description: Making it easy to serialize models for client-side use
@@ -89,8 +61,8 @@ executables: []
89
61
  extensions: []
90
62
  extra_rdoc_files: []
91
63
  files:
92
- - .gitignore
93
- - .travis.yml
64
+ - ".gitignore"
65
+ - ".travis.yml"
94
66
  - CHANGELOG.md
95
67
  - DESIGN.textile
96
68
  - Gemfile
@@ -132,31 +104,19 @@ require_paths:
132
104
  - lib
133
105
  required_ruby_version: !ruby/object:Gem::Requirement
134
106
  requirements:
135
- - - '>='
107
+ - - ">="
136
108
  - !ruby/object:Gem::Version
137
109
  version: '0'
138
110
  required_rubygems_version: !ruby/object:Gem::Requirement
139
111
  requirements:
140
- - - '>='
112
+ - - ">="
141
113
  - !ruby/object:Gem::Version
142
114
  version: '0'
143
115
  requirements: []
144
116
  rubyforge_project:
145
- rubygems_version: 2.0.0
117
+ rubygems_version: 2.2.2
146
118
  signing_key:
147
119
  specification_version: 4
148
120
  summary: Bringing consistency and object orientation to model serialization. Works
149
121
  great for client-side MVC frameworks!
150
- test_files:
151
- - test/array_serializer_test.rb
152
- - test/association_test.rb
153
- - test/caching_test.rb
154
- - test/generators_test.rb
155
- - test/no_serialization_scope_test.rb
156
- - test/serialization_scope_name_test.rb
157
- - test/serialization_test.rb
158
- - test/serializer_support_test.rb
159
- - test/serializer_test.rb
160
- - test/test_fakes.rb
161
- - test/test_helper.rb
162
- has_rdoc:
122
+ test_files: []