grape-active_model_serializers 1.3.2 → 1.4.0

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: 0833fa7f880a3344cf42f728b3176856e6ffd2a4
4
- data.tar.gz: d080d1eeb3674e584535668269ed1cef7af531e3
3
+ metadata.gz: c7f60aa1ac797001ff0756f457621d9ff5e99792
4
+ data.tar.gz: 5ba457a7a9b482bae17e354bef91425659c0821c
5
5
  SHA512:
6
- metadata.gz: b43a17bd55b83913d2d745db519c91e13523d601d318f6d87169ddbfae15105f71997b35461a21d238543d5e6b2cb4115b6a19083c7c39bc3ae4d81cd7ebaefb
7
- data.tar.gz: 1aa226e6e3e42baa064c8d83f413be3da199e65add7c3cceba5fb2083154cfad2a764d906cd3ad1e4ac5082c7c10d620705584a696522ad6f46e7bf5bca65d6a
6
+ metadata.gz: f3207365ca7d238a108f87045f21aa493155b836c00c54fbe141f7519feb851828ca7c94dced658404a01db3ae9053b579f2521c7a300b4d8e06f1ecef34b66c
7
+ data.tar.gz: 6c9646fc114bb51c3f8acf6d30c890283b5a9d95a8c7f8328fcf6010e21970109aba81c9019ea2b5bbf6250d328d5f29ba8cb12e538a7a39f85f1677d64eb4de
@@ -7,6 +7,9 @@
7
7
 
8
8
  # Offense count: 25
9
9
  # Configuration parameters: AllowURI, URISchemes.
10
+ Metrics/AbcSize:
11
+ Max: 20
12
+
10
13
  Metrics/LineLength:
11
14
  Max: 179
12
15
 
@@ -2,14 +2,35 @@ language: ruby
2
2
 
3
3
  sudo: false
4
4
 
