alba 2.4.1 → 2.4.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 +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.
|