json_api_toolbox 0.5.3 → 0.6.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 +4 -4
- data/README.md +15 -0
- data/bitbucket-pipelines.yml +20 -0
- data/json_api_toolbox.gemspec +18 -16
- data/lib/json_api_toolbox/spec_support/shared_examples_for_controllers.rb +5 -2
- data/lib/json_api_toolbox/version.rb +3 -1
- data/lib/json_api_toolbox.rb +2 -0
- data/lib/postable.rb +24 -22
- data/lib/renderizable.rb +3 -13
- metadata +18 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e89034246f639df9db8ed22e59a9c36c6106d6e
|
4
|
+
data.tar.gz: 3b6aa85aeb7d1c5b637f2dc1f23591ec0524bfd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 419b604717ac0006a07d65054f74449930858dca63d7ee3b2826d8dc0506bc3a5df62a9d7779d37d0bbc009ba743fbab3260cbc9d796ae738efe223d190c91e4
|
7
|
+
data.tar.gz: be81ed014c3e6a760ef749637ccf4c88c6b81d557de0ac0ae4640867f3620e2446e31c9c5da8b5e68b38fa6435b544c8a5ddec802dd4df4659491f105b777d3a
|
data/README.md
CHANGED
@@ -36,6 +36,21 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/abacha
|
|
36
36
|
|
37
37
|
## Examples
|
38
38
|
|
39
|
+
#Renderizable
|
40
|
+
|
41
|
+
Render common
|
42
|
+
```ruby
|
43
|
+
render_object(Quota.all)
|
44
|
+
```
|
45
|
+
|
46
|
+
To render an object with a custom serializable, you will need to send a Hash
|
47
|
+
that contains a key called 'class' and its values must be another Hash. In this
|
48
|
+
new Hash, the key must be 'Hash' and the value must be your Serializable.
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
render_object(QuotaGap.all, class: { Hash: SerializableQuotaGap })
|
52
|
+
```
|
53
|
+
|
39
54
|
##ShareExamplesForControllers
|
40
55
|
|
41
56
|
it_behaves_like 'a http method'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
image: ruby:2.4.1
|
2
|
+
|
3
|
+
pipelines:
|
4
|
+
default:
|
5
|
+
- step:
|
6
|
+
script:
|
7
|
+
- git archive --remote=git@bitbucket.org:guideinvestimentos/rails_defaults.git HEAD .rubocop.yml | tar -x
|
8
|
+
- bundle install
|
9
|
+
- gem install rubocop
|
10
|
+
- rspec -fdoc
|
11
|
+
- rubocop .
|
12
|
+
|
13
|
+
branches:
|
14
|
+
master:
|
15
|
+
- step:
|
16
|
+
script:
|
17
|
+
- gem build json_api_toolbox.gemspec
|
18
|
+
- curl -u $RUBYGEMS_USERNAME:$RUBYGEMS_PASSWORD https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
|
19
|
+
- chmod 0600 ~/.gem/credentials
|
20
|
+
- gem push $(ls *.gem)
|
data/json_api_toolbox.gemspec
CHANGED
@@ -1,29 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# coding: utf-8
|
2
|
-
|
3
|
+
|
4
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
6
|
+
require 'json_api_toolbox/version'
|
5
7
|
|
6
8
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
9
|
+
spec.name = 'json_api_toolbox'
|
8
10
|
spec.version = JsonApiToolbox::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
+
spec.authors = ['Adriano Bacha']
|
12
|
+
spec.email = ['abacha@gmail.com']
|
11
13
|
|
12
|
-
spec.summary =
|
13
|
-
spec.homepage =
|
14
|
+
spec.summary = 'Json API usefull tools'
|
15
|
+
spec.homepage = 'http://bitbucket.org/guideinvestimentos/json_api_toolbox'
|
14
16
|
|
15
17
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
16
18
|
f.match(%r{^(test|spec|features)/})
|
17
19
|
end
|
18
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
19
21
|
|
20
|
-
spec.add_dependency
|
21
|
-
spec.add_dependency
|
22
|
-
spec.add_dependency
|
22
|
+
spec.add_dependency 'activesupport', '>= 4.0'
|
23
|
+
spec.add_dependency 'jsonapi-rails', '>= 0.3.1'
|
24
|
+
spec.add_dependency 'rspec', '~> 3.0'
|
23
25
|
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.15'
|
27
|
+
spec.add_development_dependency 'json'
|
28
|
+
spec.add_development_dependency 'pry'
|
29
|
+
spec.add_development_dependency 'pry-byebug'
|
30
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
31
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'rspec'
|
3
4
|
|
4
5
|
module JsonApiToolbox
|
@@ -30,7 +31,8 @@ module JsonApiToolbox
|
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
33
|
-
RSpec.
|
34
|
+
RSpec.
|
35
|
+
shared_examples 'a get with jsonapi with default value of' do |model|
|
34
36
|
let(:attributes) { data['attributes'].keys }
|
35
37
|
let(:model_keys) do
|
36
38
|
enums = []
|
@@ -51,7 +53,8 @@ module JsonApiToolbox
|
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
54
|
-
RSpec.
|
56
|
+
RSpec.
|
57
|
+
shared_examples 'a json api response with all relations of' do |model|
|
55
58
|
let(:attributes) { data['relationships'].keys }
|
56
59
|
let(:relation_keys) { model.reflections.keys }
|
57
60
|
|
data/lib/json_api_toolbox.rb
CHANGED
data/lib/postable.rb
CHANGED
@@ -2,33 +2,35 @@
|
|
2
2
|
|
3
3
|
module JsonApiToolbox
|
4
4
|
module Postable
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
class << self
|
6
|
+
def normalize_post(hash, model)
|
7
|
+
associations = model.reflect_on_all_associations.map(&:name)
|
8
|
+
normalized_hash = hash.map do |key, value|
|
9
|
+
child_model = association_class(model, key) if value.is_a? Hash
|
10
|
+
key = associations.include?(key.to_sym) ? "#{key}_attributes" : key
|
11
|
+
hash_value = check_child_association(value, key, model, child_model)
|
12
|
+
[key, hash_value]
|
13
|
+
end
|
14
|
+
Hash[normalized_hash]
|
12
15
|
end
|
13
|
-
Hash[normalized_hash]
|
14
|
-
end
|
15
16
|
|
16
|
-
|
17
|
+
private_class_method
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
def association_class(model, key)
|
20
|
+
association = model.reflect_on_all_associations.find do |association_i|
|
21
|
+
association_i.name.to_s == key.to_s
|
22
|
+
end
|
23
|
+
return false unless association
|
24
|
+
class_name = (association.options.symbolize_keys[:class_name] || key)
|
25
|
+
ActiveSupport::Inflector.singularize(class_name).camelize.constantize
|
21
26
|
end
|
22
|
-
return false unless association
|
23
|
-
class_name = (association.options.symbolize_keys[:class_name] || key)
|
24
|
-
ActiveSupport::Inflector.singularize(class_name).camelize.constantize
|
25
|
-
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
def check_child_association(value, key, model, child_model)
|
29
|
+
if value.is_a?(Hash) && !model.has_attribute?(key)
|
30
|
+
normalize_post(value, child_model)
|
31
|
+
else
|
32
|
+
value
|
33
|
+
end
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
data/lib/renderizable.rb
CHANGED
@@ -2,21 +2,11 @@
|
|
2
2
|
|
3
3
|
module JsonApiToolbox
|
4
4
|
module Renderizable
|
5
|
-
def
|
6
|
-
errors = object_errors.details.map do |field, error_details|
|
7
|
-
error_details.each_with_index.map do |item, error_i|
|
8
|
-
build_line(item[:error], field, object_errors.messages[field][error_i])
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
render json: { errors: errors }, status: 422
|
13
|
-
end
|
14
|
-
|
15
|
-
def render_object(object)
|
5
|
+
def render_object(object, options = {})
|
16
6
|
if object.respond_to?(:errors) && object.errors.any?
|
17
|
-
|
7
|
+
render({ jsonapi_errors: object.errors }.merge(options))
|
18
8
|
else
|
19
|
-
render jsonapi: object, include: includes_params
|
9
|
+
render({ jsonapi: object, include: includes_params }.merge(options))
|
20
10
|
end
|
21
11
|
end
|
22
12
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_api_toolbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adriano Bacha
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.3.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.3.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,21 +67,21 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.15'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: json
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: pry
|
84
|
+
name: pry
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: pry-byebug
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,19 +109,19 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
117
|
+
version: '10.0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
124
|
+
version: '10.0'
|
125
125
|
description:
|
126
126
|
email:
|
127
127
|
- abacha@gmail.com
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- Gemfile
|
137
137
|
- README.md
|
138
138
|
- Rakefile
|
139
|
+
- bitbucket-pipelines.yml
|
139
140
|
- json_api_toolbox.gemspec
|
140
141
|
- lib/enums.rb
|
141
142
|
- lib/json_api_toolbox.rb
|
@@ -162,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
163
|
version: '0'
|
163
164
|
requirements: []
|
164
165
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.6.
|
166
|
+
rubygems_version: 2.6.13
|
166
167
|
signing_key:
|
167
168
|
specification_version: 4
|
168
169
|
summary: Json API usefull tools
|