onsi 0.7.0 → 0.8.0

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: 0a645bf3aac3bee2b7986c263384f9df5a00f2d3
4
- data.tar.gz: b353e411803bf55bc4c7900d55a38c8e24e75b32
3
+ metadata.gz: 96d2e299515f7829ffc2f93f76dfc26cbe8a25de
4
+ data.tar.gz: 67855153d40ba6e49e46d0d2e87af9f9ef587987
5
5
  SHA512:
6
- metadata.gz: 70e86b97c6c267302221286efd56404d3d15c92ca0d700e6a84989e368892cf4510a5069f99e3e8171af9bdce3684a42548b88ac02de16b591fa64e3721dcf80
7
- data.tar.gz: 0b1a846fe3ba195801669250768a9a5a2b935c1b3ce3ebb585139b424f39308e69a462eefd379a4ba653d6cc0817dc44f724a182283755585d1e04844ead1ec6
6
+ metadata.gz: 62ee8543afa30b562aad29d3ed678ab47f930b03761f3cd01c7f6e76cb68aba37f8317df61dfaae4004125aac164813dcf02e74a90788e67ce01780e952d3407
7
+ data.tar.gz: a8a4a5be644d66942fc3fb362e9692fec191c1fca43e1b1202d1678326e66da44e2d3616bcf0e4c8d582aac65788e37cc45b626b9017ebb4ff7ecba788fb5396
@@ -91,6 +91,7 @@ module Onsi
91
91
 
92
92
  def error_metadata(error)
93
93
  return nil unless Rails.configuration.consider_all_requests_local
94
+
94
95
  {
95
96
  exception: {
96
97
  '_note' => '`exception` will be removed if Rails.configuration.consider_all_requests_local is false',
data/lib/onsi/includes.rb CHANGED
@@ -19,6 +19,7 @@ module Onsi
19
19
  included.each do |name|
20
20
  fetcher = fetch_methods[name]
21
21
  next if fetcher.nil?
22
+
22
23
  results = fetcher.call
23
24
  root[name] = results
24
25
  end
@@ -35,6 +36,7 @@ module Onsi
35
36
  if block.nil?
36
37
  raise ArgumentError, "Must specify a block for fetch_#{name}"
37
38
  end
39
+
38
40
  fetch_methods[name.to_sym] = block
39
41
  end
40
42
 
data/lib/onsi/params.rb CHANGED
@@ -50,28 +50,52 @@ module Onsi
50
50
 
51
51
  def permit_attributes(data, attributes)
52
52
  return {} if Array(attributes).empty?
53
+
53
54
  data.require(:attributes).permit(*attributes)
54
55
  end
55
56
 
56
57
  def permit_relationships(data, relationships)
57
58
  return {} if Array(relationships).empty?
59
+
58
60
  rels = data.require(:relationships)
59
61
  {}.tap do |obj|
60
62
  relationships.each do |name|
61
- next if rels[name].nil?
62
- resource = rels.require(name).require(:data)
63
+ optional, true_name = parse_relationship_name(name)
64
+ next unless rels.key?(true_name)
65
+
66
+ resource = fetch_relationship(rels, optional, true_name)
63
67
  case resource
68
+ when nil
69
+ obj["#{true_name}_id".to_sym] = nil
64
70
  when Array
65
71
  ids = resource.map { |r| parse_relationship(r).last }
66
- obj["#{name.to_s.singularize}_ids".to_sym] = ids
72
+ obj["#{true_name.to_s.singularize}_ids".to_sym] = ids
67
73
  else
68
74
  _type, id = parse_relationship(resource)
69
- obj["#{name}_id".to_sym] = id
75
+ obj["#{true_name}_id".to_sym] = id
70
76
  end
71
77
  end
72
78
  end
73
79
  end
74
80
 
81
+ def fetch_relationship(rels, optional, name)
82
+ if optional
83
+ payload = rels.require(name).permit!.to_h
84
+ if payload[:data].is_a?(Array)
85
+ return []
86
+ end
87
+
88
+ nil
89
+ else
90
+ rels.require(name).require(:data)
91
+ end
92
+ end
93
+
94
+ def parse_relationship_name(name)
95
+ name = name.to_s
96
+ [name.start_with?('?'), name.gsub(/\A\?/, '')]
97
+ end
98
+
75
99
  def parse_relationship(data)
76
100
  [
77
101
  data.require(:type),
@@ -108,6 +132,7 @@ module Onsi
108
132
  if value.nil?
109
133
  raise MissingReqiredAttribute.new("Missing attribute #{key}", key)
110
134
  end
135
+
111
136
  value
112
137
  end
113
138
 
@@ -180,6 +205,7 @@ module Onsi
180
205
  raw_attrs = attributes.to_h.symbolize_keys
181
206
  defaults.each_with_object({}) do |(key, value), object|
182
207
  next if raw_attrs.key?(key)
208
+
183
209
  if value.respond_to?(:call)
184
210
  object[key] = value.call
185
211
  else
data/lib/onsi/resource.rb CHANGED
@@ -86,18 +86,21 @@ module Onsi
86
86
  def append_relationships(root)
87
87
  relationships = generate_relationships
88
88
  return unless relationships.any?
89
+
89
90
  root[RELATIONSHIPS_KEY] = relationships
90
91
  end
91
92
 
92
93
  def append_meta(root)
93
94
  meta = generate_metadata
94
95
  return unless meta.any?
96
+
95
97
  root[META_KEY] = meta
96
98
  end
97
99
 
98
100
  def append_includes(root)
99
101
  includes = generate_includes
100
102
  return unless includes.any?
103
+
101
104
  root[RELATIONSHIPS_KEY] ||= {}
102
105
  root[RELATIONSHIPS_KEY].merge!(includes)
103
106
  end
data/lib/onsi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Onsi
2
- VERSION = '0.7.0'.freeze
2
+ VERSION = '0.8.0'.freeze
3
3
  end
data/onsi.gemspec CHANGED
@@ -5,12 +5,12 @@ require 'onsi/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'onsi'
7
7
  spec.version = Onsi::VERSION
8
- spec.authors = ['Skylar Schipper']
9
- spec.email = ['me@skylarsch.com']
8
+ spec.authors = ['Maddie Schipper']
9
+ spec.email = ['me@maddiesch.com']
10
10
 
11
11
  spec.summary = 'Format JSON API Responses'
12
12
  spec.description = 'Format JSON API responses and parse inbound requests.'
13
- spec.homepage = 'https://github.com/skylarsch/onsi'
13
+ spec.homepage = 'https://github.com/maddiesch/onsi'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onsi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
- - Skylar Schipper
7
+ - Maddie Schipper
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
@@ -144,7 +144,7 @@ dependencies:
144
144
  version: 1.3.10
145
145
  description: Format JSON API responses and parse inbound requests.
146
146
  email:
147
- - me@skylarsch.com
147
+ - me@maddiesch.com
148
148
  executables: []
149
149
  extensions: []
150
150
  extra_rdoc_files: []
@@ -170,7 +170,7 @@ files:
170
170
  - lib/onsi/resource.rb
171
171
  - lib/onsi/version.rb
172
172
  - onsi.gemspec
173
- homepage: https://github.com/skylarsch/onsi
173
+ homepage: https://github.com/maddiesch/onsi
174
174
  licenses:
175
175
  - MIT
176
176
  metadata: {}