json_dumper 0.4.0 → 0.6.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 +5 -2
- data/json_dumper.gemspec +4 -4
- data/lib/json_dumper/base.rb +25 -9
- data/lib/json_dumper/delayed.rb +5 -4
- data/lib/json_dumper/helper.rb +9 -5
- data/lib/json_dumper/version.rb +1 -1
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c3f8cc661b3ec91ad2709249ddb8f165b30013232653daec17d445b50878f7f9
|
4
|
+
data.tar.gz: b57f7dfaf14c69718dfab9d31a2df1d50a00740f8ecd63997d08984c138760a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83bc6f70c4c0ebe983f33788aab3ea5ae065dafce33f1b17759b26fad55f956a819bcdc7ecebe69e50e11865a184e841c41be062503794467523c82f8d5d8677
|
7
|
+
data.tar.gz: 20f9b01351431c77b3c7ee33c2a2321b91d77eef4f4d5fee02a0c9e3fa495edb8247f597a6f67982fbc0904d5f1e4848b27ff321a817cfa7efd6b57d461e5367
|
data/README.md
CHANGED
@@ -127,8 +127,7 @@ Furthermore you can omit defining `preview_preload` because JsonDumper returns e
|
|
127
127
|
|
128
128
|
You can utilize it in the following way:
|
129
129
|
```
|
130
|
-
|
131
|
-
preloader.preload(john, HumanJson.details_preload)
|
130
|
+
ActiveRecord::Base::Preloader.new(records: [john], associations: HumanJson.details_preload).call
|
132
131
|
json = HumanJson.details(john)
|
133
132
|
```
|
134
133
|
Another cool feature that you can now do is to do both preloading and serialization in a single command via `fetch_METHOD_NAME`.
|
@@ -206,3 +205,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/therus
|
|
206
205
|
|
207
206
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
208
207
|
|
208
|
+
## Related blogpost
|
209
|
+
|
210
|
+
Check it out [here](http://www.dmitry-ishkov.com/2017/08/better-ruby-serialization-into-json.html)
|
211
|
+
|
data/json_dumper.gemspec
CHANGED
@@ -30,9 +30,9 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
|
-
spec.add_runtime_dependency "activerecord"
|
34
|
-
spec.add_development_dependency "bundler", "~>
|
35
|
-
spec.add_development_dependency "rake", "~>
|
36
|
-
spec.add_development_dependency "rspec", "~> 3.
|
33
|
+
spec.add_runtime_dependency "activerecord", '>= 7.0'
|
34
|
+
spec.add_development_dependency "bundler", "~> 2.5.5"
|
35
|
+
spec.add_development_dependency "rake", "~> 13.3"
|
36
|
+
spec.add_development_dependency "rspec", "~> 3.9"
|
37
37
|
spec.add_development_dependency "gon"
|
38
38
|
end
|
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
@@ -17,8 +17,12 @@ module JsonDumper
|
|
17
17
|
|
18
18
|
def dumper_fetch(delayed, camelcase: true)
|
19
19
|
preload_hash = delayed.klass.send("#{delayed.method_name}_preload")
|
20
|
-
|
21
|
-
result =
|
20
|
+
ar_preload(records: delayed.entity, associations: preload_hash)
|
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
|
@@ -28,8 +32,8 @@ module JsonDumper
|
|
28
32
|
############ PRIVATE ##############
|
29
33
|
private
|
30
34
|
|
31
|
-
def
|
32
|
-
ActiveRecord::Base::Preloader.new
|
35
|
+
def ar_preload(records:, associations:)
|
36
|
+
ActiveRecord::Base::Preloader.new(records: Array.wrap(records), associations: associations).call
|
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.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- therusskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,56 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '7.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '7.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.5.5
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.5.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '13.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
61
|
+
version: '3.9'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
68
|
+
version: '3.9'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: gon
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,8 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: '0'
|
128
128
|
requirements: []
|
129
|
-
|
130
|
-
rubygems_version: 2.6.10
|
129
|
+
rubygems_version: 3.5.3
|
131
130
|
signing_key:
|
132
131
|
specification_version: 4
|
133
132
|
summary: Serialize ruby objects for javascript consumption
|