json-exporter 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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