alba 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +16 -0
- data/lib/alba.rb +17 -6
- data/lib/alba/resource.rb +12 -4
- data/lib/alba/resources/default_resource.rb +9 -0
- data/lib/alba/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89b4df7ce18a63e20cee9e87bd2855ef9c4735c4f6e4e1ef55433c5ba0a2fbd0
|
4
|
+
data.tar.gz: 63fa94fa17cdf3f5bfeef5f2e7b0d6efeec1fd06ad8d5386fb389fea3db0343a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 063d913715faa3917df5658d798ceb1619b9a2aef1dc0875c92c1592b3d3f9025bec60a364ebe0d54fb0769e18ba78f5786caa288159d304dfeca7ab00149d2b
|
7
|
+
data.tar.gz: 66aed62d355cd6fd8527ad4da27c53c9c42bf98606586a562b84dc377e6041125653d9669cf77c14427b4a1796b6c7abd7e6b2861323bac51fde28bfe05a7e7a
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -108,6 +108,22 @@ UserResource1.new(user).serialize
|
|
108
108
|
# => '{"id":1,"articles":[{"title":"Hello World!"},{"title":"Super nice"}]}'
|
109
109
|
```
|
110
110
|
|
111
|
+
### Inline definition with `Alba.serialize`
|
112
|
+
|
113
|
+
`Alba.serialize` method is a shortcut to define everything inline.
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
Alba.serialize(user, with: proc { set key: :foo }) do
|
117
|
+
attributes :id
|
118
|
+
many :articles do
|
119
|
+
attributes :title, :body
|
120
|
+
end
|
121
|
+
end
|
122
|
+
# => '{"foo":{"id":1,"articles":[{"title":"Hello World!","body":"Hello World!!!"},{"title":"Super nice","body":"Really nice!"}]}}'
|
123
|
+
```
|
124
|
+
|
125
|
+
Although this might be useful sometimes, it's generally recommended to define a class for both Resource and Serializer.
|
126
|
+
|
111
127
|
## Comparison
|
112
128
|
|
113
129
|
Since Alba is intended to be stupid, there are many things Alba can't do while other gems can. However, from the same reason, it's extremely faster than alternatives.
|
data/lib/alba.rb
CHANGED
@@ -2,6 +2,7 @@ require 'alba/version'
|
|
2
2
|
require 'alba/serializers/default_serializer'
|
3
3
|
require 'alba/serializer'
|
4
4
|
require 'alba/resource'
|
5
|
+
require 'alba/resources/default_resource'
|
5
6
|
|
6
7
|
# Core module
|
7
8
|
module Alba
|
@@ -9,13 +10,23 @@ module Alba
|
|
9
10
|
|
10
11
|
class << self
|
11
12
|
attr_reader :backend
|
12
|
-
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
def backend=(backend)
|
15
|
+
@backend = backend&.to_sym
|
16
|
+
end
|
17
|
+
|
18
|
+
def serialize(object, with: nil, &block)
|
19
|
+
raise ArgumentError, 'Block required' unless block
|
20
|
+
|
21
|
+
resource_class.class_eval(&block)
|
22
|
+
resource = resource_class.new(object)
|
23
|
+
resource.serialize(with: with)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
17
27
|
|
18
|
-
|
19
|
-
|
28
|
+
def resource_class
|
29
|
+
::Alba::Resources::DefaultResource.clone
|
30
|
+
end
|
20
31
|
end
|
21
32
|
end
|
data/lib/alba/resource.rb
CHANGED
@@ -33,10 +33,10 @@ module Alba
|
|
33
33
|
@_serializer || Alba::Serializers::DefaultSerializer
|
34
34
|
when ->(obj) { obj.is_a?(Class) && obj <= Alba::Serializer }
|
35
35
|
with
|
36
|
-
when
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
when Proc
|
37
|
+
inline_extended_serializer(with)
|
38
|
+
else
|
39
|
+
raise ArgumentError, 'Unexpected type for with, possible types are Class or Proc'
|
40
40
|
end
|
41
41
|
serializer.new(serializable_hash).serialize
|
42
42
|
end
|
@@ -47,6 +47,14 @@ module Alba
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
alias to_hash serializable_hash
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def inline_extended_serializer(with)
|
54
|
+
klass = ::Alba::Serializers::DefaultSerializer.clone
|
55
|
+
klass.class_eval(&with)
|
56
|
+
klass
|
57
|
+
end
|
50
58
|
end
|
51
59
|
|
52
60
|
# Class methods
|
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: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OKURA Masafumi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Fast and flexible JSON serializer
|
14
14
|
email:
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- lib/alba/many.rb
|
35
35
|
- lib/alba/one.rb
|
36
36
|
- lib/alba/resource.rb
|
37
|
+
- lib/alba/resources/default_resource.rb
|
37
38
|
- lib/alba/serializer.rb
|
38
39
|
- lib/alba/serializers/default_serializer.rb
|
39
40
|
- lib/alba/version.rb
|