jsonapi-renderer 0.2.0 → 0.2.1

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
- SHA1:
3
- metadata.gz: ccb0dad8d132bc0c9faa63ed697f2b081b8d734e
4
- data.tar.gz: 55d657476428b0d6c484963fb01ea24f628d826e
2
+ SHA256:
3
+ metadata.gz: ebb3c77141d2eab3df3c86e6801b1566d940a7355a8018fa6682f06dfa184a94
4
+ data.tar.gz: bc4eea2b4d56daccd7d27feefb354e674a709443a4f504793430821c7bbdbb72
5
5
  SHA512:
6
- metadata.gz: a8a4a13a02cd3214d4fe6605af7d6d96cc5218d2a566f541a702477030d94c9d5b402e177b6cbce40ed420e705bffb317c1c4f05d3a7cac9622972a667b57c03
7
- data.tar.gz: d8666ed16a3e328e6eed21ac79585e72319fca38a149d06f1ce17bee706259aa227bc875dcf7c7463aee678434aac6884f5d87fe1869e0cc75932bd75a658467
6
+ metadata.gz: 0603897244768c28ad4b1545718f8d46f53e2aeeab4698ec192af4a239b7c56adbe28a000ae81d5210b8b2f69958473bd956ede4142f29c0ede91f3da49ad2b3
7
+ data.tar.gz: e140f8d78ee9015f099599a69a1e965734d77431c717e9262eedf73b31d1d9339dfa57d89b1ca1e462d8ea318de347a554d0bf22c077ae3c746f87242a7995aa
data/README.md CHANGED
@@ -120,7 +120,7 @@ supporting the `fetch_multi` method.
120
120
  When using caching, the serializable resources must implement an
121
121
  additional `jsonapi_cache_key` method:
122
122
  ```ruby
123
- # Returns a cache key for the resource, parametered by the `include` and
123
+ # Returns a cache key for the resource, parameterized by the `include` and
124
124
  # `fields` options.
125
125
  # @param options [Hash]
126
126
  # @option fields [Set<Symbol>, Nil] The requested fields, or nil.
@@ -16,6 +16,8 @@ module JSONAPI
16
16
  def initialize(include_args, options = {})
17
17
  include_hash = Parser.parse_include_args(include_args)
18
18
  @hash = include_hash.each_with_object({}) do |(key, value), hash|
19
+ raise InvalidKey, key unless valid?(key)
20
+
19
21
  hash[key] = self.class.new(value, options)
20
22
  end
21
23
  @options = options
@@ -68,5 +70,18 @@ module JSONAPI
68
70
 
69
71
  string_array.join(',')
70
72
  end
73
+
74
+ class InvalidKey < StandardError; end
75
+
76
+ private
77
+
78
+ def valid?(key)
79
+ key.match(valid_json_key_name_regex)
80
+ end
81
+
82
+ def valid_json_key_name_regex
83
+ # https://jsonapi.org/format/#document-member-names
84
+ /^(?![\s\-_])[\u0080-\u10FFFFA-Za-z0-9*]+(?<![\s\-_])$/
85
+ end
71
86
  end
72
87
  end
@@ -15,9 +15,14 @@ module JSONAPI
15
15
  end
16
16
 
17
17
  def process_resources
18
+ # NOTE(beauby): This is necessary for cache keys consistency.
19
+ @include_rels = @include_rels.each_with_object({}) do |(k, v), h|
20
+ h[k] = v.to_a.sort!
21
+ end
22
+
18
23
  [@primary, @included].each do |resources|
19
24
  cache_hash = cache_key_map(resources)
20
- processed_resources = @cache.fetch_multi(cache_hash.keys) do |key|
25
+ processed_resources = @cache.fetch_multi(*cache_hash.keys) do |key|
21
26
  res, include, fields = cache_hash[key]
22
27
  json = res.as_jsonapi(include: include, fields: fields).to_json
23
28
 
@@ -11,7 +11,7 @@ module JSONAPI
11
11
  @errors = params.fetch(:errors, [])
12
12
  @meta = params[:meta]
13
13
  @links = params[:links] || {}
14
- @fields = _symbolize_fields(params[:fields] || {})
14
+ @fields = _canonize_fields(params[:fields] || {})
15
15
  @jsonapi = params[:jsonapi]
16
16
  @include = JSONAPI::IncludeDirective.new(params[:include] || {})
17
17
  @relationship = params[:relationship]
@@ -91,9 +91,9 @@ module JSONAPI
91
91
  end
92
92
  end
93
93
 
94
- def _symbolize_fields(fields)
94
+ def _canonize_fields(fields)
95
95
  fields.each_with_object({}) do |(k, v), h|
96
- h[k.to_sym] = v.map(&:to_sym)
96
+ h[k.to_sym] = v.map(&:to_sym).sort!
97
97
  end
98
98
  end
99
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-renderer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Hosseini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-11 00:00:00.000000000 Z
11
+ date: 2019-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -86,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
86
  version: '0'
87
87
  requirements: []
88
88
  rubyforge_project:
89
- rubygems_version: 2.6.13
89
+ rubygems_version: 2.7.8
90
90
  signing_key:
91
91
  specification_version: 4
92
92
  summary: Render JSONAPI documents.