json_api_test_helpers 1.0.1 → 1.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
2
  SHA256:
3
- metadata.gz: c70ab02800ebe7be08cef8201ac03e03bd8422abf8ce965d016afd084621ec5f
4
- data.tar.gz: 836fd219786c8b7fe4c5b778c7f582e3e641b61730cb467b23bcd8d516ca3921
3
+ metadata.gz: 453f2d1cabd8d90513c4249388b3d2280d05bd8648d669d3f330685c7825bead
4
+ data.tar.gz: 6bb89648163de76a82e4e0ea496c4ef71df7a595aec82239aca744172fb0f763
5
5
  SHA512:
6
- metadata.gz: c2c5577d47c9db9e0058ad95a385891f3603253b4331bbf15cdd253d365b5537bf9b66480279255395185d43c7ce13f7534c3fc432f4d7ad8d5cebbca8fa9951
7
- data.tar.gz: 9367aa3f8a13efdb25ad91038fc116899a2c6a3c793dc2ec5bcc12d004cb16aa37da4c76af39871ab8db399c60ad0402ce3aca4ee8374252a011a2d118d0f82a
6
+ metadata.gz: b46bad2d8208984f79ebe977563097ccf68121b646d9a4783427e86933566f8714dd840a50e4f7864705b684f2c48699c3ea0109d5642062494713222872c9d1
7
+ data.tar.gz: 142399cd11e7dae1ab9ed9364a5a6609f7d8e68658455f037b5e032fd17ef7a5bffebd283a7bb163a85928e8ab9a5f5fdc7cfa32fc4121da7cdb4489f1ead778
@@ -0,0 +1,7 @@
1
+ module JsonApiTestHelpers
2
+ module Params
3
+ def json_api_params(attributes)
4
+ { data: { attributes: attributes } }
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,100 @@
1
+ module JsonApiTestHelpers
2
+ module Response
3
+ def json_response
4
+ if response.body.present?
5
+ parsed_json = JSON.parse response.body
6
+ parsed_json.with_indifferent_access unless parsed_json.is_a? Array
7
+ else
8
+ raise 'Response body is empty'
9
+ end
10
+ end
11
+
12
+ def json_api_record(record, attributes, relationships: nil, additional: nil)
13
+ json = {
14
+ 'data' => {
15
+ 'id' => record.id.to_s,
16
+ 'attributes' => json_api_record_attributes(record, attributes)
17
+ }
18
+ }
19
+ json['data']['relationships'] = json_api_relationships(record, relationships) if relationships
20
+ json
21
+ end
22
+
23
+ def json_api_collection(collection, attributes = nil, relationships: nil)
24
+ {
25
+ 'data' => collection.map do |record|
26
+ hash = {
27
+ 'id' => record.id.to_s
28
+ }
29
+ hash['attributes'] = json_api_record_attributes(record, attributes) if attributes
30
+ hash['relationships'] = json_api_relationships(record, relationships) if relationships
31
+ hash
32
+ end
33
+ }
34
+ end
35
+
36
+ def fix_value_for_json(value)
37
+ return value.iso8601 if value.class.in? [DateTime, ActiveSupport::TimeWithZone]
38
+ return value if value.is_a? Integer
39
+ return value.serializable_hash if value.is_a? CarrierWave::Uploader::Serialization
40
+ return value.reduce({}) do |hash, k_v|
41
+ if k_v[1].is_a? Hash
42
+ k_v[1] = k_v[1].reduce({}) do |value_hash, value_k_v|
43
+ value_hash.merge! value_k_v[0].gsub('_', '-') => value_k_v[1]
44
+ end
45
+ end
46
+ hash.merge! k_v[0].gsub('_', '-') => k_v[1]
47
+ end if value.is_a? Hash
48
+ value.to_s
49
+ end
50
+
51
+ def fix_comparing_types(value)
52
+ if value.class.in? [DateTime, ActiveSupport::TimeWithZone]
53
+ value.to_datetime.utc.to_s
54
+ elsif value.class == ActiveRecord::Point
55
+ "#{value.x}, #{value.y}"
56
+ else
57
+ value
58
+ end
59
+ end
60
+
61
+ def attributes_for_nested(attributes, **associations)
62
+ associations.reduce(attributes) do |attr_hash, collection|
63
+ attr_hash.merge! "#{collection[0]}_attributes" => (collection[1].each_with_index.reduce({}) do |hash, item|
64
+ hash.merge! item.last.to_s => item.first
65
+ end)
66
+ end
67
+ end
68
+
69
+ private
70
+
71
+ def json_api_record_attributes(record, attributes)
72
+ attributes.reduce({}) do |hash, attr|
73
+ hash.merge! attr[0].to_s.tr('_', '-') => fix_value_for_json(record.send(attr[0]))
74
+ end
75
+ end
76
+
77
+ def json_api_relationships(record, relationships)
78
+ relationships.reduce({}) do |hash, relationship|
79
+ object = record.send relationship
80
+ data = if object.is_a?(ActiveRecord::Associations::CollectionProxy)
81
+ object.reduce([]) { |result, item| result << data_relationship_object(item, relationship) }
82
+ else
83
+ object.present? ? data_relationship_object(object, relationship) : {}
84
+ end
85
+ hash.merge! json_api_model_name(relationship) => { 'data' => data }
86
+ end
87
+ end
88
+
89
+ def json_api_model_name(model_name)
90
+ model_name.to_s.tr '_', '-'
91
+ end
92
+
93
+ def data_relationship_object(object, relationship)
94
+ {
95
+ 'id' => object.id.to_s,
96
+ 'type' => json_api_model_name(relationship).pluralize
97
+ }
98
+ end
99
+ end
100
+ end
@@ -1,3 +1,3 @@
1
1
  module JsonApiTestHelpers
