jsonapi-resources 0.0.9 → 0.0.10

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: 6eb51f8c096de8ece9f78168a967750a958fe620
4
- data.tar.gz: 1e7e845621c801642776c99bd559185af85a645c
3
+ metadata.gz: f0f3c0056192f7ce0100152a1365750eeec04e3b
4
+ data.tar.gz: 5d2b1057fc7f624e91eee60ea8a5cbaff019516d
5
5
  SHA512:
6
- metadata.gz: 57b8f79c39ddfe67ab9fc939292b8f9c9ed014cf0b673eab9c7e9957a927dd743b51c719c40c55973c81856898c349715c1ae3560a8e72c5efc37fe7c71e7407
7
- data.tar.gz: d3ac8f45d9d357fc9adc44a88cb46596c5dcb81bac8b6f1bb3bbb20079eb797490689f4014e118a52a3885f418d9955ebc52e21f8de0f1fe66ccfb4fe18852f6
6
+ metadata.gz: 25ff4a750913e3a987e2e0c3b1e366b8195db07d4487d849608637cb0c3cdfc62bbae9ea0553284bba60a12b41de19b6d451f448dd68c32c9b92d8319cde5d9b
7
+ data.tar.gz: 41a3b01c6367dd22b4ce0f285a2a4cbba91cb84868ab5dbb345498387cc2921c5565edc0c6f095de37a8a56b8b8c093460f6f83f2be3d9c55821869671dd8468
@@ -261,6 +261,18 @@ module JSONAPI
261
261
  self.new(model, context)
262
262
  end
263
263
 
264
+ def find_by_keys(keys, options = {})
265
+ context = options[:context]
266
+ _models = _model_class.where({_primary_key => keys})
267
+
268
+ unless _models.length == keys.length
269
+ key = (keys - _models.pluck(:id).map(&:to_s)).first
270
+ raise JSONAPI::Exceptions::RecordNotFound.new(key)
271
+ end
272
+
273
+ _models.map { |model| self.new(model, context) }
274
+ end
275
+
264
276
  def verify_filters(filters, context = nil)
265
277
  verified_filters = {}
266
278
  filters.each do |filter, raw_value|
@@ -398,7 +410,7 @@ module JSONAPI
398
410
  resource_class = self.class.resource_for(type_name)
399
411
  if resource_class
400
412
  associated_model = @model.send attr
401
- return resource_class.new(associated_model, @context)
413
+ return associated_model ? resource_class.new(associated_model, @context) : nil
402
414
  end
403
415
  end unless method_defined?(attr)
404
416
  elsif @_associations[attr].is_a?(JSONAPI::Association::HasMany)
@@ -30,14 +30,11 @@ module JSONAPI
30
30
  def show
31
31
  keys = parse_key_array(params[resource_klass._primary_key])
32
32
 
33
- if keys.length > 1
34
- resources = []
35
- keys.each do |key|
36
- resources.push(resource_klass.find_by_key(key, context: context))
37
- end
38
- else
39
- resources = resource_klass.find_by_key(keys[0], context: context)
40
- end
33
+ resources = if keys.length > 1
34
+ resource_klass.find_by_keys(keys, context: context)
35
+ else
36
+ resource_klass.find_by_key(keys[0], context: context)
37
+ end
41
38
 
42
39
  render json: JSONAPI::ResourceSerializer.new.serialize_to_hash(
43
40
  resources,
@@ -1,5 +1,5 @@
1
1
  module JSONAPI
2
2
  module Resources
3
- VERSION = "0.0.9"
3
+ VERSION = "0.0.10"
4
4
  end
5
5
  end
@@ -971,6 +971,12 @@ class TagsControllerTest < ActionController::TestCase
971
971
  assert_equal 4, json_response['tags'].size
972
972
  assert_equal 2, json_response['linked']['posts'].size
973
973
  end
974
+
975
+ def test_tags_show_multiple_with_nonexistent_ids
976
+ get :show, {id: '6,99,9,100'}
977
+ assert_response :not_found
978
+ assert_match /The record identified by 99 could not be found./, json_response['errors'][0]['detail']
979
+ end
974
980
  end
975
981
 
976
982
  class ExpenseEntriesControllerTest < ActionController::TestCase
@@ -135,7 +135,7 @@ end
135
135
 
136
136
  class Planet < ActiveRecord::Base
137
137
  has_many :moons
138
- has_one :planet_type
138
+ belongs_to :planet_type
139
139
 
140
140
  has_and_belongs_to_many :tags, join_table: :planets_tags
141
141
  end
@@ -432,6 +432,10 @@ class BreedResource < JSONAPI::Resource
432
432
  def self.find_by_key(id, options = {})
433
433
  BreedResource.new($breed_data.breeds[id.to_i], options[:context])
434
434
  end
435
+
436
+ def self.find_by_keys(keys, options = {})
437
+ keys.map { |key| self.find_by_key(key, options) }
438
+ end
435
439
  end
436
440
 
437
441
  class PlanetResource < JSONAPI::Resource
@@ -452,7 +456,7 @@ class PropertyResource < JSONAPI::Resource
452
456
  end
453
457
 
454
458
  class PlanetTypeResource < JSONAPI::Resource
455
- attribute :name
459
+ attributes :id, :name
456
460
  has_many :planets
457
461
  end
458
462
 
@@ -549,4 +549,50 @@ class SerializerTest < MiniTest::Unit::TestCase
549
549
  assert_match /\"planetType\":null/, json
550
550
  assert_match /\"moons\":\[\]/, json
551
551
  end
552
+
553
+ def test_serializer_include_with_empty_links_null_and_array
554
+ planets = []
555
+ Planet.find(7, 8).each do |planet|
556
+ planets.push PlanetResource.new(planet)
557
+ end
558
+
559
+ planet_hash = JSONAPI::ResourceSerializer.new.serialize_to_hash(
560
+ planets,
561
+ include: ['planet_type'],
562
+ fields: { planet_types: [:id, :name] }
563
+ )
564
+
565
+ assert_hash_equals(
566
+ {
567
+ planets: [{
568
+ id: 7,
569
+ name: 'Beta X',
570
+ description: 'Newly discovered Planet Z',
571
+ links: {
572
+ planetType: 1,
573
+ tags: [],
574
+ moons: []
575
+ }
576
+ },
577
+ {
578
+ id: 8,
579
+ name: 'Beta W',
580
+ description: 'Newly discovered Planet W',
581
+ links: {
582
+ planetType: nil,
583
+ tags: [],
584
+ moons: []
585
+ }
586
+ }],
587
+ linked: {
588
+ planetTypes: [
589
+ { id: 1, name: "Gas Giant" }
590
+ ]
591
+ }
592
+ }, planet_hash)
593
+
594
+ json = planet_hash.to_json
595
+ assert_match /\"planetType\":null/, json
596
+ assert_match /\"moons\":\[\]/, json
597
+ end
552
598
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Gebhardt
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-27 00:00:00.000000000 Z
12
+ date: 2014-11-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler