alba 2.4.1 → 2.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/alba/association.rb +11 -10
- data/lib/alba/conditional_attribute.rb +14 -3
- data/lib/alba/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e96e153192419f36d10cdd2377720a4d818bd935e8b4d7364e0272f460f74c30
|
4
|
+
data.tar.gz: 2ca78d61d8e01c1655f294f1836c386bb561db3fca45e964bd3c2b0023912b03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45c70af557b2fcb5ec1e8e7d2269fa6639e086d506b5b8706361a208c24a436ce61807d5d6466accfc516c4f1e556d23a3535236ed2d9047f3c72491702028bb
|
7
|
+
data.tar.gz: 148818585445adde1fa4f992df975400863856e227e12fe706f241523a06901e34d099511d13ae5fff4cbd5a9ea29c659551034ffb188bc1cc3d519c72e2a88e
|
data/CHANGELOG.md
CHANGED
data/lib/alba/association.rb
CHANGED
@@ -8,7 +8,7 @@ module Alba
|
|
8
8
|
attr_reader :const_cache
|
9
9
|
end
|
10
10
|
|
11
|
-
attr_reader :
|
11
|
+
attr_reader :name
|
12
12
|
|
13
13
|
# @param name [Symbol, String] name of the method to fetch association
|
14
14
|
# @param condition [Proc, nil] a proc filtering data
|
@@ -36,16 +36,16 @@ module Alba
|
|
36
36
|
# @return [Hash]
|
37
37
|
def to_h(target, within: nil, params: {})
|
38
38
|
params = params.merge(@params)
|
39
|
-
|
40
|
-
|
41
|
-
return if
|
39
|
+
object = target.__send__(@name)
|
40
|
+
object = @condition.call(object, params, target) if @condition
|
41
|
+
return if object.nil?
|
42
42
|
|
43
43
|
if @resource.is_a?(Proc)
|
44
|
-
return to_h_with_each_resource(within, params) if
|
44
|
+
return to_h_with_each_resource(object, within, params) if object.is_a?(Enumerable)
|
45
45
|
|
46
|
-
@resource.call(
|
46
|
+
@resource.call(object).new(object, within: within, params: params).to_h
|
47
47
|
else
|
48
|
-
to_h_with_constantize_resource(within, params)
|
48
|
+
to_h_with_constantize_resource(object, within, params)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -56,6 +56,7 @@ module Alba
|
|
56
56
|
when Class
|
57
57
|
resource
|
58
58
|
when Symbol, String
|
59
|
+
Object.const_get(resource)
|
59
60
|
self.class.const_cache.fetch(resource) do
|
60
61
|
self.class.const_cache[resource] = Object.const_get(resource)
|
61
62
|
end
|
@@ -76,13 +77,13 @@ module Alba
|
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
79
|
-
def to_h_with_each_resource(within, params)
|
80
|
-
|
80
|
+
def to_h_with_each_resource(object, within, params)
|
81
|
+
object.map do |item|
|
81
82
|
@resource.call(item).new(item, within: within, params: params).to_h
|
82
83
|
end
|
83
84
|
end
|
84
85
|
|
85
|
-
def to_h_with_constantize_resource(within, params)
|
86
|
+
def to_h_with_constantize_resource(object, within, params)
|
86
87
|
@resource = constantize(@resource)
|
87
88
|
@resource.new(object, params: params, within: within).to_h
|
88
89
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'association'
|
2
2
|
require_relative 'constants'
|
3
|
+
require 'ostruct'
|
3
4
|
|
4
5
|
module Alba
|
5
6
|
# Represents attribute with `if` option
|
@@ -23,7 +24,7 @@ module Alba
|
|
23
24
|
fetched_attribute = yield(@body)
|
24
25
|
return fetched_attribute unless with_two_arity_proc_condition
|
25
26
|
|
26
|
-
return Alba::REMOVE_KEY unless resource.instance_exec(object,
|
27
|
+
return Alba::REMOVE_KEY unless resource.instance_exec(object, objectize(fetched_attribute), &@condition)
|
27
28
|
|
28
29
|
fetched_attribute
|
29
30
|
end
|
@@ -48,8 +49,18 @@ module Alba
|
|
48
49
|
@condition.is_a?(Proc) && @condition.arity >= 2
|
49
50
|
end
|
50
51
|
|
51
|
-
|
52
|
-
|
52
|
+
# OpenStruct is used as a simple solution for converting Hash or Array of Hash into an object
|
53
|
+
# Using OpenStruct is not good in general, but in this case there's no other solution
|
54
|
+
def objectize(fetched_attribute)
|
55
|
+
return fetched_attribute unless @body.is_a?(Alba::Association)
|
56
|
+
|
57
|
+
if fetched_attribute.is_a?(Array)
|
58
|
+
fetched_attribute.map do |hash|
|
59
|
+
OpenStruct.new(hash)
|
60
|
+
end
|
61
|
+
else
|
62
|
+
OpenStruct.new(fetched_attribute)
|
63
|
+
end
|
53
64
|
end
|
54
65
|
end
|
55
66
|
end
|
data/lib/alba/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OKURA Masafumi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Alba is the fastest JSON serializer for Ruby. It focuses on performance,
|
14
14
|
flexibility and usability.
|