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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea8fbcdeb00712d423e781894943e2a6e2b5eaad29bb227e7e014bd7eb84dbab
4
- data.tar.gz: 4217c182ae80640257d5db886bfdaa75583f47ed9de842f4ffe742c7efe63634
3
+ metadata.gz: a8d838703ee920866377de7d41ee5203a0b11496088fd9676ce7e2fa71c95ca0
4
+ data.tar.gz: 60f697333d5b70b3a5dae4a9cf2297123519d4bd7f5bbbf6e06c79f1af2377dc
5
5
  SHA512:
6
- metadata.gz: 55629be4525d1bc676e6e7f29c09d1f94d10aa91a8845bdcbe00505d8e6613cbe2b10baccc358fecbfc2c4262eaf5ed56bda081e93b088829d945ba4b41194e6
7
- data.tar.gz: 9aa6843b5440a0948ecb971dbc3a21dbaabebf6d0296fca20fb01b1858e1ffc21f75f992800924d31157d8b79612b4cf67c514e6802a43729bd6c3fed5f4db3c
6
+ metadata.gz: '09f9ecfa0f902e21c33c9080cf0e9b90286ba2cb42c78a2edd108f790589120820827059ac400d5a6e078adc87da6038a9c05e02c1dcfd29510631ca40a65eb1'
7
+ data.tar.gz: 46b46b44094069ab10973fdff844659d9ac6f5472870968288e4b6a5e737ddf692fc4add3de2d9eb94b8f859a156d2ee80ce1b424a0ec9e851802f2ad12bc91f
data/.version CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.2
@@ -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
- def export name
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
- data = yield
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
@@ -1,3 +1,4 @@
1
1
  require 'hash_wia'
2
2
 
3
3
  require_relative './json-exporter/base'
4
+ require_relative './json-exporter/klass_func'
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.0
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: 2020-09-26 00:00:00.000000000 Z
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.0.6
56
+ rubygems_version: 3.2.22
56
57
  signing_key:
57
58
  specification_version: 4
58
59
  summary: Fast, simple & powerful object exporter