onsi 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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: {}