active_model_serializers 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
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: []