grape-jsonapi-resources 0.0.6 → 0.0.7

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: 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