json_dumper 0.4.0 → 0.5.0
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 +5 -5
- data/README.md +4 -0
- data/lib/json_dumper/base.rb +25 -9
- data/lib/json_dumper/delayed.rb +5 -4
- data/lib/json_dumper/helper.rb +6 -2
- data/lib/json_dumper/version.rb +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 45c60574d6e74355f5780187c67dffaa8dbec10c66f7daf3333716a314fb2fd9
|
|
4
|
+
data.tar.gz: b38572d61598229c78cea6383aaea4b42fecb1881fc93833c088dcbf74a990af
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4af873d7fc123e0cf8aa027183a688d2fa555b9f6b709e42504b6da0b1845e3326e5a7e7ce4cedabee4d0f931f8899b11552304154a779d395f4fc11e8e9b7e2
|
|
7
|
+
data.tar.gz: b2352afdd41c7e496188d1503bc3c32b789683ec76ad577bef34cfb2ac1268ebfaad913bfeba0b9df887dd936ae8ef1cd5e0c365fb95b7635867e4810302ec80
|
data/README.md
CHANGED
|
@@ -206,3 +206,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/therus
|
|
|
206
206
|
|
|
207
207
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
|
208
208
|
|
|
209
|
+
## Related blogpost
|
|
210
|
+
|
|
211
|
+
Check it out [here](http://www.dmitry-ishkov.com/2017/08/better-ruby-serialization-into-json.html)
|
|
212
|
+
|
data/lib/json_dumper/base.rb
CHANGED
|
@@ -7,12 +7,12 @@ module JsonDumper
|
|
|
7
7
|
self.entity = entity
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def self.method_missing(name, *
|
|
10
|
+
def self.method_missing(name, *args1, **args2, &block)
|
|
11
11
|
name_sym = name
|
|
12
12
|
name = name.to_s
|
|
13
|
-
value =
|
|
13
|
+
value = args1[0]
|
|
14
14
|
if name.start_with?('fetch_')
|
|
15
|
-
return Delayed.new(name.gsub('fetch_', ''), value,
|
|
15
|
+
return Delayed.new(name.gsub('fetch_', ''), value, args1[1..-1], args2, self)
|
|
16
16
|
end
|
|
17
17
|
if instance.respond_to?(name)
|
|
18
18
|
if value.respond_to?(:each) && !value.respond_to?(:each_pair)
|
|
@@ -21,7 +21,11 @@ module JsonDumper
|
|
|
21
21
|
if new_dumper.return_nils
|
|
22
22
|
return nil
|
|
23
23
|
end
|
|
24
|
-
result =
|
|
24
|
+
result = if args2.empty?
|
|
25
|
+
new_dumper.send(name, *(args1[1..-1]), &block)
|
|
26
|
+
else
|
|
27
|
+
new_dumper.send(name, *(args1[1..-1]), **args2, &block)
|
|
28
|
+
end
|
|
25
29
|
if result.respond_to?(:each) && !result.respond_to?(:each_pair)
|
|
26
30
|
result = DumperArray.new(result)
|
|
27
31
|
else
|
|
@@ -38,7 +42,11 @@ module JsonDumper
|
|
|
38
42
|
if new_dumper.return_nils
|
|
39
43
|
return nil
|
|
40
44
|
end
|
|
41
|
-
result =
|
|
45
|
+
result = if args2.empty?
|
|
46
|
+
new_dumper.send(name, *(args1[1..-1]), &block)
|
|
47
|
+
else
|
|
48
|
+
new_dumper.send(name, *(args1[1..-1]), **args2, &block)
|
|
49
|
+
end
|
|
42
50
|
if result.respond_to?(:each) && !result.respond_to?(:each_pair)
|
|
43
51
|
result = DumperArray.new(result)
|
|
44
52
|
else
|
|
@@ -52,7 +60,11 @@ module JsonDumper
|
|
|
52
60
|
elsif name.end_with?('_preload') && instance.respond_to?(name.gsub('_preload', ''))
|
|
53
61
|
return {}
|
|
54
62
|
else
|
|
55
|
-
|
|
63
|
+
if args2.empty?
|
|
64
|
+
super name_sym, *args1, &block
|
|
65
|
+
else
|
|
66
|
+
super name_sym, *args1, *args2, &block
|
|
67
|
+
end
|
|
56
68
|
end
|
|
57
69
|
end
|
|
58
70
|
|
|
@@ -60,11 +72,15 @@ module JsonDumper
|
|
|
60
72
|
new.respond_to? method_name
|
|
61
73
|
end
|
|
62
74
|
|
|
63
|
-
def method_missing(name, *
|
|
75
|
+
def method_missing(name, *args1, **args2, &block)
|
|
64
76
|
if entity.respond_to? name
|
|
65
|
-
|
|
77
|
+
if args2.empty?
|
|
78
|
+
entity.send(name, *args1, &block)
|
|
79
|
+
else
|
|
80
|
+
entity.send(name, *args1, **args2, &block)
|
|
81
|
+
end
|
|
66
82
|
else
|
|
67
|
-
super
|
|
83
|
+
super
|
|
68
84
|
end
|
|
69
85
|
end
|
|
70
86
|
|
data/lib/json_dumper/delayed.rb
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
module JsonDumper
|
|
2
2
|
class Delayed
|
|
3
|
-
attr_accessor :method_name, :entity, :
|
|
3
|
+
attr_accessor :method_name, :entity, :positional_args, :named_args, :klass
|
|
4
4
|
|
|
5
|
-
def initialize(method_name, entity,
|
|
5
|
+
def initialize(method_name, entity, positional_args, named_args, klass)
|
|
6
6
|
self.method_name = method_name
|
|
7
7
|
self.entity = entity
|
|
8
|
-
self.
|
|
8
|
+
self.positional_args = positional_args
|
|
9
|
+
self.named_args = named_args
|
|
9
10
|
self.klass = klass
|
|
10
11
|
end
|
|
11
12
|
end
|
|
12
|
-
end
|
|
13
|
+
end
|
data/lib/json_dumper/helper.rb
CHANGED
|
@@ -18,7 +18,11 @@ module JsonDumper
|
|
|
18
18
|
def dumper_fetch(delayed, camelcase: true)
|
|
19
19
|
preload_hash = delayed.klass.send("#{delayed.method_name}_preload")
|
|
20
20
|
preloader.preload(delayed.entity,preload_hash)
|
|
21
|
-
result =
|
|
21
|
+
result = if delayed.named_args.empty?
|
|
22
|
+
delayed.klass.send(delayed.method_name, delayed.entity, *delayed.positional_args)
|
|
23
|
+
else
|
|
24
|
+
delayed.klass.send(delayed.method_name, delayed.entity, *delayed.positional_args, **delayed.named_args)
|
|
25
|
+
end
|
|
22
26
|
if camelcase
|
|
23
27
|
result = KeyTransformer.keys_to_camelcase(result)
|
|
24
28
|
end
|
|
@@ -32,4 +36,4 @@ module JsonDumper
|
|
|
32
36
|
ActiveRecord::Base::Preloader.new
|
|
33
37
|
end
|
|
34
38
|
end
|
|
35
|
-
end
|
|
39
|
+
end
|
data/lib/json_dumper/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: json_dumper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- therusskiy
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-03-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -80,7 +80,7 @@ dependencies:
|
|
|
80
80
|
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
|
-
description:
|
|
83
|
+
description:
|
|
84
84
|
email:
|
|
85
85
|
- dimanrussian@gmail.com
|
|
86
86
|
executables: []
|
|
@@ -111,7 +111,7 @@ homepage: https://www.github.com/therusskiy/json_dumper
|
|
|
111
111
|
licenses:
|
|
112
112
|
- MIT
|
|
113
113
|
metadata: {}
|
|
114
|
-
post_install_message:
|
|
114
|
+
post_install_message:
|
|
115
115
|
rdoc_options: []
|
|
116
116
|
require_paths:
|
|
117
117
|
- lib
|
|
@@ -126,9 +126,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
126
126
|
- !ruby/object:Gem::Version
|
|
127
127
|
version: '0'
|
|
128
128
|
requirements: []
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
signing_key:
|
|
129
|
+
rubygems_version: 3.1.2
|
|
130
|
+
signing_key:
|
|
132
131
|
specification_version: 4
|
|
133
132
|
summary: Serialize ruby objects for javascript consumption
|
|
134
133
|
test_files: []
|