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 +4 -4
- data/lib/onsi/error_responder.rb +1 -0
- data/lib/onsi/includes.rb +2 -0
- data/lib/onsi/params.rb +30 -4
- data/lib/onsi/resource.rb +3 -0
- data/lib/onsi/version.rb +1 -1
- data/onsi.gemspec +3 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96d2e299515f7829ffc2f93f76dfc26cbe8a25de
|
4
|
+
data.tar.gz: 67855153d40ba6e49e46d0d2e87af9f9ef587987
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62ee8543afa30b562aad29d3ed678ab47f930b03761f3cd01c7f6e76cb68aba37f8317df61dfaae4004125aac164813dcf02e74a90788e67ce01780e952d3407
|
7
|
+
data.tar.gz: a8a4a5be644d66942fc3fb362e9692fec191c1fca43e1b1202d1678326e66da44e2d3616bcf0e4c8d582aac65788e37cc45b626b9017ebb4ff7ecba788fb5396
|
data/lib/onsi/error_responder.rb
CHANGED
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
|
-
|
62
|
-
|
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["#{
|
72
|
+
obj["#{true_name.to_s.singularize}_ids".to_sym] = ids
|
67
73
|
else
|
68
74
|
_type, id = parse_relationship(resource)
|
69
|
-
obj["#{
|
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
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 = ['
|
9
|
-
spec.email = ['me@
|
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/
|
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.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
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@
|
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/
|
173
|
+
homepage: https://github.com/maddiesch/onsi
|
174
174
|
licenses:
|
175
175
|
- MIT
|
176
176
|
metadata: {}
|