postgres_ext-serializers 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/Gemfile +1 -0
- data/README.md +2 -2
- data/lib/postgres_ext/serializers/active_model/array_serializer.rb +15 -4
- data/lib/postgres_ext/serializers/version.rb +1 -1
- data/postgres_ext-serializers.gemspec +1 -1
- data/test/serializer_test.rb +18 -1
- data/test/test_helper.rb +10 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c65ff204b1d7c5941a9679535713be9f99b0c61
|
4
|
+
data.tar.gz: e38459d4a7b894d293ff5ed16b512576bc85b66c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3dd09d901a3c1d8108dd66ab79f173af229f6c29ffdb0d37d239074e0ca4984b1d57e4177feb2f0df0f6c0083b5d87dcae9a76fe981f1d6e71b78942058d2dc
|
7
|
+
data.tar.gz: ba691771d191a19c8766a573f4473e906cab143c32153ba59a3be6b7c0fb31855619127235bfa28124f15c72f6f39e6c0c1becd13a5fcf6dd1f469cd746c8215
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.0.3 - 2014-09-01
|
4
|
+
|
5
|
+
### Added
|
6
|
+
- Nothing.
|
7
|
+
|
8
|
+
### Deprecated
|
9
|
+
- Nothing.
|
10
|
+
|
11
|
+
### Removed
|
12
|
+
- Nothing.
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
- Supports options `each_serializer` and `serializer` when specified in
|
16
|
+
the controller or in the serializers
|
17
|
+
|
3
18
|
## 0.0.2 - 2014-08-22
|
4
19
|
|
5
20
|
### Added
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -8,8 +8,8 @@ Climate](https://codeclimate.com/github/dockyard/postgres_ext-serializers.png)](
|
|
8
8
|
[![Gem
|
9
9
|
Version](https://badge.fury.io/rb/postgres_ext-serializers.png)](http://badge.fury.io/rb/postgres_ext-serializers)
|
10
10
|
|
11
|
-
# Note: Current release is
|
12
|
-
There will be updates
|
11
|
+
# Note: Current release is AMS 0.8.x compatible
|
12
|
+
There will be updates coming to make it 0.9.x compatible
|
13
13
|
|
14
14
|
## Looking for help? ##
|
15
15
|
|
@@ -24,7 +24,7 @@ module PostgresExt::Serializers::ActiveModel
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def _postgres_serializable_array
|
27
|
-
_include_relation_in_root(object)
|
27
|
+
_include_relation_in_root(object, serializer: @options[:each_serializer])
|
28
28
|
|
29
29
|
jsons_select_manager = _results_table_arel
|
30
30
|
jsons_select_manager.with @_ctes
|
@@ -32,13 +32,22 @@ module PostgresExt::Serializers::ActiveModel
|
|
32
32
|
object.klass.connection.select_value _visitor.accept(jsons_select_manager)
|
33
33
|
end
|
34
34
|
|
35
|
-
def _include_relation_in_root(relation,
|
35
|
+
def _include_relation_in_root(relation, *args)
|
36
|
+
local_options = args.extract_options!
|
37
|
+
foreign_key_column = args[0]
|
38
|
+
constraining_table = args[1]
|
39
|
+
|
36
40
|
relation_query = relation.dup
|
37
41
|
relation_query_arel = relation_query.arel_table
|
38
42
|
@_embedded << relation.table_name
|
39
43
|
|
40
44
|
klass = ActiveRecord::Relation === relation ? relation.klass : relation
|
41
|
-
|
45
|
+
if local_options[:serializer].present?
|
46
|
+
serializer_class = local_options[:serializer]
|
47
|
+
else
|
48
|
+
serializer_class = _serializer_class(klass)
|
49
|
+
end
|
50
|
+
|
42
51
|
_serializer = serializer_class.new klass.new, options
|
43
52
|
|
44
53
|
attributes = serializer_class._attributes
|
@@ -87,9 +96,11 @@ module PostgresExt::Serializers::ActiveModel
|
|
87
96
|
end
|
88
97
|
|
89
98
|
if association.embed_in_root? && !@_embedded.member?(key.to_s)
|
90
|
-
_include_relation_in_root(association_reflection.klass,association_reflection.foreign_key,ids_table_arel
|
99
|
+
_include_relation_in_root(association_reflection.klass, association_reflection.foreign_key, ids_table_arel,
|
100
|
+
serializer: association.target_serializer)
|
91
101
|
end
|
92
102
|
end
|
103
|
+
|
93
104
|
arel = relation_query.arel.dup
|
94
105
|
|
95
106
|
association_sql_tables.each do |assoc_hash|
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'postgres_ext', '~> 2.1'
|
22
|
-
spec.add_runtime_dependency 'active_model_serializers'
|
22
|
+
spec.add_runtime_dependency 'active_model_serializers', '~> 0.8.0'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
25
|
spec.add_development_dependency 'actionpack', '~> 4.0'
|
data/test/serializer_test.rb
CHANGED
@@ -2,12 +2,29 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
|
4
4
|
describe 'ArraySerializer patch' do
|
5
|
-
let(:json_data) { ActiveModel::Serializer.build_json(controller, relation,
|
5
|
+
let(:json_data) { ActiveModel::Serializer.build_json(controller, relation, options).to_json }
|
6
|
+
|
7
|
+
context 'specify serializer' do
|
8
|
+
let(:relation) { Note.all }
|
9
|
+
let(:controller) { NotesController.new }
|
10
|
+
let(:options) { { each_serializer: OtherNoteSerializer } }
|
11
|
+
|
12
|
+
before do
|
13
|
+
@note = Note.create content: 'Test', name: 'Title'
|
14
|
+
@tag = Tag.create name: 'My tag', note: @note
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'generates the proper json output' do
|
18
|
+
json_expected = %{{"tags":[{"id":#{@tag.id},"name":"My tag"}],"notes":[{"id":#{@note.id},"name":"Title","tag_ids":[#{@tag.id}]}]}}
|
19
|
+
json_data.must_equal json_expected
|
20
|
+
end
|
21
|
+
end
|
6
22
|
|
7
23
|
context 'computed value methods' do
|
8
24
|
let(:relation) { Person.all }
|
9
25
|
let(:controller) { PeopleController.new }
|
10
26
|
let(:person) { Person.create first_name: 'Test', last_name: 'User' }
|
27
|
+
let(:options) { }
|
11
28
|
|
12
29
|
it 'generates the proper json output for the serializer' do
|
13
30
|
json_expected = %{{"people":[{"id":#{person.id},"full_name":"Test User","attendance_name":"User, Test"}]}}
|
data/test/test_helper.rb
CHANGED
@@ -50,11 +50,18 @@ class NoteSerializer < ActiveModel::Serializer
|
|
50
50
|
embed :ids, include: true
|
51
51
|
end
|
52
52
|
|
53
|
-
class
|
54
|
-
|
53
|
+
class ShortTagSerializer < ActiveModel::Serializer
|
54
|
+
attributes :id, :name
|
55
55
|
end
|
56
56
|
|
57
|
+
class OtherNoteSerializer < ActiveModel::Serializer
|
58
|
+
attributes :id, :name
|
59
|
+
has_many :tags, serializer: ShortTagSerializer, embed: :ids, include: true
|
60
|
+
end
|
57
61
|
|
62
|
+
class Tag < ActiveRecord::Base
|
63
|
+
belongs_to :note
|
64
|
+
end
|
58
65
|
|
59
66
|
class TagSerializer < ActiveModel::Serializer
|
60
67
|
attributes :id, :name
|
@@ -62,6 +69,7 @@ class TagSerializer < ActiveModel::Serializer
|
|
62
69
|
has_one :note
|
63
70
|
end
|
64
71
|
|
72
|
+
|
65
73
|
DatabaseCleaner.strategy = :deletion
|
66
74
|
|
67
75
|
class Minitest::Spec
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postgres_ext-serializers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan McClain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: postgres_ext
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: active_model_serializers
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.8.0
|
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.8.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|