grape-jsonapi-resources 0.0.6 → 0.0.7

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: 575cc7e2962074d9f9e4ffb125db8b851e991e28
4
- data.tar.gz: b1af375ccf4b1bf922704ce91b703bf2f6d23cad
3
+ metadata.gz: 501995cf9777aea9358f30ffcf907dc906b5cf90
4
+ data.tar.gz: aa46b95ca1832521723d19881eb4da9321f8cc18
5
5
  SHA512:
6
- metadata.gz: edac78ce14e4248f4222c506902402afc908bcd978f45ac38b36edf9cc3b0578f854df65a5fd86b3e7c40205cc7ab51045c2c9788c1582c036979ec51996bfda
7
- data.tar.gz: 941743ea6628246b0b04afd9874f8a38f99e22789a0916725d4d55b000f72679201fa7ab25046a5ab6a2e839d7bc0894048b52f92504a132ab8c21a7b8fa1880
6
+ metadata.gz: a6abff14330738a8b9de22a49936f4a2270529637584acb40eb2226197aa4a2dd97657af8b4d6e0507bc03a128f0cbcda72d04f147ed0195f7b7bb9f114db130
7
+ data.tar.gz: 3047469ceb26c6525043499d94f2fd738085c3c589ebadf084ba839694681eb5ad0ac30c4c5a64e20759027dc33a2cbc2b38d67cddcca344ab923f24d5a11a21
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.1
data/Gemfile CHANGED
@@ -8,3 +8,5 @@ when 'HEAD'
8
8
  else
9
9
  gem 'grape', version
10
10
  end
11
+
12
+ gem 'jsonapi-resources', "0.8.0.beta2"
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency 'grape'
20
20
  gem.add_dependency 'jsonapi-resources', '>= 0.5.0'
21
21
 
22
- gem.add_development_dependency 'rails-api', '>= 0.4.0'
22
+ gem.add_development_dependency 'rails', '>= 5.0.0'
23
23
  gem.add_development_dependency 'rspec'
24
24
  gem.add_development_dependency 'rack-test'
25
25
  gem.add_development_dependency 'rake'
@@ -35,22 +35,34 @@ module Grape
35
35
  end
36
36
 
37
37
  resource_instances = nil
38
+ sorted_primary_ids = nil
38
39
  if resource.respond_to?(:to_ary)
39
40
  resource_instances = resource.to_ary.compact.collect do |each_resource|
40
41
  each_resource_class = resource_class_for(each_resource)
41
42
  each_resource_class.new(each_resource, context)
42
43
  end
44
+ sorted_primary_ids = resource_instances.collect { |resource_instance| resource_instance.try(:id) }
43
45
  else
44
46
  resource_instances = resource_class.new(resource, context)
45
47
  end
46
48
 
47
- resource_serialzer = JSONAPI::ResourceSerializer.new(resource_class, jsonapi_options).serialize_to_hash(resource_instances)
48
- if jsonapi_options[:meta]
49
+ resource_serialzed = JSONAPI::ResourceSerializer.new(resource_class, jsonapi_options).serialize_to_hash(resource_instances)
50
+ json_output = if jsonapi_options[:meta]
49
51
  # Add option to merge top level meta tag as jsonapi-resources does not appear to support this
50
- resource_serialzer.as_json.merge(meta: jsonapi_options[:meta]).to_json if jsonapi_options[:meta]
52
+ resource_serialzed.as_json.merge(meta: jsonapi_options[:meta])
51
53
  else
52
- resource_serialzer.to_json
54
+ resource_serialzed
53
55
  end
56
+
57
+ # Ensure sort order is maintained, serialize_to_hash can reorder objects if
58
+ # objects of the array are of different types (polymorphic cases)
59
+ json_output = json_output.stringify_keys
60
+ if sorted_primary_ids && (data = json_output["data"]).present?
61
+ sorted_primary_ids = sorted_primary_ids.map(&:to_s)
62
+ json_output["data"] = data.sort_by { |d| sorted_primary_ids.index(d["id"]) }
63
+ end
64
+
65
+ json_output.to_json
54
66
  end
55
67
 
56
68
  def build_options_from_endpoint(endpoint)
@@ -1,5 +1,5 @@
1
1
  module Grape
2
2
  module JSONAPIResources
3
- VERSION = '0.0.6'
3
+ VERSION = '0.0.7'
4
4
  end
5
5
  end
@@ -25,6 +25,8 @@ describe Grape::Formatter::JSONAPIResources do
25
25
 
26
26
  describe '.serialize_resource' do
27
27
  let(:user) { User.new(first_name: 'John', id: 123) }
28
+ let(:user_2) { User.new(first_name: 'Jane', id: 456) }
29
+ let(:blog_post) { BlogPost.new(title: 'Blag', body: 'Super blag', id: 321) }
28
30
 
29
31
  if Grape::Util.const_defined?('InheritableSetting')
30
32
  let(:endpoint) { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, path: '/', method: 'foo', root: false) }
@@ -53,7 +55,12 @@ describe Grape::Formatter::JSONAPIResources do
53
55
  expect(UserResource).to receive(:new).with(user, {current_user: endpoint.current_user}).twice.and_call_original
54
56
  described_class.serialize_resource([ user, user ], env)
55
57
  end
56
- # array
58
+
59
+ it 'should maintain order of different resources' do
60
+ serialized_results = ActiveSupport::JSON.decode(described_class.serialize_resource([user, blog_post, user_2], env))
61
+ expect(serialized_results["data"].map {|r| r["id"]}).to eq([user.id, blog_post.id, user_2.id].map(&:to_s))
62
+ expect(serialized_results["data"].map {|r| r["type"]}).to eq(["users", "blog-posts", "users"])
63
+ end
57
64
 
58
65
  it 'should specify serializer options like "base_url" and "include"' do
59
66
  allow(described_class).to receive(:build_options_from_endpoint).with(endpoint).and_return({base_url: "/api/v1"})
data/spec/spec_helper.rb CHANGED
@@ -8,7 +8,7 @@ require 'rails'
8
8
  require 'action_controller'
9
9
  require 'active_model'
10
10
  require 'jsonapi-resources'
11
- require 'active_support/core_ext/hash/conversions'
11
+ require 'active_support/core_ext'
12
12
  require 'active_support/json'
13
13
  require 'rspec'
14
14
  require 'rack/test'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-jsonapi-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cary Dunn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-16 00:00:00.000000000 Z
11
+ date: 2016-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.5.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: rails-api
42
+ name: rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.0
47
+ version: 5.0.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.4.0
54
+ version: 5.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -105,6 +105,7 @@ files:
105
105
  - ".gitignore"
106
106
  - ".rubocop.yml"
107
107
  - ".rubocop_todo.yml"
108
+ - ".ruby-version"
108
109
  - ".travis.yml"
109
110
  - Gemfile
110
111
  - LICENSE.txt