json-exporter 0.3.0 → 0.3.2
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/.version +1 -1
- data/lib/json-exporter/base.rb +44 -10
- data/lib/json-exporter/klass_func.rb +15 -0
- data/lib/json-exporter.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8d838703ee920866377de7d41ee5203a0b11496088fd9676ce7e2fa71c95ca0
|
4
|
+
data.tar.gz: 60f697333d5b70b3a5dae4a9cf2297123519d4bd7f5bbbf6e06c79f1af2377dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09f9ecfa0f902e21c33c9080cf0e9b90286ba2cb42c78a2edd108f790589120820827059ac400d5a6e078adc87da6038a9c05e02c1dcfd29510631ca40a65eb1'
|
7
|
+
data.tar.gz: 46b46b44094069ab10973fdff844659d9ac6f5472870968288e4b6a5e737ddf692fc4add3de2d9eb94b8f859a156d2ee80ce1b424a0ec9e851802f2ad12bc91f
|
data/.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/lib/json-exporter/base.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
class JsonExporter
|
2
2
|
EXPORTERS ||= {}
|
3
|
-
FILTERS ||= {}
|
4
|
-
|
5
|
-
attr_accessor :response, :user, :model, :meta
|
3
|
+
FILTERS ||= {b:{}, a:{}}
|
6
4
|
|
7
5
|
class << self
|
8
6
|
def define *args, &block
|
@@ -22,13 +20,20 @@ class JsonExporter
|
|
22
20
|
new(name, opts).render
|
23
21
|
end
|
24
22
|
|
23
|
+
def before &block
|
24
|
+
FILTERS[:b][to_s] = block
|
25
|
+
end
|
26
|
+
|
25
27
|
def filter &block
|
26
|
-
FILTERS[to_s] = block
|
28
|
+
FILTERS[:a][to_s] = block
|
27
29
|
end
|
30
|
+
alias :after :filter
|
28
31
|
end
|
29
32
|
|
30
33
|
###
|
31
34
|
|
35
|
+
attr_accessor :response, :user, :model, :opts
|
36
|
+
|
32
37
|
def initialize model, opts={}
|
33
38
|
if model.is_a?(String) || model.is_a?(Symbol)
|
34
39
|
raise ArgumentError, 'model argument is not model instance (it is %s)' % model.class
|
@@ -54,8 +59,10 @@ class JsonExporter
|
|
54
59
|
end
|
55
60
|
|
56
61
|
def render
|
62
|
+
exporter_apply_filters :b
|
57
63
|
instance_exec &@block
|
58
|
-
exporter_apply_filters
|
64
|
+
exporter_apply_filters :a
|
65
|
+
|
59
66
|
@opts.compact ? @response.compact : @response
|
60
67
|
end
|
61
68
|
|
@@ -67,21 +74,40 @@ class JsonExporter
|
|
67
74
|
end
|
68
75
|
end
|
69
76
|
|
77
|
+
def meta arg = nil
|
78
|
+
if arg
|
79
|
+
if !block_given?
|
80
|
+
raise ArgumentError.new('Block not given for meta with param')
|
81
|
+
elsif @meta[arg]
|
82
|
+
yield
|
83
|
+
end
|
84
|
+
else
|
85
|
+
@meta
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
70
89
|
private
|
71
90
|
|
72
91
|
# export object
|
73
|
-
|
92
|
+
# export :org_users, key: :users
|
93
|
+
def export name, opts = {}
|
74
94
|
return if @opts[:current_depth] > @opts[:depth]
|
75
95
|
|
76
96
|
if name.is_a?(Symbol)
|
77
97
|
name, cmodel = name, @model.send(name)
|
98
|
+
|
99
|
+
if cmodel.respond_to?(:all) && cmodel.respond_to?(:first)
|
100
|
+
cmodel = cmodel.all.map { |el| JsonExporter.export(el, @opts.dup) }
|
101
|
+
end
|
78
102
|
else
|
79
103
|
name, cmodel = name.class.to_s.underscore.to_sym, name
|
80
104
|
end
|
81
105
|
|
82
|
-
@response[name] =
|
106
|
+
@response[opts[:key] || name] =
|
83
107
|
if [Array].include?(cmodel.class)
|
84
108
|
cmodel
|
109
|
+
elsif cmodel.nil?
|
110
|
+
nil
|
85
111
|
else
|
86
112
|
JsonExporter.export(cmodel, @opts)
|
87
113
|
end
|
@@ -90,7 +116,9 @@ class JsonExporter
|
|
90
116
|
# add property to exporter
|
91
117
|
def property name, data=:_undefined
|
92
118
|
if block_given?
|
93
|
-
|
119
|
+
hash_data = {}
|
120
|
+
data = yield hash_data
|
121
|
+
data = hash_data if hash_data.keys.first
|
94
122
|
elsif data == :_undefined
|
95
123
|
data = @model.send(name)
|
96
124
|
end
|
@@ -113,12 +141,18 @@ class JsonExporter
|
|
113
141
|
EXPORTERS[exporter.to_s] || raise('Exporter "%s" (:%s) not found' % [exporter, exporter.to_s.underscore])
|
114
142
|
end
|
115
143
|
|
116
|
-
def exporter_apply_filters
|
144
|
+
def exporter_apply_filters kind
|
117
145
|
for klass in self.class.ancestors.reverse.map(&:to_s)
|
118
|
-
if filter = FILTERS[klass]
|
146
|
+
if filter = FILTERS[kind][klass]
|
119
147
|
instance_exec(&filter) if filter
|
120
148
|
end
|
121
149
|
end
|
122
150
|
end
|
151
|
+
|
152
|
+
def merge object
|
153
|
+
object.each do |k, v|
|
154
|
+
prop k.to_sym, v
|
155
|
+
end
|
156
|
+
end
|
123
157
|
end
|
124
158
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# shortcut for JsonExporter.define(name) {}
|
2
|
+
# JsonExporter :page do
|
3
|
+
# prop :name
|
4
|
+
# end
|
5
|
+
|
6
|
+
# shortcut for JsonExporter.new(object).render
|
7
|
+
# JsonExporter Page.first
|
8
|
+
|
9
|
+
def JsonExporter name_or_object, opts = {}, &block
|
10
|
+
if block
|
11
|
+
JsonExporter.define name_or_object, &block
|
12
|
+
else
|
13
|
+
JsonExporter.new(name_or_object, opts).render
|
14
|
+
end
|
15
|
+
end
|
data/lib/json-exporter.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-exporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dino Reic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hash_wia
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- "./.version"
|
34
34
|
- "./lib/json-exporter.rb"
|
35
35
|
- "./lib/json-exporter/base.rb"
|
36
|
+
- "./lib/json-exporter/klass_func.rb"
|
36
37
|
homepage: https://github.com/dux/json-exporter
|
37
38
|
licenses:
|
38
39
|
- MIT
|
@@ -52,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
53
|
- !ruby/object:Gem::Version
|
53
54
|
version: '0'
|
54
55
|
requirements: []
|
55
|
-
rubygems_version: 3.
|
56
|
+
rubygems_version: 3.2.22
|
56
57
|
signing_key:
|
57
58
|
specification_version: 4
|
58
59
|
summary: Fast, simple & powerful object exporter
|