5
- rvm:
6
- - 2.1.1
7
- - 1.9.3
8
- - rbx-2.2.10
9
- - jruby-19mode
10
-
11
- env:
12
- - GRAPE_VERSION=0.8.0
13
- - GRAPE_VERSION=0.9.0
14
- - GRAPE_VERSION=0.10.1
15
- - GRAPE_VERSION=HEAD
5
+ matrix:
6
+ include:
7
+ - rvm: 2.3.1
8
+ env: GRAPE_VERSION=0.8.0
9
+ - rvm: 2.3.1
10
+ env: GRAPE_VERSION=0.9.0
11
+ - rvm: 2.3.1
12
+ env: GRAPE_VERSION=0.10.1
13
+ - rvm: 2.3.1
14
+ env: GRAPE_VERSION=0.12.0
15
+ - rvm: 2.3.1
16
+ env: GRAPE_VERSION=0.13.0
17
+ - rvm: 2.3.1
18
+ env: GRAPE_VERSION=0.14.0
19
+ - rvm: 2.3.1
20
+ env: GRAPE_VERSION=0.15.0
21
+ - rvm: 2.3.1
22
+ env: GRAPE_VERSION=0.16.2
23
+ - rvm: 2.3.1
24
+ env: GRAPE_VERSION=HEAD
25
+ - rvm: 2.3.0
26
+ - rvm: 2.2.5
27
+ - rvm: 2.1
28
+ - rvm: rbx-2
29
+ - rvm: jruby-19mode
30
+ - rvm: ruby-head
31
+ - rvm: jruby-head
32
+ allow_failures:
33
+ - rvm: rbx-2
34
+ - rvm: jruby-19mode
35
+ - rvm: ruby-head
36
+ - rvm: jruby-head
@@ -0,0 +1,40 @@
1
+ ## Changelog
2
+
3
+ ### 1.5.0 (Next)
4
+
5
+ * Your contribution here.
6
+
7
+ ### 1.4.0 (July 14, 2016)
8
+
9
+ * [#49](https://github.com/jrhe/grape-active_model_serializers/pull/49): Adds support for active model serializer namespace - [@syntaxTerr0r](https://github.com/syntaxTerr0r).
10
+ * [#36](https://github.com/jrhe/grape-active_model_serializers/pull/36), [#50](https://github.com/jrhe/grape-active_model_serializers/pull/50): Added support through Grape 0.16.x - [@dblock](https://github.com/dblock).
11
+
12
+ ### v1.3.2 (February 27, 2015)
13
+
14
+ * [#39](https://github.com/jrhe/grape-active_model_serializers/pull/39): Look for namespace and other options to configure serializers - [@jwkoelewijn](https://github.com/jwkoelewijn).
15
+ * [#40](https://github.com/jrhe/grape-active_model_serializers/pull/40): Use env to pass AMS meta around - [@dblock](https://github.com/dblock).
16
+
17
+ ### v1.3.1 (November 20, 2014)
18
+
19
+ * [#30](https://github.com/jrhe/grape-active_model_serializers/pull/30): Read options from default_serializer_options - [@siong1987](https://github.com/siong1987).
20
+ * [#24](https://github.com/jrhe/grape-active_model_serializers/pull/24): Makes it possible to use `current_user` within serializers - [@sonxurxo](https://github.com/sonxurxo).
21
+
22
+ ### v1.2.1 (July 23, 2014)
23
+
24
+ * [#21](https://github.com/jrhe/grape-active_model_serializers/pull/21): Correctly fetch serialization scope - [@radanskoric](https://github.com/radanskoric).
25
+ * [#18](https://github.com/jrhe/grape-active_model_serializers/pull/18): Added support for active model serializer 0.9.x - [@sbounmy](https://github.com/sbounmy).
26
+
27
+ * [#15](https://github.com/jrhe/grape-active_model_serializers/pull/15): Added `render` syntactic sugar - [@zph](https://github.com/zph).
28
+ * [#14](https://github.com/jrhe/grape-active_model_serializers/pull/14): Fix: `default_root` method to support symbol route in Grape - [@wjp2013](https://github.com/wjp2013).
29
+ * [#12](https://github.com/jrhe/grape-active_model_serializers/pull/12): Added support for `current_user` - [@kpassapk](https://github.com/kpassapk).
30
+ * [#11](https://github.com/jrhe/grape-active_model_serializers/pull/11): Fixed require path - [@schickling](https://github.com/schickling).
31
+
32
+ ### v1.0.1 (September 9, 2013)
33
+
34
+ * [#6](https://github.com/jrhe/grape-active_model_serializers/pull/6): Conform to ActiveModel::Serializers way of determining array-ness - [@tfe](https://github.com/tfe).
35
+ * [#4](https://github.com/jrhe/grape-active_model_serializers/pull/4): Support for namespace options and rely more on active_model_serializers - [@johnallen3d](https://github.com/johnallen3d).
36
+ * [#1](https://github.com/jrhe/grape-active_model_serializers/pull/1): Fix: Grape::ActiveModelSerializers for models with compound names - [@george](https://github.com/george).
37
+
38
+ ### v1.0.0
39
+
40
+ * Initial public release - [@jrhe](https://github.com/jrhe).
@@ -0,0 +1,126 @@
1
+ # Contributing to Grape-Swagger
2
+
3
+ This project is work of [many contributors](https://github.com/ruby-grape/grape-active_model_serializers/graphs/contributors).
4
+ You're encouraged to submit [pull requests](https://github.com/ruby-grape/grape-active_model_serializers/pulls),
5
+ [propose features and discuss issues](https://github.com/ruby-grape/grape-active_model_serializers/issues).
6
+ When in doubt, ask a question in the [Grape Google Group](http://groups.google.com/group/ruby-grape).
7
+
8
+ In the examples below, substitute your Github username for `contributor` in URLs.
9
+
10
+ ## Fork the Project
11
+
12
+ Fork the [project on Github](https://github.com/ruby-grape/grape-active_model_serializers) and check out your copy.
13
+
14
+ ```
15
+ git clone https://github.com/contributor/grape-active_model_serializers.git
16
+ cd grape-active_model_serializers
17
+ git remote add upstream https://github.com/ruby-grape/grape-active_model_serializers.git
18
+ ```
19
+
20
+ ## Create a Topic Branch
21
+
22
+ Make sure your fork is up-to-date and create a topic branch for your feature or bug fix.
23
+
24
+ ```
25
+ git checkout master
26
+ git pull upstream master
27
+ git checkout -b my-feature-branch
28
+ ```
29
+
30
+ ## Bundle Install and Test
31
+
32
+ Ensure that you can build the project and run tests.
33
+
34
+ ```
35
+ bundle install
36
+ bundle exec rake
37
+ ```
38
+
39
+ ## Write Tests
40
+
41
+ Try to write a test that reproduces the problem you're trying to fix or describes a feature that you want to build.
42
+ Add to [spec](spec).
43
+
44
+ We definitely appreciate pull requests that highlight or reproduce a problem, even without a fix.
45
+
46
+ ## Write Code
47
+
48
+ Implement your feature or bug fix.
49
+
50
+ Ruby style is enforced with [RuboCop](https://github.com/bbatsov/rubocop).
51
+ Run `bundle exec rubocop` and fix any style issues highlighted.
52
+
53
+ Make sure that `bundle exec rake` completes without errors.
54
+
55
+ ## Write Documentation
56
+
57
+ Document any external behavior in the [README](README.md).
58
+
59
+ ## Update Changelog
60
+
61
+ Add a line to [CHANGELOG](CHANGELOG.md) under *Next Release*.
62
+ Make it look like every other line, including your name and link to your Github account.
63
+
64
+ ## Commit Changes
65
+
66
+ Make sure git knows your name and email address:
67
+
68
+ ```
69
+ git config --global user.name "Your Name"
70
+ git config --global user.email "contributor@example.com"
71
+ ```
72
+
73
+ Writing good commit logs is important. A commit log should describe what changed and why.
74
+
75
+ ```
76
+ git add ...
77
+ git commit
78
+ ```
79
+
80
+ ## Push
81
+
82
+ ```
83
+ git push origin my-feature-branch
84
+ ```
85
+
86
+ ## Make a Pull Request
87
+
88
+ Go to https://github.com/contributor/grape-active_model_serializers and select your feature branch.
89
+ Click the 'Pull Request' button and fill out the form. Pull requests are usually reviewed within a few days.
90
+
91
+ ## Rebase
92
+
93
+ If you've been working on a change for a while, rebase with upstream/master.
94
+
95
+ ```
96
+ git fetch upstream
97
+ git rebase upstream/master
98
+ git push origin my-feature-branch -f
99
+ ```
100
+
101
+ ## Update CHANGELOG Again
102
+
103
+ Update the [CHANGELOG](CHANGELOG.md) with the pull request number. A typical entry looks as follows.
104
+
105
+ ```
106
+ * [#123](https://github.com/ruby-grape/grape-active_model_serializers/pull/123): Reticulated splines - [@contributor](https://github.com/contributor).
107
+ ```
108
+
109
+ Amend your previous commit and force push the changes.
110
+
111
+ ```
112
+ git commit --amend
113
+ git push origin my-feature-branch -f
114
+ ```
115
+
116
+ ## Check on Your Pull Request
117
+
118
+ Go back to your pull request after a few minutes and see whether it passed muster with Travis-CI. Everything should look green, otherwise fix issues and amend your commit as described above.
119
+
120
+ ## Be Patient
121
+
122
+ It's likely that your change will not be merged and that the nitpicky maintainers will ask you to do more, or fix seemingly benign problems. Hang on there!
123
+
124
+ ## Thank You
125
+
126
+ Please do know that we really appreciate and value your time and work. We love you, really.
data/README.md CHANGED
@@ -2,24 +2,17 @@
2
2
 
3
3
  Use [active_model_serializers](https://github.com/rails-api/active_model_serializers) with [Grape](https://github.com/intridea/grape)!
4
4
 
5
- [![Build Status](https://api.travis-ci.org/jrhe/grape-active_model_serializers.png)](http://travis-ci.org/jrhe/grape-active_model_serializers) [![Dependency Status](https://gemnasium.com/jrhe/grape-active_model_serializers.png)](https://gemnasium.com/jrhe/grape-active_model_serializers) [![Code Climate](https://codeclimate.com/github/jrhe/grape-active_model_serializers.png)](https://codeclimate.com/github/jrhe/grape-active_model_serializers)
6
-
7
- ## Breaking Changes
8
- #### v1.0.0
9
- * *BREAKING* Changes behaviour of root keys when serialising arrays. See [Array roots](https://github.com/jrhe/grape-active_model_serializers#array-roots)
5
+ [![Build Status](https://api.travis-ci.org/ruby-grape/grape-active_model_serializers.svg)](http://travis-ci.org/ruby-grape/grape-active_model_serializers) [![Dependency Status](https://gemnasium.com/ruby-grape/grape-active_model_serializers.svg)](https://gemnasium.com/ruby-grape/grape-active_model_serializers) [![Code Climate](https://codeclimate.com/github/jrhe/grape-active_model_serializers.svg)](https://codeclimate.com/github/jrhe/grape-active_model_serializers)
10
6
 
11
7
  ## Installation
12
8
 
13
- Add the `grape` and `grape-active_model_serializers` gems to Gemfile.
9
+ Add the `grape` and `grape-active_model_serializers` gems to Gemfile and run `bundle install`.
14
10
 
15
11
  ```ruby
16
- gem 'grape'
17
12
  gem 'grape-active_model_serializers'
18
13
  ```
19
14
 
20
- And then execute:
21
-
22
- bundle
15
+ See [UPGRADING](UPGRADING.md) if you're upgrading from a previous version.
23
16
 
24
17
  ## Usage
25
18
 
@@ -30,7 +23,6 @@ And then execute:
30
23
  require 'grape-active_model_serializers'
31
24
  ```
32
25
 
33
-
34
26
  ### Tell your API to use Grape::Formatter::ActiveModelSerializers
35
27
 
36
28
  ```ruby
@@ -40,8 +32,7 @@ class API < Grape::API
40
32
  end
41
33
  ```
42
34
 
43
-
44
- ### Writing serializers
35
+ ### Writing Serializers
45
36
 
46
37
  See [active_model_serializers](https://github.com/rails-api/active_model_serializers)
47
38
 
@@ -59,8 +50,11 @@ end
59
50
  ```
60
51
  In this case, as User objects are being returned, grape-active_model_serializers will look for a serializer named UserSerializer.
61
52
 
62
- ### Array roots
63
- When serializing an array, the array root is set to the innermost namespace name if there is one, otherwise it is set to the route name (e.g. get 'name').
53
+ ### Array Roots
54
+
55
+ When serializing an array, the array root is set to the innermost namespace name if there is one, otherwise it is set to the route name.
56
+
57
+ In the following API the array root is `users`.
64
58
 
65
59
  ```ruby
66
60
  namespace :users do
@@ -68,16 +62,87 @@ namespace :users do
68
62
  @user = User.find(params[:id])
69
63
  end
70
64
  end
71
- # root = users
72
65
  ```
73
66
 
67
+ In the following example the array root is `people`.
68
+
74
69
  ```ruby
75
70
  get "people" do
76
71
  @user = User.all
77
72
  end
78
- # root = people
79
73
  ```
80
74
 
75
+ ### API Versioning
76
+
77
+ If your Grape API is versioned you must namespace your serializers accordingly.
78
+
79
+ For example, given the following API.
80
+
81
+ ```ruby
82
+ module CandyBar
83
+ class Core < Grape::API
84
+ version 'candy_bar', using: :header, vendor: 'acme'
85
+ end
86
+ end
87
+
88
+ module Chocolate
89
+ class Core < Grape::API
90
+ version 'chocolate', using: :header, vendor: 'acme'
91
+ end
92
+ end
93
+
94
+ class API < Grape::API
95
+ format :json
96
+ formatter :json, Grape::Formatter::ActiveModelSerializers
97
+
98
+ mount CandyBar::Core
99
+ mount Chocolate::Core
100
+ end
101
+ ```
102
+
103
+ Namespace your serializers according to each version.
104
+
105
+ ```ruby
106
+ module CandyBar
107
+ class UserSerializer < ActiveModel::Serializer
108
+ attributes :first_name, :last_name, :email
109
+ end
110
+ end
111
+
112
+ module Chocolate
113
+ class UserSerializer < ActiveModel::Serializer
114
+ attributes :first_name, :last_name
115
+ end
116
+ end
117
+ ```
118
+
119
+ This keeps serializers organized.
120
+
121
+ ```
122
+ app
123
+ └── api
124
+ ├── chocolate
125
+ └── core.rb
126
+ └── candy_bar
127
+ └── core.rb
128
+ api.rb
129
+ └── serializers
130
+ ├── chocolate
131
+ └── user_serializer.rb
132
+ └── candy_bar
133
+ └── user_serializer.rb
134
+ ```
135
+
136
+ Or as follows.
137
+
138
+ ```
139
+ └── serializers
140
+ ├── chocolate_user_serializer.rb
141
+ └── candy_bar_user_serializer.rb
142
+ ```
143
+
144
+ ActiveModelSerializer will fetch automatically the right serializer to render.
145
+
81
146
  ### Manually specifying serializer options
82
147
 
83
148
  ```ruby
@@ -99,7 +164,7 @@ namespace 'foo', serializer: BarSerializer do
99
164
  end
100
165
  ```
101
166
 
102
- ### Custom metadata along with the resources
167
+ ### Custom Metadata
103
168
 
104
169
  ```ruby
105
170
  # Control any additional metadata using meta and meta_key
@@ -109,23 +174,21 @@ get "/homes"
109
174
  end
110
175
  ```
111
176
 
112
- ### Support for `default_serializer_options`
177
+ ### Default Serializer Options
113
178
 
114
179
  ```ruby
115
180
  helpers do
116
181
  def default_serializer_options
117
- {only: params[:only], except: params[:except]}
182
+ { only: params[:only], except: params[:except] }
118
183
  end
119
184
  end
120
185
  ```
121
186
 
122
- ### current_user
187
+ ### Current User
123
188
 
124
- One of the nice features of ActiveModel::Serializers is that it
125
- provides access to the authorization context via the `current_user`.
189
+ One of the nice features of ActiveModel::Serializers is that it provides access to the authorization context via the `current_user`.
126
190
 
127
- In Grape, you can get the same behavior by defining a `current_user`
128
- helper method:
191
+ In Grape, you can get the same behavior by defining a `current_user` helper method.
129
192
 
130
193
  ```ruby
131
194
  helpers do
@@ -139,18 +202,18 @@ helpers do
139
202
  end
140
203
  ```
141
204
 
142
- Then, in your serializer, you could show or hide some elements
143
- based on the current user's permissions:
205
+ Then, in your serializer, you could show or hide some elements based on the current user's permissions.
144
206
 
145
207
  ```ruby
146
208
  class PostSerializer < ActiveModel::Serializer
147
- ...
148
209
  def include_admin_comments?
149
210
  current_user.roles.member? :admin
150
211
  end
151
212
  end
152
213
  ```
153
214
 
215
+ *Note*: in the [0.9.x stable version of active model serializers](https://github.com/rails-api/active_model_serializers/tree/0-9-stable#customizing-scope), you have to access current user on scope - so `scope.current_user`.
216
+
154
217
  ### Full Example
155
218
 
156
219
  ```ruby
@@ -171,40 +234,10 @@ end
171
234
  API.new.get "/home" # => '{ user: { first_name: "JR", last_name: "HE" } }'
172
235
  ```
173
236
 
174
-
175
- ## RSpec
176
-
177
- See "Writing Tests" in https://github.com/intridea/grape.
178
-
179
- Enjoy :)
180
-
181
- ## Changelog
182
-
183
- #### Next
184
- * Adds support for Grape 0.10.x
185
-
186
-
187
- #### v1.2.1
188
- * Adds support for active model serializer 0.9.x
189
-
190
-
191
- #### v1.0.0
192
- * Released on rubygems.org
193
- * *BREAKING* Changes behaviour of root keys when serialising arrays. See [Array roots](https://github.com/jrhe/grape-active_model_serializers#array-roots)
194
-
195
-
196
237
  ## Contributing
197
238
 
198
- 1. Fork it
199
- 2. Create your feature branch (`git checkout -b my-new-feature`)
200
- 3. Commit your changes (`git commit -am 'Added some feature'`)
201
- 4. Push to the branch (`git push origin my-new-feature`)
202
- 5. Create new Pull Request
203
-
239
+ See [CONTRIBUTING](CONTRIBUTING.md).
204
240
 
205
- ## Thanks to
206
- The developers and maintainers of:
207
- [active_model_serializers](https://github.com/rails-api/active_model_serializers)
208
- [Grape](https://github.com/intridea/grape)!
241
+ ## History
209
242
 
210
243
  Structured and based upon [grape-rabl](https://github.com/LTe/grape-rabl).
@@ -0,0 +1,100 @@
1
+ ### Upgrading to v.1.4.0
2
+
3
+ #### Changes in Serializer Namespacing
4
+
5
+ Version 1.4.0 introduced changes in serializer namespacing when using Grape API versioning.
6
+
7
+ If you haven't declared an API version in Grape, nothing changed.
8
+
9
+ If your Grape API is versioned, which means you have declared at least one version in Grape, you must namespace your serializers accordingly.
10
+
11
+ For example, given the following API.
12
+
13
+ ```ruby
14
+ module CandyBar
15
+ class Core < Grape::API
16
+ version 'candy_bar', using: :header, vendor: 'acme'
17
+ end
18
+ end
19
+
20
+ module Chocolate
21
+ class Core < Grape::API
22
+ version 'chocolate', using: :header, vendor: 'acme'
23
+ end
24
+ end
25
+
26
+ class API < Grape::API
27
+ format :json
28
+ formatter :json, Grape::Formatter::ActiveModelSerializers
29
+
30
+ mount CandyBar::Core
31
+ mount Chocolate::Core
32
+ end
33
+ ```
34
+
35
+ Namespace serializers according to each version.
36
+
37
+ ```ruby
38
+ module CandyBar
39
+ class UserSerializer < ActiveModel::Serializer
40
+ attributes :first_name, :last_name, :email
41
+ end
42
+ end
43
+
44
+ module Chocolate
45
+ class UserSerializer < ActiveModel::Serializer
46
+ attributes :first_name, :last_name
47
+ end
48
+ end
49
+ ```
50
+
51
+ This will allow you to keep your serializers easier to maintain and more organized.
52
+
53
+ ```
54
+ app
55
+ └── api
56
+ ├── chocolate
57
+ └── core.rb
58
+ └── candy_bar
59
+ └── core.rb
60
+ api.rb
61
+ └── serializers
62
+ ├── chocolate
63
+ └── user_serializer.rb
64
+ └── candy_bar
65
+ └── user_serializer.rb
66
+ ```
67
+
68
+ or alternatively:
69
+
70
+ ```
71
+ └── serializers
72
+ ├── chocolate_user_serializer.rb
73
+ └── candy_bar_user_serializer.rb
74
+ ```
75
+
76
+ Thus, ActiveModelSerializer will fetch automatically the right serializer to render.
77
+
78
+ ### Upgrading to v1.0.0
79
+
80
+ #### Changes to Array Roots
81
+
82
+ When serializing an array, the array root is set to the innermost namespace name if there is one, otherwise it is set to the route name.
83
+
84
+ In the following example the array root is `users`.
85
+
86
+ ```ruby
87
+ namespace :users do
88
+ get ":id" do
89
+ @user = User.find(params[:id])
90
+ end
91
+ end
92
+ ```
93
+
94
+ In the following example the array root is `people`.
95
+
96
+ ```ruby
97
+ get "people" do
98
+ @user = User.all
99
+ end
100
+ ```
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ['contact@jrhe.co.uk']
7
7
  gem.summary = 'Use active_model_serializer in grape'
8
8
  gem.description = 'Provides a Formatter for the Grape API DSL to emit objects serialized with active_model_serializers.'
9
- gem.homepage = 'https://github.com/jrhe/grape-active_model_serializers'
9
+ gem.homepage = 'https://github.com/ruby-grape/grape-active_model_serializers'
10
10
 
11
11
  gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
12
12
  gem.files = `git ls-files`.split("\n")
@@ -19,6 +19,7 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency 'grape'
20
20
  gem.add_dependency 'active_model_serializers', '>= 0.9.0'
21
21
 
22
+ gem.add_development_dependency 'listen', '~> 3.0.7'
22
23
  gem.add_development_dependency 'rspec'
23
24
  gem.add_development_dependency 'rack-test'
24
25
  gem.add_development_dependency 'rake'
@@ -15,8 +15,12 @@ module Grape
15
15
  def fetch_serializer(resource, env)
16
16
  endpoint = env['api.endpoint']
17
17
  options = build_options_from_endpoint(endpoint)
18
+ ams_options = {}.tap do |ns|
19
+ # Extracting declared version from Grape
20
+ ns[:namespace] = options[:version].try(:classify) if options.try(:[], :version)
21
+ end
18
22
 
19
- serializer = options.fetch(:serializer, ActiveModel::Serializer.serializer_for(resource))
23
+ serializer = options.fetch(:serializer, ActiveModel::Serializer.serializer_for(resource, ams_options))
20
24
  return nil unless serializer
21
25
 
22
26
  options[:scope] = endpoint unless options.key?(:scope)
@@ -28,7 +32,7 @@ module Grape
28
32
  def other_options(env)
29
33
  options = {}
30
34
  ams_meta = env['ams_meta'] || {}
31
- meta = ams_meta.delete(:meta)
35
+ meta = ams_meta.delete(:meta)
32
36
  meta_key = ams_meta.delete(:meta_key)
33
37
  options[:meta_key] = meta_key if meta && meta_key
34
38
  options[meta_key || :meta] = meta if meta
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module ActiveModelSerializers
3
- VERSION = '1.3.2'
3
+ VERSION = '1.4.0'
4
4
  end
5
5
  end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+ require 'grape-active_model_serializers/formatter'
3
+
4
+ describe Grape::Formatter::ActiveModelSerializers do
5
+ describe 'with a versioned API' do
6
+ subject { Grape::Formatter::ActiveModelSerializers }
7
+
8
+ describe 'serializer options from namespace' do
9
+ let(:app) { Class.new(Grape::API) }
10
+
11
+ before do
12
+ app.format :json
13
+ app.formatter :json, Grape::Formatter::ActiveModelSerializers
14
+ app.version 'v1', using: :param
15
+
16
+ app.namespace('space') do |ns|
17
+ ns.get('/', root: false, apiver: 'v1') do
18
+ { user: { first_name: 'JR', last_name: 'HE', email: 'jrhe@github.com' } }
19
+ end
20
+ end
21
+ end
22
+
23
+ it 'should read serializer options like "root"' do
24
+ expect(described_class.build_options_from_endpoint(app.endpoints.first)).to include :root
25
+ end
26
+ end
27
+
28
+ describe '.fetch_serializer' do
29
+ let(:user) { User.new(first_name: 'John', email: 'j.doe@internet.com') }
30
+
31
+ if Grape::Util.const_defined?('InheritableSetting')
32
+ let(:endpoint) { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, path: '/', method: 'foo', version: 'v1', root: false) }
33
+ else
34
+ let(:endpoint) { Grape::Endpoint.new({}, path: '/', method: 'foo', version: 'v1', root: false) }
35
+ end
36
+
37
+ let(:env) { { 'api.endpoint' => endpoint } }
38
+
39
+ before do
40
+ def endpoint.current_user
41
+ @current_user ||= User.new(first_name: 'Current user')
42
+ end
43
+
44
+ def endpoint.default_serializer_options
45
+ { only: :only, except: :except }
46
+ end
47
+ end
48
+
49
+ subject { described_class.fetch_serializer(user, env) }
50
+
51
+ it { should be_a V1::UserSerializer }
52
+
53
+ it 'should have correct scope set' do
54
+ expect(subject.scope.current_user).to eq(endpoint.current_user)
55
+ end
56
+
57
+ it 'should read default serializer options' do
58
+ expect(subject.instance_variable_get('@only')).to eq([:only])
59
+ expect(subject.instance_variable_get('@except')).to eq([:except])
60
+ end
61
+
62
+ it 'should read serializer options like "root"' do
63
+ expect(described_class.build_options_from_endpoint(endpoint).keys).to include :root
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,5 @@
1
+ module V1
2
+ class UserSerializer < ActiveModel::Serializer
3
+ attributes :first_name, :last_name, :email
4
+ end
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-active_model_serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Richard Henry Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-27 00:00:00.000000000 Z
11
+ date: 2016-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.9.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: listen
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.7
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.7
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -120,11 +134,14 @@ files:
120
134
  - ".rubocop.yml"
121
135
  - ".rubocop_todo.yml"
122
136
  - ".travis.yml"
137
+ - CHANGELOG.md
138
+ - CONTRIBUTING.md
123
139
  - Gemfile
124
140
  - Guardfile
125
141
  - LICENSE.txt
126
142
  - README.md
127
143
  - Rakefile
144
+ - UPGRADING.md
128
145
  - grape-active_model_serializers.gemspec
129
146
  - lib/.rspec
130
147
  - lib/.travis.yml
@@ -135,6 +152,7 @@ files:
135
152
  - spec/features/grape-active_model_serializers/render_spec.rb
136
153
  - spec/grape-active_model_serializers/endpoint_extension_spec.rb
137
154
  - spec/grape-active_model_serializers/formatter_spec.rb
155
+ - spec/grape-active_model_serializers/versioned_api_formatter_spec.rb
138
156
  - spec/grape-active_model_serializers_spec.rb
139
157
  - spec/old_grape_ams_spec.rb
140
158
  - spec/spec_helper.rb
@@ -142,7 +160,8 @@ files:
142
160
  - spec/support/models/user.rb
143
161
  - spec/support/serializers/blog_post_serializer.rb
144
162
  - spec/support/serializers/user_serializer.rb
145
- homepage: https://github.com/jrhe/grape-active_model_serializers
163
+ - spec/support/serializers/v1/user_serializer.rb
164
+ homepage: https://github.com/ruby-grape/grape-active_model_serializers
146
165
  licenses:
147
166
  - MIT
148
167
  metadata: {}
@@ -162,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
181
  version: '0'
163
182
  requirements: []
164
183
  rubyforge_project:
165
- rubygems_version: 2.4.5
184
+ rubygems_version: 2.6.6
166
185
  signing_key:
167
186
  specification_version: 4
168
187
  summary: Use active_model_serializer in grape
@@ -170,6 +189,7 @@ test_files:
170
189
  - spec/features/grape-active_model_serializers/render_spec.rb
171
190
  - spec/grape-active_model_serializers/endpoint_extension_spec.rb
172
191
  - spec/grape-active_model_serializers/formatter_spec.rb
192
+ - spec/grape-active_model_serializers/versioned_api_formatter_spec.rb
173
193
  - spec/grape-active_model_serializers_spec.rb
174
194
  - spec/old_grape_ams_spec.rb
175
195
  - spec/spec_helper.rb
@@ -177,3 +197,5 @@ test_files:
177
197
  - spec/support/models/user.rb
178
198
  - spec/support/serializers/blog_post_serializer.rb
179
199
  - spec/support/serializers/user_serializer.rb
200
+ - spec/support/serializers/v1/user_serializer.rb
201
+ has_rdoc: