scoped_serializer 0.1.0 → 1.0.0.b
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/lib/action_controller/serialization.rb +50 -0
- data/lib/scoped_serializer/array_serializer.rb +26 -6
- data/lib/scoped_serializer/base_serializer.rb +21 -0
- data/lib/scoped_serializer/collection_serializer.rb +14 -1
- data/lib/scoped_serializer/serializer.rb +3 -6
- data/lib/scoped_serializer/version.rb +1 -1
- data/lib/scoped_serializer.rb +17 -6
- metadata +48 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e9612c4d1cdb699e0f40eb48488a7070c2c0061
|
4
|
+
data.tar.gz: 81cba16a43b750cc6cb0f0a5d430f6f7ac9dcb09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d1b6de7261469f277e6f68b18317b57d6e5f7a769d54f12043ee746131d46cbb5bb6d4ca08c64edf697ef44a830be0a570d0949729bad0c3692a7a16c8c35fa
|
7
|
+
data.tar.gz: 75f0c405ffcb113f1ad0a8ccfc05f24b4393023d40de02485b22f5ae3f7349a5e1706dfc001ba5415df7851013bfa553fc2f4661833f10a513ee7561235a746b
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module ActionController
|
2
|
+
module Serialization
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
##
|
7
|
+
# Returns scope based on action.
|
8
|
+
#
|
9
|
+
def serializer_scope
|
10
|
+
scope = case action_name
|
11
|
+
when 'new', 'show', 'edit', 'update', 'create', 'destroy'
|
12
|
+
:resource
|
13
|
+
when 'index'
|
14
|
+
:collection
|
15
|
+
else
|
16
|
+
:default
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
##
|
21
|
+
# Default serializer options.
|
22
|
+
#
|
23
|
+
def default_serializer_options
|
24
|
+
{}
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# JSON serializer to use.
|
29
|
+
#
|
30
|
+
def build_json_serializer(object, options={})
|
31
|
+
ScopedSerializer.for(object, { :scope => serializer_scope, :super => true }.merge(options.merge(default_serializer_options)))
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Renders specific JSON serializer see {ScopedSerializer}.
|
36
|
+
#
|
37
|
+
[:_render_option_json, :_render_with_renderer_json].each do |method|
|
38
|
+
define_method method do |resource, options|
|
39
|
+
serializer = build_json_serializer(resource, options)
|
40
|
+
|
41
|
+
if serializer
|
42
|
+
super(serializer, options)
|
43
|
+
else
|
44
|
+
super(resource, options)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -1,18 +1,15 @@
|
|
1
1
|
module ScopedSerializer
|
2
2
|
class ArraySerializer < BaseSerializer
|
3
3
|
|
4
|
-
attr_reader :array, :
|
4
|
+
attr_reader :array, :options
|
5
5
|
|
6
|
-
def initialize(array,
|
6
|
+
def initialize(array, options={})
|
7
7
|
@array = array
|
8
|
-
@scope_name = scope_name
|
9
8
|
@options = options || {}
|
10
9
|
end
|
11
10
|
|
12
11
|
def serializable_hash(options={})
|
13
|
-
|
14
|
-
ScopedSerializer.for(object, @scope_name, @options.merge(:root => false)).as_json
|
15
|
-
end
|
12
|
+
serializable_objects.collect(&:as_json)
|
16
13
|
end
|
17
14
|
|
18
15
|
def meta
|
@@ -25,5 +22,28 @@ module ScopedSerializer
|
|
25
22
|
data
|
26
23
|
end
|
27
24
|
|
25
|
+
##
|
26
|
+
# Returns attributes as a CSV string.
|
27
|
+
#
|
28
|
+
def to_csv(options={})
|
29
|
+
columns = options.delete(:columns)
|
30
|
+
|
31
|
+
CSV.generate(options) do |csv|
|
32
|
+
csv << columns if columns.present?
|
33
|
+
|
34
|
+
serializable_objects.each do |object|
|
35
|
+
csv << object.attributes_hash.values
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
def serializable_objects
|
43
|
+
@serializable_objects ||= array.collect do |object|
|
44
|
+
ScopedSerializer.for(object, @options.merge(:root => false))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
28
48
|
end
|
29
49
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
1
3
|
module ScopedSerializer
|
2
4
|
class BaseSerializer
|
3
5
|
|
@@ -54,5 +56,24 @@ module ScopedSerializer
|
|
54
56
|
@options[:meta] || {}
|
55
57
|
end
|
56
58
|
|
59
|
+
##
|
60
|
+
# Returns attributes as a CSV string.
|
61
|
+
#
|
62
|
+
def to_csv(options={})
|
63
|
+
CSV.generate(options) do |csv|
|
64
|
+
csv << scope.attributes
|
65
|
+
csv << attributes_hash.values
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Returns attributes as an XLS string.
|
71
|
+
#
|
72
|
+
def to_xls(options={})
|
73
|
+
options.merge!(:col_sep => "\t")
|
74
|
+
|
75
|
+
to_csv(options)
|
76
|
+
end
|
77
|
+
|
57
78
|
end
|
58
79
|
end
|
@@ -4,8 +4,21 @@ module ScopedSerializer
|
|
4
4
|
def initialize(*args)
|
5
5
|
super
|
6
6
|
|
7
|
+
options = args.extract_options!
|
8
|
+
|
9
|
+
# Allow to define own model class
|
10
|
+
@model_class = options.delete(:model_class) || @array.klass
|
11
|
+
|
7
12
|
# Configure root element
|
8
|
-
@options[:root] = default_root_key(@
|
13
|
+
@options[:root] = default_root_key(@model_class).pluralize if @options[:root].nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_csv(options={})
|
17
|
+
attributes = ScopedSerializer.find_serializer_by_class(@model_class)
|
18
|
+
.find_scope(options[:scope] || :default)
|
19
|
+
.attributes
|
20
|
+
|
21
|
+
super(options.merge(:columns => attributes))
|
9
22
|
end
|
10
23
|
|
11
24
|
end
|
@@ -61,13 +61,10 @@ module ScopedSerializer
|
|
61
61
|
|
62
62
|
attr_reader :resource, :scope, :options
|
63
63
|
|
64
|
-
def initialize(resource,
|
64
|
+
def initialize(resource, options={})
|
65
65
|
@resource = resource
|
66
66
|
@options = options || {}
|
67
|
-
|
68
|
-
if options[:scope].present?
|
69
|
-
scope = options[:scope]
|
70
|
-
end
|
67
|
+
scope = options[:scope] || :default
|
71
68
|
|
72
69
|
if scope.is_a?(Symbol)
|
73
70
|
@scope_name = scope
|
@@ -146,7 +143,7 @@ module ScopedSerializer
|
|
146
143
|
end
|
147
144
|
|
148
145
|
object = fetch_association(association_data, includes)
|
149
|
-
data = ScopedSerializer.for(object,
|
146
|
+
data = ScopedSerializer.for(object, options.merge(:associations => options[:include])).as_json
|
150
147
|
|
151
148
|
hash.merge!(data) if data
|
152
149
|
end
|
data/lib/scoped_serializer.rb
CHANGED
@@ -5,6 +5,17 @@ require 'scoped_serializer/default_serializer'
|
|
5
5
|
require 'scoped_serializer/array_serializer'
|
6
6
|
require 'scoped_serializer/collection_serializer'
|
7
7
|
|
8
|
+
begin
|
9
|
+
require 'action_controller'
|
10
|
+
require 'action_controller/serialization'
|
11
|
+
|
12
|
+
ActiveSupport.on_load(:action_controller) do
|
13
|
+
include ::ActionController::Serialization
|
14
|
+
end
|
15
|
+
rescue LoadError
|
16
|
+
# No Rails?
|
17
|
+
end
|
18
|
+
|
8
19
|
##
|
9
20
|
# ScopedSerializer takes care of complex and abstract serialization classes.
|
10
21
|
# It does this by allowing serialization scopes. For example, you can define a collection and a resource scope.
|
@@ -28,8 +39,8 @@ require 'scoped_serializer/collection_serializer'
|
|
28
39
|
# end
|
29
40
|
# end
|
30
41
|
#
|
31
|
-
# ScopedSerializer.render(@order, :resource)
|
32
|
-
# ScopedSerializer.render(Order.order('id ASC'), :collection)
|
42
|
+
# ScopedSerializer.render(@order, :scope => :resource)
|
43
|
+
# ScopedSerializer.render(Order.order('id ASC'), :scope => :collection)
|
33
44
|
#
|
34
45
|
|
35
46
|
module ScopedSerializer
|
@@ -42,25 +53,25 @@ module ScopedSerializer
|
|
42
53
|
#
|
43
54
|
# @return [Hash]
|
44
55
|
#
|
45
|
-
def render(object,
|
56
|
+
def render(object, options={})
|
46
57
|
options.merge!({
|
47
58
|
:super => true
|
48
59
|
})
|
49
60
|
|
50
|
-
self.for(object,
|
61
|
+
self.for(object, options).as_json
|
51
62
|
end
|
52
63
|
|
53
64
|
##
|
54
65
|
# Returns an instantized serializer for the given object.
|
55
66
|
#
|
56
|
-
def for(object,
|
67
|
+
def for(object, options={})
|
57
68
|
if object.respond_to?(:each)
|
58
69
|
serializer = find_serializer(object)
|
59
70
|
else
|
60
71
|
serializer = options[:serializer] || find_serializer(object) || DefaultSerializer
|
61
72
|
end
|
62
73
|
|
63
|
-
serializer.new(object,
|
74
|
+
serializer.new(object, options) if serializer
|
64
75
|
end
|
65
76
|
|
66
77
|
##
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scoped_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.b
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arjen Oosterkamp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -108,6 +108,48 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec-rails
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: actionpack
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: activesupport
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
111
153
|
description: Scoped serializers for Rails
|
112
154
|
email:
|
113
155
|
- mail@arjen.me
|
@@ -117,6 +159,7 @@ extra_rdoc_files: []
|
|
117
159
|
files:
|
118
160
|
- MIT-LICENSE
|
119
161
|
- Rakefile
|
162
|
+
- lib/action_controller/serialization.rb
|
120
163
|
- lib/scoped_serializer.rb
|
121
164
|
- lib/scoped_serializer/array_serializer.rb
|
122
165
|
- lib/scoped_serializer/base_serializer.rb
|
@@ -141,12 +184,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
184
|
version: '0'
|
142
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
186
|
requirements:
|
144
|
-
- - "
|
187
|
+
- - ">"
|
145
188
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
189
|
+
version: 1.3.1
|
147
190
|
requirements: []
|
148
191
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.
|
192
|
+
rubygems_version: 2.4.5
|
150
193
|
signing_key:
|
151
194
|
specification_version: 4
|
152
195
|
summary: Scoped serializers for Rails
|