2
- VERSION = '1.0.1'
2
+ VERSION = '1.1'
3
3
  end
@@ -1,100 +1,8 @@
1
1
  require 'json_api_test_helpers/version'
2
+ require 'json_api_test_helpers/params'
3
+ require 'json_api_test_helpers/response'
2
4
 
3
5
  module JsonApiTestHelpers
4
- def json_response
5
- if response.body.present?
6
- parsed_json = JSON.parse response.body
7
- parsed_json.with_indifferent_access unless parsed_json.is_a? Array
8
- else
9
- raise 'Response body is empty'
10
- end
11
- end
12
-
13
- def json_api_record(record, attributes, relationships: nil, additional: nil)
14
- json = {
15
- 'data' => {
16
- 'id' => record.id.to_s,
17
- 'attributes' => json_api_record_attributes(record, attributes)
18
- }
19
- }
20
- json['data']['relationships'] = json_api_relationships(record, relationships) if relationships
21
- json
22
- end
23
-
24
- def json_api_collection(collection, attributes = nil, relationships: nil)
25
- {
26
- 'data' => collection.map do |record|
27
- hash = {
28
- 'id' => record.id.to_s
29
- }
30
- hash['attributes'] = json_api_record_attributes(record, attributes) if attributes
31
- hash['relationships'] = json_api_relationships(record, relationships) if relationships
32
- hash
33
- end
34
- }
35
- end
36
-
37
- def fix_value_for_json(value)
38
- return value.iso8601 if value.class.in? [DateTime, ActiveSupport::TimeWithZone]
39
- return value if value.is_a? Integer
40
- return value.serializable_hash if value.is_a? CarrierWave::Uploader::Serialization
41
- return value.reduce({}) do |hash, k_v|
42
- if k_v[1].is_a? Hash
43
- k_v[1] = k_v[1].reduce({}) do |value_hash, value_k_v|
44
- value_hash.merge! value_k_v[0].gsub('_', '-') => value_k_v[1]
45
- end
46
- end
47
- hash.merge! k_v[0].gsub('_', '-') => k_v[1]
48
- end if value.is_a? Hash
49
- value.to_s
50
- end
51
-
52
- def fix_comparing_types(value)
53
- if value.class.in? [DateTime, ActiveSupport::TimeWithZone]
54
- value.to_datetime.utc.to_s
55
- elsif value.class == ActiveRecord::Point
56
- "#{value.x}, #{value.y}"
57
- else
58
- value
59
- end
60
- end
61
-
62
- def attributes_for_nested(attributes, **associations)
63
- associations.reduce(attributes) do |attr_hash, collection|
64
- attr_hash.merge! "#{collection[0]}_attributes" => (collection[1].each_with_index.reduce({}) do |hash, item|
65
- hash.merge! item.last.to_s => item.first
66
- end)
67
- end
68
- end
69
-
70
- private
71
-
72
- def json_api_record_attributes(record, attributes)
73
- attributes.reduce({}) do |hash, attr|
74
- hash.merge! attr[0].to_s.tr('_', '-') => fix_value_for_json(record.send(attr[0]))
75
- end
76
- end
77
-
78
- def json_api_relationships(record, relationships)
79
- relationships.reduce({}) do |hash, relationship|
80
- object = record.send relationship
81
- data = if object.is_a?(ActiveRecord::Associations::CollectionProxy)
82
- object.reduce([]) { |result, item| result << data_relationship_object(item, relationship) }
83
- else
84
- object.present? ? data_relationship_object(object, relationship) : {}
85
- end
86
- hash.merge! json_api_model_name(relationship) => { 'data' => data }
87
- end
88
- end
89
-
90
- def json_api_model_name(model_name)
91
- model_name.to_s.tr '_', '-'
92
- end
93
-
94
- def data_relationship_object(object, relationship)
95
- {
96
- 'id' => object.id.to_s,
97
- 'type' => json_api_model_name(relationship).pluralize
98
- }
99
- end
6
+ include Params
7
+ include Response
100
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_api_test_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: '1.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kalashnikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-22 00:00:00.000000000 Z
11
+ date: 2019-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,6 +71,8 @@ files:
71
71
  - bin/setup
72
72
  - json_api_test_helpers.gemspec
73
73
  - lib/json_api_test_helpers.rb
74
+ - lib/json_api_test_helpers/params.rb
75
+ - lib/json_api_test_helpers/response.rb
74
76
  - lib/json_api_test_helpers/version.rb
75
77
  homepage: https://github.com/kalashnikovisme/json_api_test_helpers
76
78
  licenses:
@@ -92,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
94
  version: '0'
93
95
  requirements: []
94
96
  rubyforge_project:
95
- rubygems_version: 2.7.7
97
+ rubygems_version: 2.7.6
96
98
  signing_key:
97
99
  specification_version: 4
98
100
  summary: JSON API helpers for testing