json_api_toolbox 0.1.0 → 0.2.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: 5a3f7062e2f8bbe4a7add654f0919b2aa7b4fa50
4
- data.tar.gz: 3621cb7cfa352415c22659062e1eb74d55d01bb3
3
+ metadata.gz: d7b62d7d56b4b556bfe364354f26ee11265e758e
4
+ data.tar.gz: fd81a963afed0fd32034df88766dbc891d6e50e1
5
5
  SHA512:
6
- metadata.gz: 501a7757a0c5214ecd7b2903a96cc2cfff955fff34c7dbe1fb21ecb986be60a076ccd3cbf90d7b55205028d00488f1eacc315324d6915ff1a086ab95421cec14
7
- data.tar.gz: 545a2c875bf045bb57992ff60fdbd99dfaf225e2a6c15fb917396a6a3ea3c940829ecfb5ff4ea5e7a07f80dc3ae39d41484d11cb110eb3e79d4a5aac3662b13c
6
+ metadata.gz: 5b449e51f50142b8b45d95cc17685a044cb99a82b1c619003a6aaab855ab8396badd5aa9fc40dc24a5e0ef51d65b2db6780e9f6c02d95c1a29cb23da3330536a
7
+ data.tar.gz: 5ab43e8eb47ec7355c6f5ab42babc4124fa779024b1063d59d76a6ec9d0f206a1e795d0b2a92296f14083fed8614a3543d3a46f985bcade11b0275938f2f22c9
@@ -17,7 +17,10 @@ Gem::Specification.new do |spec|
17
17
  end
18
18
  spec.require_paths = ["lib"]
19
19
 
20
+ spec.add_dependency "activesupport", ">= 4.0"
21
+
20
22
  spec.add_development_dependency "bundler", "~> 1.15"
21
23
  spec.add_development_dependency "rake", "~> 10.0"
22
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
+ spec.add_development_dependency "pry-byebug"
23
26
  end
@@ -1,3 +1,5 @@
1
+ require 'active_support/inflector'
2
+
1
3
  module JsonApiToolbox
2
4
  def self.build_enum(model, enum_attribute)
3
5
  enum_values = model.send(enum_attribute)
@@ -13,9 +15,21 @@ module JsonApiToolbox
13
15
  def self.normalize_post(hash, model)
14
16
  associations = model.reflect_on_all_associations.map(&:name)
15
17
  normalized_hash = hash.map do |key, value|
18
+ child_model = self.association_class(model, key) if value.is_a? Hash
16
19
  key = associations.include?(key.to_sym) ? "#{key}_attributes" : key
17
- [key, value]
20
+ [key, value.is_a?(Hash) ? self.normalize_post(value, child_model) : value]
18
21
  end
19
22
  Hash[normalized_hash]
20
23
  end
24
+
25
+ private
26
+
27
+ def self.association_class(model, key)
28
+ association = model.reflect_on_all_associations.find do |association|
29
+ association.name.to_s == key.to_s
30
+ end
31
+ return false unless association
32
+ class_name = (association.options.symbolize_keys[:class_name] || key)
33
+ ActiveSupport::Inflector.singularize(class_name).camelize.constantize
34
+ end
21
35
  end
@@ -1,3 +1,3 @@
1
1
  module JsonApiToolbox
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_api_toolbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.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-07-18 00:00:00.000000000 Z
11
+ date: 2017-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description:
56
84
  email:
57
85
  - abacha@gmail.com