json_api_toolbox 0.3.2 → 0.4.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: 5fafe0b6239d337d64bd02d187829005b0e092da
4
- data.tar.gz: 3bb206ad1496788c7cc3b8a48d031aa3786420b0
3
+ metadata.gz: 2121491b78188c63d80c9d89fc39ad0198aaaede
4
+ data.tar.gz: 4f8d1c1deb6cc68e490bc69f2886c95430a5f8ec
5
5
  SHA512:
6
- metadata.gz: f10261d6463c7eb6a6a905535898c5d17d190c2f31b32dbce6398d4a62e124ac0513330bd333e7b2277d2245ac3fddd20e59358139c893d12810c212b289ce39
7
- data.tar.gz: c2214b5e2205465eff5ca816acac794ddd963ac9715114a82bf18732b718aae2834d568202438916fed49fdb00f5ad076a033e680e43a430d37f23779d6c17e1
6
+ metadata.gz: 94e0a7fdbf2eb3913d23521b08d30d7c9ca1019924bf9c4b04164372ad198483749830bad5004a112ea1d2ce11e7c6783bb8d8c9b267c5847675d31add6ba53a
7
+ data.tar.gz: c02b2a1df450aa008e0212400954ae3a93046d5b9c3a7b9b6f407cdedcb8575dcc0c70b1189f11224e509b27b0ecb13ac4c122259073ca7e44358de32f2f66aa
data/lib/enums.rb ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsonApiToolbox
4
+ module Enums
5
+ def self.build_enum(model, enum_attribute)
6
+ enum_values = model.send(enum_attribute)
7
+ enum_values.map do |attribute|
8
+ {
9
+ id: attribute[1],
10
+ description: attribute[0],
11
+ type: enum_attribute
12
+ }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -27,15 +27,17 @@ module JsonApiToolbox
27
27
  RSpec.shared_examples 'a get with jsonapi with default value of' do |model|
28
28
  let(:attributes) { data['attributes'].keys }
29
29
  let(:model_keys) do
30
+ enums = []
30
31
  model.new.attributes.keys.map do |attr|
31
32
  if attr.match?(/_cd$/)
33
+ enums << attr
32
34
  attr.gsub(/_cd/, '')
33
35
  elsif attr.match?(/_id$|^id$/)
34
36
  nil
35
37
  else
36
38
  attr
37
39
  end
38
- end.compact
40
+ end.compact + enums
39
41
  end
40
42
 
41
43
  it 'returns response with default values' do
@@ -1,3 +1,3 @@
1
1
  module JsonApiToolbox
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -1,37 +1,7 @@
1
1
  require 'active_support/inflector'
2
2
  require_relative 'json_api_toolbox/spec_support/shared_examples_for_controllers'
3
3
  require 'renderizable'
4
+ require 'enums'
5
+ require 'postable'
4
6
 
5
- module JsonApiToolbox
6
- def self.build_enum(model, enum_attribute)
7
- enum_values = model.send(enum_attribute)
8
- enum_values.map do |attribute|
9
- {
10
- id: attribute[1],
11
- description: attribute[0],
12
- type: enum_attribute
13
- }
14
- end
15
- end
16
-
17
- def self.normalize_post(hash, model)
18
- associations = model.reflect_on_all_associations.map(&:name)
19
- normalized_hash = hash.map do |key, value|
20
- child_model = self.association_class(model, key) if value.is_a? Hash
21
- key = associations.include?(key.to_sym) ? "#{key}_attributes" : key
22
- [key, value.is_a?(Hash) ? self.normalize_post(value, child_model) : value]
23
- end
24
- Hash[normalized_hash]
25
- end
26
-
27
- private
28
-
29
- def self.association_class(model, key)
30
- association = model.reflect_on_all_associations.find do |association|
31
- association.name.to_s == key.to_s
32
- end
33
- return false unless association
34
- class_name = (association.options.symbolize_keys[:class_name] || key)
35
- ActiveSupport::Inflector.singularize(class_name).camelize.constantize
36
- end
37
- end
7
+ module JsonApiToolbox; end
data/lib/postable.rb ADDED
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsonApiToolbox
4
+ module Postable
5
+ def self.normalize_post(hash, model)
6
+ associations = model.reflect_on_all_associations.map(&:name)
7
+ normalized_hash = hash.map do |key, value|
8
+ child_model = self.association_class(model, key) if value.is_a? Hash
9
+ key = associations.include?(key.to_sym) ? "#{key}_attributes" : key
10
+ [key, value.is_a?(Hash) ? self.normalize_post(value, child_model) : value]
11
+ end
12
+ Hash[normalized_hash]
13
+ end
14
+
15
+ private
16
+
17
+ def self.association_class(model, key)
18
+ association = model.reflect_on_all_associations.find do |association|
19
+ association.name.to_s == key.to_s
20
+ end
21
+ return false unless association
22
+ class_name = (association.options.symbolize_keys[:class_name] || key)
23
+ ActiveSupport::Inflector.singularize(class_name).camelize.constantize
24
+ end
25
+ end
26
+ end
data/lib/renderizable.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require 'pry'
3
2
 
4
3
  module JsonApiToolbox
5
4
  module Renderizable
@@ -28,7 +27,7 @@ module JsonApiToolbox
28
27
  def permitted_params
29
28
  model = controller_name.singularize
30
29
  parsed_params = params.require(model).permit(permitted_attributes).to_h
31
- JsonApiToolbox.normalize_post(parsed_params, model_name)
30
+ JsonApiToolbox::Postable.normalize_post(parsed_params, model_name)
32
31
  end
33
32
 
34
33
  def default_includes_params
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.3.2
4
+ version: 0.4.0
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-08-10 00:00:00.000000000 Z
11
+ date: 2017-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -137,9 +137,11 @@ files:
137
137
  - README.md
138
138
  - Rakefile
139
139
  - json_api_toolbox.gemspec
140
+ - lib/enums.rb
140
141
  - lib/json_api_toolbox.rb
141
142
  - lib/json_api_toolbox/spec_support/shared_examples_for_controllers.rb
142
143
  - lib/json_api_toolbox/version.rb
144
+ - lib/postable.rb
143
145
  - lib/renderizable.rb
144
146
  homepage: http://bitbucket.org/guideinvestimentos/json_api_toolbox
145
147
  licenses: []