active_model_normalizr 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8aeaaebc6e366c729ec0ae087777a35849f7130b
4
+ data.tar.gz: 44c1ee6d82fb6014c4381938ca7f6998b08df399
5
+ SHA512:
6
+ metadata.gz: 70905f2d4164f0cd054900f85cace10c56e0a7753b276b16ce34abf722572122c46b72aa54b3dbd61c6e5b75815b89c9eb72243b91345bbd6d07dd582a4fcc60
7
+ data.tar.gz: 74c678ee9383e6fac6ca89a90469f2fed863bf69454d9386aa3d6f82295979d1dfb1ecd0caa8da18f3b6cc90832ca23d1c0f93985a363ed6cba556cbe50740c2
data/MIT-LICENSE ADDED
@@ -0,0 +1 @@
1
+ TODO
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ TODO
2
+ ====
@@ -0,0 +1,5 @@
1
+ require 'active_model_serializers'
2
+ require 'active_model_serializers/adapter/normalizr'
3
+
4
+ module ActiveModelNormalizr
5
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveModelNormalizr
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,73 @@
1
+ class ActiveModelSerializers::Adapter::Normalizr < ActiveModelSerializers::Adapter::Base
2
+ def serializable_hash(options = nil)
3
+ options = serialization_options(options)
4
+
5
+ {
6
+ 'result' => result,
7
+ 'entities' => entities(options)
8
+ }
9
+ end
10
+
11
+ private
12
+
13
+ def obj
14
+ serializer.object
15
+ end
16
+
17
+ def result
18
+ obj.respond_to?(:each) ? obj.map(&:id) : obj.id
19
+ end
20
+
21
+ def entities(options = nil)
22
+ h = {}
23
+
24
+ objects = obj.respond_to?(:each) ? obj : Array(obj)
25
+ serializers = serializer.respond_to?(:each) ? serializer : Array(serializer)
26
+
27
+ serializers.each do |ser|
28
+ key = ser.json_key.pluralize
29
+ h[key] ||= {}
30
+ h[key][ser.object.id] = ser.attributes.stringify_keys
31
+
32
+ ser.associations.each do |assoc|
33
+ h[assoc.name.to_s.pluralize] ||= {}
34
+
35
+ ser.object.send(assoc.name).each do |assoc_entity|
36
+ # TODO: use serializer here if possible
37
+ h[assoc.name.to_s.pluralize][assoc_entity.id] = assoc_entity.attributes
38
+ end
39
+ end
40
+ end
41
+
42
+ h
43
+ end
44
+
45
+ # def entity_array
46
+ # array = []
47
+ #
48
+ # if obj.respond_to? :to_a
49
+ # array += obj.to_a
50
+ # else
51
+ # array << obj
52
+ # end
53
+ #
54
+ # binding.pry
55
+ # serializer.associations.each do |association|
56
+ #
57
+ # end
58
+ #
59
+ # array
60
+ # end
61
+ #
62
+ # def entity_hash(model)
63
+ # { model.id => model.attributes }
64
+ # end
65
+
66
+ def object_key(object)
67
+ if object.is_a? ActiveRecord::Relation
68
+ object.model.model_name.plural
69
+ else
70
+ object.class.model_name.plural
71
+ end
72
+ end
73
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_model_normalizr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Crownoble
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: active_model_serializers
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.10.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.10.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
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'
83
+ description: Render your JSON in a Normalizr-like JSON format
84
+ email: adam@codenoble.com
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - MIT-LICENSE
90
+ - README.md
91
+ - lib/active_model_normalizr.rb
92
+ - lib/active_model_normalizr/version.rb
93
+ - lib/active_model_serializers/adapter/normalizr.rb
94
+ homepage: https://github.com/codenoble/active_model_normalizr
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.5.1
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: An ActiveModelSerializers adapter for Normalizr-like JSON
118
+ test_files: []
119
+ has_rdoc: