json-exporter 0.4.1 → 0.4.3
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 +49 -65
- data/lib/json-exporter.rb +1 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d75515317d6672ad95a84990587e55f75a5253d3afe8e507ee858a4dd3608c78
|
4
|
+
data.tar.gz: 39989ef8d940c0677bf5c0478e0b1cdaa29cd863b7d002ad1dfb12f778eb046e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3db4944bc96fdde608ac516bca887760d83da88479f7080b7a65e0bf23a97565773940b19febce7186dd0725901b3d3acd7b936bf15488e838e2a1119dd700d
|
7
|
+
data.tar.gz: 9c8a8e4896cf16309c5ca967be8d7201514ce2ab4f6547ea10e28f98769ebaca0a3cd2d48bfc4a3774070fc8784bb10959809d4c2bec5194afc7559f05cb518b
|
data/.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.3
|
data/lib/json-exporter/base.rb
CHANGED
@@ -1,44 +1,42 @@
|
|
1
1
|
class JsonExporter
|
2
2
|
EXPORTERS ||= {}
|
3
|
-
FILTERS ||= {
|
4
|
-
|
3
|
+
FILTERS ||= {before:{}, after:{}}
|
4
|
+
INFLECTOR ||= Dry::Inflector.new
|
5
5
|
|
6
6
|
class << self
|
7
|
-
def define
|
8
|
-
|
9
|
-
name, opts = nil, args[0]
|
10
|
-
else
|
11
|
-
name, opts = args[0], args[1]
|
12
|
-
end
|
13
|
-
|
14
|
-
name = name ? name.to_s.classify : to_s
|
15
|
-
opts ||= {}
|
7
|
+
def define name = nil, &block
|
8
|
+
name = name ? "#{INFLECTOR.classify(name)}#{to_s}" : to_s
|
16
9
|
|
17
10
|
EXPORTERS[name] = block
|
18
11
|
end
|
19
12
|
|
20
|
-
def export name, opts=
|
21
|
-
new(name, opts).render
|
13
|
+
def export name, opts = nil
|
14
|
+
new(name, opts || {}).render
|
22
15
|
end
|
23
16
|
|
24
17
|
def before &block
|
25
|
-
|
18
|
+
__define_filter :before, &block
|
26
19
|
end
|
27
20
|
|
28
21
|
def after &block
|
29
|
-
|
22
|
+
__define_filter :after, &block
|
30
23
|
end
|
31
24
|
|
32
|
-
def
|
33
|
-
|
25
|
+
def __define_filter name, &block
|
26
|
+
define_method name do
|
27
|
+
super() if self.class != JsonExporter
|
28
|
+
instance_exec &block
|
29
|
+
end
|
34
30
|
end
|
35
31
|
end
|
36
32
|
|
37
33
|
###
|
38
34
|
|
39
|
-
attr_accessor :
|
35
|
+
attr_accessor :json, :model, :opts
|
36
|
+
|
37
|
+
alias :response :json
|
40
38
|
|
41
|
-
def initialize model, opts={}
|
39
|
+
def initialize model, opts = {}
|
42
40
|
if model.is_a?(String) || model.is_a?(Symbol)
|
43
41
|
raise ArgumentError, 'model argument is not model instance (it is %s)' % model.class
|
44
42
|
end
|
@@ -47,26 +45,29 @@ class JsonExporter
|
|
47
45
|
opts[:current_depth] ||= 0
|
48
46
|
opts[:current_depth] += 1
|
49
47
|
|
50
|
-
@
|
51
|
-
@
|
52
|
-
@
|
53
|
-
@
|
54
|
-
@response = OPTS[:wia] == false ? {} : {}.to_hwia
|
48
|
+
@model = model
|
49
|
+
@opts = opts.to_hwia
|
50
|
+
@block = __find_exporter
|
51
|
+
@json = {}
|
55
52
|
end
|
56
53
|
|
57
54
|
def render
|
58
|
-
|
55
|
+
before
|
59
56
|
instance_exec &@block
|
60
|
-
|
57
|
+
after
|
61
58
|
|
62
|
-
@
|
59
|
+
@json
|
63
60
|
end
|
64
61
|
|
62
|
+
def before; end
|
63
|
+
|
64
|
+
def after; end
|
65
|
+
|
65
66
|
private
|
66
67
|
|
67
68
|
# export object
|
68
69
|
# export :org_users, key: :users
|
69
|
-
def export name,
|
70
|
+
def export name, local_opts = {}
|
70
71
|
return if @opts[:current_depth] > @opts[:export_depth]
|
71
72
|
|
72
73
|
if name.is_a?(Symbol)
|
@@ -76,61 +77,44 @@ class JsonExporter
|
|
76
77
|
cmodel = cmodel.all.map { |el| JsonExporter.export(el, @opts.dup) }
|
77
78
|
end
|
78
79
|
else
|
79
|
-
|
80
|
+
underscored = INFLECTOR.underscore(name.class.to_s).to_sym
|
81
|
+
name, cmodel = underscored, name
|
80
82
|
end
|
81
83
|
|
82
|
-
@
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
84
|
+
@json[name] = if [Array].include?(cmodel.class)
|
85
|
+
cmodel
|
86
|
+
elsif cmodel.nil?
|
87
|
+
nil
|
88
|
+
else
|
89
|
+
new_opts = local_opts.merge(export_depth: @opts[:export_depth], current_depth: @opts[:current_depth])
|
90
|
+
self.class.new(cmodel, new_opts).render
|
91
|
+
end
|
90
92
|
end
|
91
93
|
|
92
94
|
# add property to exporter
|
93
|
-
def property name, data
|
95
|
+
def property name, data = :_undefined, &block
|
94
96
|
if block_given?
|
95
97
|
hash_data = {}
|
96
|
-
data =
|
98
|
+
data = instance_exec hash_data, &block
|
97
99
|
data = hash_data if hash_data.keys.first
|
98
100
|
elsif data == :_undefined
|
99
101
|
data = @model.send(name)
|
100
102
|
end
|
101
103
|
|
102
|
-
@
|
104
|
+
@json[name] = data unless data.nil?
|
103
105
|
end
|
104
106
|
alias :prop :property
|
105
107
|
|
106
|
-
|
107
|
-
|
108
|
-
exporter =
|
109
|
-
if @opts[:exporter]
|
110
|
-
@opts[:exporter].to_s.classify
|
111
|
-
elsif self.class == JsonExporter
|
112
|
-
# JsonExporter.define User do
|
113
|
-
@opts[:exporter] ? @opts[:exporter].to_s.classify : model.class
|
114
|
-
else
|
115
|
-
# class FooExporter< JsonExporter
|
116
|
-
self.class
|
117
|
-
end
|
118
|
-
|
119
|
-
EXPORTERS[exporter.to_s] || EXPORTERS[model.class.to_s] || raise('Exporter "%s" (:%s) not found' % [exporter, exporter.to_s.underscore])
|
120
|
-
end
|
108
|
+
def __find_exporter version = nil
|
109
|
+
base = INFLECTOR.classify @opts[:exporter] || model.class.to_s
|
110
|
+
exporter = self.class.to_s
|
121
111
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
instance_exec(&filter) if filter
|
126
|
-
end
|
112
|
+
self.class.ancestors.map(&:to_s).each do |klass|
|
113
|
+
block = EXPORTERS[[base, klass].join] || EXPORTERS[klass]
|
114
|
+
return block if block
|
127
115
|
end
|
128
|
-
end
|
129
116
|
|
130
|
-
|
131
|
-
object.each do |k, v|
|
132
|
-
prop k.to_sym, v
|
133
|
-
end
|
117
|
+
raise(%[Exporter for class "#{base}" not found.])
|
134
118
|
end
|
135
119
|
end
|
136
120
|
|
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.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dino Reic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hash_wia
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dry-inflector
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Fast ruby object JSON exporter, easy to use and extend
|
28
42
|
email: reic.dino@gmail.com
|
29
43
|
executables: []
|
@@ -56,5 +70,5 @@ requirements: []
|
|
56
70
|
rubygems_version: 3.2.3
|
57
71
|
signing_key:
|
58
72
|
specification_version: 4
|
59
|
-
summary: Fast, simple & powerful object exporter
|
73
|
+
summary: Fast, simple & powerful object exporter to json
|
60
74
|
test_files: []
|